From 16ed7fb2c8a7fd227f037804800768994453f6b5 Mon Sep 17 00:00:00 2001 From: kseitz Date: Sat, 30 Sep 2006 19:20:16 +0000 Subject: * include/java-interp.h (prepared): Change type to pc_t. (insn_index): Define for both DIRECT_THREADED and bytecode interpreters. * interpret.cc [!DIRECT_THREADED] (POKEI): Fix typo. (insn_index): Implement for bytecode interpreter. * interpret-run.cc [!DIRECT_THREADED] (AVAL1U): Add _Jv_Linker class qualifier to resolve_pool_entry. [!DIRECT_THREADED] (AVAL2U): Likewise. [!DIRECT_THREADED] bytecode() cannot be called without an object. Changed all typos. [!DIRECT_THREADED] Likewise for defining_class. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117333 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/ChangeLog | 13 +++++++++++++ libjava/include/java-interp.h | 6 +----- libjava/interpret-run.cc | 18 +++++++++--------- libjava/interpret.cc | 15 +++++++++------ 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 33b21ce28ff..177ac48d295 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,16 @@ +2006-09-30 Keith Seitz + + * include/java-interp.h (prepared): Change type to pc_t. + (insn_index): Define for both DIRECT_THREADED and bytecode interpreters. + * interpret.cc [!DIRECT_THREADED] (POKEI): Fix typo. + (insn_index): Implement for bytecode interpreter. + * interpret-run.cc [!DIRECT_THREADED] (AVAL1U): Add _Jv_Linker class + qualifier to resolve_pool_entry. + [!DIRECT_THREADED] (AVAL2U): Likewise. + [!DIRECT_THREADED] bytecode() cannot be called without an object. + Changed all typos. + [!DIRECT_THREADED] Likewise for defining_class. + 2006-09-26 Jack Howarth PR target/26792: diff --git a/libjava/include/java-interp.h b/libjava/include/java-interp.h index efb8b414200..133fd19f9fe 100644 --- a/libjava/include/java-interp.h +++ b/libjava/include/java-interp.h @@ -144,7 +144,7 @@ class _Jv_InterpMethod : public _Jv_MethodBase int line_table_len; _Jv_LineTableEntry *line_table; - void *prepared; + pc_t prepared; int number_insn_slots; unsigned char* bytecode () @@ -191,13 +191,9 @@ class _Jv_InterpMethod : public _Jv_MethodBase // number info is unavailable. int get_source_line(pc_t mpc); - - -#ifdef DIRECT_THREADED // Convenience function for indexing bytecode PC/insn slots in // line tables for JDWP jlong insn_index (pc_t pc); -#endif public: diff --git a/libjava/interpret-run.cc b/libjava/interpret-run.cc index ee9fcad5a68..afabad26994 100644 --- a/libjava/interpret-run.cc +++ b/libjava/interpret-run.cc @@ -291,10 +291,10 @@ details. */ // class'. #define AVAL1U() \ ({ int index = get1u (pc++); \ - resolve_pool_entry (meth->defining_class, index).o; }) + _Jv_Linker::resolve_pool_entry (meth->defining_class, index).o; }) #define AVAL2U() \ ({ int index = get2u (pc); pc += 2; \ - resolve_pool_entry (meth->defining_class, index).o; }) + _Jv_Linker::resolve_pool_entry (meth->defining_class, index).o; }) // Note that we don't need to resolve the pool entry here as class // constants are never wide. #define AVAL2UP() ({ int index = get2u (pc); pc += 2; &pool_data[index]; }) @@ -303,7 +303,7 @@ details. */ #define PCVAL(unionval) unionval.i #define AMPAMP(label) NULL - pc = bytecode (); + pc = meth->bytecode (); #endif /* DIRECT_THREADED */ @@ -1545,7 +1545,7 @@ details. */ pc_t base_pc = pc - 1; int index = POPI (); - pc_t base = (pc_t) bytecode (); + pc_t base = (pc_t) meth->bytecode (); while ((pc - base) % 4 != 0) ++pc; @@ -1601,7 +1601,7 @@ details. */ unsigned char *base_pc = pc-1; int index = POPI(); - unsigned char* base = bytecode (); + unsigned char* base = meth->bytecode (); while ((pc-base) % 4 != 0) ++pc; @@ -2469,7 +2469,7 @@ details. */ #ifdef DIRECT_THREADED void *logical_pc = (void *) ((insn_slot *) pc - 1); #else - int logical_pc = pc - 1 - bytecode (); + int logical_pc = pc - 1 - meth->bytecode (); #endif _Jv_InterpException *exc = meth->exceptions (); jclass exc_class = ex->getClass (); @@ -2484,8 +2484,8 @@ details. */ #else jclass handler = NULL; if (exc[i].handler_type.i != 0) - handler = (_Jv_Linker::resolve_pool_entry (defining_class, - exc[i].handler_type.i)).clazz; + handler = (_Jv_Linker::resolve_pool_entry (meth->defining_class, + exc[i].handler_type.i)).clazz; #endif /* DIRECT_THREADED */ if (handler == NULL || handler->isAssignableFrom (exc_class)) @@ -2494,7 +2494,7 @@ details. */ #ifdef DIRECT_THREADED pc = (insn_slot *) exc[i].handler_pc.p; #else - pc = bytecode () + exc[i].handler_pc.i; + pc = meth->bytecode () + exc[i].handler_pc.i; #endif /* DIRECT_THREADED */ sp = stack; sp++->o = ex; // Push exception. diff --git a/libjava/interpret.cc b/libjava/interpret.cc index 22196aa30a1..1c4e21e6b76 100644 --- a/libjava/interpret.cc +++ b/libjava/interpret.cc @@ -200,7 +200,7 @@ do { DEBUG_LOCALS_INSN(I, 'd'); \ #define PEEKA(I) (locals+(I))->o #define POKEI(I,V) \ -DEBUG_LOCALS_INSN(I,i) \ +DEBUG_LOCALS_INSN(I,'i'); \ ((locals+(I))->i = (V)) @@ -1307,23 +1307,27 @@ _Jv_InterpMethod::ncode () return self->ncode; } -#ifdef DIRECT_THREADED /* Find the index of the given insn in the array of insn slots for this method. Returns -1 if not found. */ jlong _Jv_InterpMethod::insn_index (pc_t pc) { jlong left = 0; +#ifdef DIRECT_THREADED jlong right = number_insn_slots; - insn_slot* slots = reinterpret_cast (prepared); + pc_t insns = prepared; +#else + jlong right = code_length; + pc_t insns = bytecode (); +#endif while (right >= 0) { jlong mid = (left + right) / 2; - if (&slots[mid] == pc) + if (&insns[mid] == pc) return mid; - if (pc < &slots[mid]) + if (pc < &insns[mid]) right = mid - 1; else left = mid + 1; @@ -1331,7 +1335,6 @@ _Jv_InterpMethod::insn_index (pc_t pc) return -1; } -#endif // DIRECT_THREADED void _Jv_InterpMethod::get_line_table (jlong& start, jlong& end, -- cgit v1.2.1