aboutsummaryrefslogtreecommitdiff
path: root/libjava/interpret.cc
diff options
context:
space:
mode:
authorKeith Seitz <keiths@redhat.com>2006-10-10 20:15:51 +0000
committerKeith Seitz <kseitz@gcc.gnu.org>2006-10-10 20:15:51 +0000
commit05ee9ca08fa14577c842dbf0bece1b0d4e56eb00 (patch)
tree128c26f6b83c22bf5dbed4b27189a9b690415438 /libjava/interpret.cc
parent4e34ede292add9a4518f78848bdf76f9b4944f6f (diff)
downloadgcc-05ee9ca08fa14577c842dbf0bece1b0d4e56eb00.zip
gcc-05ee9ca08fa14577c842dbf0bece1b0d4e56eb00.tar.gz
gcc-05ee9ca08fa14577c842dbf0bece1b0d4e56eb00.tar.bz2
java-interp.h (_Jv_InterpMethod::get_insn): Declare.
* 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. From-SVN: r117614
Diffstat (limited to 'libjava/interpret.cc')
-rw-r--r--libjava/interpret.cc40
1 files changed, 40 insertions, 0 deletions
diff --git a/libjava/interpret.cc b/libjava/interpret.cc
index 1c4e21e..b5c8387 100644
--- a/libjava/interpret.cc
+++ b/libjava/interpret.cc
@@ -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 ()
{