summaryrefslogtreecommitdiff
path: root/libjava/include/java-interp.h
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2002-06-24 20:38:47 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2002-06-24 20:38:47 +0000
commit5b783ef3c8e261963a62179aa3232cf831fd99f5 (patch)
treee59ad5d049989b731a9627c3a574a3d26f58284f /libjava/include/java-interp.h
parente14e5db52ebbce7c1524258ad9f7cc7b4cfdfcf9 (diff)
downloadgcc-5b783ef3c8e261963a62179aa3232cf831fd99f5.tar.gz
* verify.cc (branch_prepass): Updated for change to exception
handler type. (verify_instructions_0): Likewise. * defineclass.cc (handleCodeAttribute): Initialize `prepared'. (handleExceptionTableEntry): Updated for change to exception handler type. * java/lang/Class.h (Class): Removed _Jv_InterpMethodInvocation. * include/java-interp.h (_Jv_InterpMethodInvocation): Removed. (union _Jv_InterpPC): New. (class _Jv_InterpException): Changed types to _Jv_InterpPC. (class _Jv_InterpMethod): Added new `prepared' field. (class _Jv_InterpMethod): Added `compile' method. Removed `continue1' and `find_exception'. Changed arguments to `run'. * interpret.cc (union insn_slot): New. (find_exception): Removed. (run_normal): Removed most logic. (run_synch_object): Likewise; also, use JvSynchronize. (run_synch_class): Likewise. (run): Removed. (continue1): Renamed as `run'. Compile bytecode if required. Add new code to allow refinement of direct-threaded code at runtime. Handle exceptions. (SAVE_PC): Removed. (compile): New method. (SET_ONE, SET_INSN, SET_INT, SET_DATUM): New defines. (NULLARRAYCHECK): Don't use SAVE_PC. (pc_t): New typedef. (TAKE_GOTO, GET1S, GET1U, GET2U, AVAL1U, AVAL2U, AVAL2UP, SKIP_GOTO, GOTO_VAL, PCVAL, AMPAMP): New macros. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@54968 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/include/java-interp.h')
-rw-r--r--libjava/include/java-interp.h45
1 files changed, 19 insertions, 26 deletions
diff --git a/libjava/include/java-interp.h b/libjava/include/java-interp.h
index bc1f3ca1cf4..de1d88f452e 100644
--- a/libjava/include/java-interp.h
+++ b/libjava/include/java-interp.h
@@ -1,6 +1,6 @@
// java-interp.h - Header file for the bytecode interpreter. -*- c++ -*-
-/* Copyright (C) 1999, 2000, 2001 Free Software Foundation
+/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation
This file is part of libgcj.
@@ -49,14 +49,22 @@ void _Jv_VerifyMethod (_Jv_InterpMethod *method);
class _Jv_InterpClass;
class _Jv_InterpMethod;
-class _Jv_InterpMethodInvocation;
+
+// Before a method is "compiled" we store values as the bytecode PC,
+// an int. Afterwards we store them as pointers into the prepared
+// code itself.
+union _Jv_InterpPC
+{
+ int i;
+ void *p;
+};
class _Jv_InterpException
{
- int start_pc;
- int end_pc;
- int handler_pc;
- int handler_type;
+ _Jv_InterpPC start_pc;
+ _Jv_InterpPC end_pc;
+ _Jv_InterpPC handler_pc;
+ _Jv_InterpPC handler_type;
friend class _Jv_ClassReader;
friend class _Jv_InterpMethod;
@@ -92,6 +100,8 @@ class _Jv_InterpMethod : public _Jv_MethodBase
_Jv_ushort exc_count;
+ void *prepared;
+
unsigned char* bytecode ()
{
return
@@ -99,7 +109,7 @@ class _Jv_InterpMethod : public _Jv_MethodBase
+ ROUND((sizeof (_Jv_InterpMethod)
+ exc_count*sizeof (_Jv_InterpException)), 4);
}
-
+
_Jv_InterpException * exceptions ()
{
return (_Jv_InterpException*) (this+1);
@@ -115,40 +125,23 @@ class _Jv_InterpMethod : public _Jv_MethodBase
// return the method's invocation pointer (a stub).
void *ncode ();
- void continue1 (_Jv_InterpMethodInvocation *inv);
+ void compile (const void * const *);
static void run_normal (ffi_cif*, void*, ffi_raw*, void*);
static void run_synch_object (ffi_cif*, void*, ffi_raw*, void*);
static void run_synch_class (ffi_cif*, void*, ffi_raw*, void*);
- inline jobject run (ffi_cif*, void*, ffi_raw*,
- _Jv_InterpMethodInvocation*);
-
- bool find_exception (jobject ex,
- _Jv_InterpMethodInvocation *inv);
+ void run (void*, ffi_raw *);
public:
static void dump_object(jobject o);
friend class _Jv_ClassReader;
- friend class _Jv_InterpMethodInvocation;
friend class _Jv_BytecodeVerifier;
friend void _Jv_PrepareClass(jclass);
};
-class _Jv_InterpMethodInvocation {
- _Jv_InterpMethod *running;
- _Jv_word *sp;
- unsigned char *pc;
- _Jv_word state[0];
-
- _Jv_word* stack_base () { return &state[0]; }
- _Jv_word* local_base () { return &state[running->max_stack]; }
-
- friend class _Jv_InterpMethod;
-};
-
class _Jv_InterpClass : public java::lang::Class
{
_Jv_MethodBase **interpreted_methods;