(_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
+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
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
#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 ()
{