OSDN Git Service

* include/java-interp.h (_Jv_InterpMethod::get_insn): Declare.
authorkseitz <kseitz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 Oct 2006 20:15:51 +0000 (20:15 +0000)
committerkseitz <kseitz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 Oct 2006 20:15:51 +0000 (20:15 +0000)
        (_Jv_InterpMethod::set_insn): Declare.
        * interpret.cc (_Jv_InterpMethod::get_insn): New method.
        (_Jv_InterpMethod::get_insn): New method.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117614 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/include/java-interp.h
libjava/interpret.cc

index b1853f4..e6933f3 100644 (file)
@@ -1,3 +1,10 @@
+2006-10-10  Keith Seitz  <keiths@redhat.com>
+
+       * include/java-interp.h (_Jv_InterpMethod::get_insn): Declare.
+       (_Jv_InterpMethod::set_insn): Declare.
+       * interpret.cc (_Jv_InterpMethod::get_insn): New method.
+       (_Jv_InterpMethod::get_insn): New method.
+
 2006-10-10  Tom Tromey  <tromey@redhat.com>
 
        * prims.cc (_Jv_PrependVersionedLibdir): Use
index 133fd19..276a887 100644 (file)
@@ -206,6 +206,13 @@ class _Jv_InterpMethod : public _Jv_MethodBase
   void get_line_table (jlong& start, jlong& end, jintArray& line_numbers,
                       jlongArray& code_indices);
 
+  // Gets the instruction at the given index
+  pc_t get_insn (jlong index);
+
+  /* Writes the given instruction at the given code index. Returns
+     the insn or NULL if index is invalid. */
+  pc_t set_insn (jlong index, pc_t insn);
+
 #ifdef DIRECT_THREADED
   friend void _Jv_CompileMethod (_Jv_InterpMethod*);
 #endif
index 1c4e21e..b5c8387 100644 (file)
@@ -1384,6 +1384,46 @@ _Jv_InterpMethod::get_line_table (jlong& start, jlong& end,
 #endif // !DIRECT_THREADED
 }
 
+pc_t
+_Jv_InterpMethod::get_insn (jlong index)
+{
+  pc_t code;
+
+#ifdef DIRECT_THREADED
+  if (index >= number_insn_slots || index < 0)
+    return NULL;
+
+  code = prepared;
+#else // !DIRECT_THREADED
+  if (index >= code_length || index < 0)
+    return NULL;
+
+  code = reinterpret_cast<pc_t> (bytecode ());
+#endif // !DIRECT_THREADED
+
+  return &code[index];
+}
+
+pc_t
+_Jv_InterpMethod::set_insn (jlong index, pc_t insn)
+{
+#ifdef DIRECT_THREADED
+  if (index >= number_insn_slots || index < 0)
+    return NULL;
+
+  pc_t code = prepared;
+  code[index].insn = insn->insn;
+#else // !DIRECT_THREADED
+  if (index >= code_length || index < 0)
+    return NULL;
+
+  pc_t code = reinterpret_cast<pc_t> (bytecode ());
+  code[index] = *insn;
+#endif // !DIRECT_THREADED
+
+  return &code[index];
+}
+
 void *
 _Jv_JNIMethod::ncode ()
 {