8019519: PPC64 (part 105): C interpreter: implement support for jvmti early return

Reviewed-by: sspitsyn, kvn
This commit is contained in:
Goetz Lindenmaier 2013-07-03 11:25:06 +02:00
parent 8cc4fad115
commit 6514fe6794
2 changed files with 106 additions and 50 deletions

View file

@ -66,27 +66,26 @@ union VMJavaVal64 {
typedef class BytecodeInterpreter* interpreterState;
struct call_message {
class Method* _callee; /* method to call during call_method request */
address _callee_entry_point; /* address to jump to for call_method request */
int _bcp_advance; /* size of the invoke bytecode operation */
class Method* _callee; // method to call during call_method request
address _callee_entry_point; // address to jump to for call_method request
int _bcp_advance; // size of the invoke bytecode operation
};
struct osr_message {
address _osr_buf; /* the osr buffer */
address _osr_entry; /* the entry to the osr method */
address _osr_buf; // the osr buffer
address _osr_entry; // the entry to the osr method
};
struct osr_result {
nmethod* nm; /* osr nmethod */
address return_addr; /* osr blob return address */
nmethod* nm; // osr nmethod
address return_addr; // osr blob return address
};
// Result returned to frame manager
union frame_manager_message {
call_message _to_call; /* describes callee */
Bytecodes::Code _return_kind; /* i_return, a_return, ... */
osr_message _osr; /* describes the osr */
osr_result _osr_result; /* result of OSR request */
call_message _to_call; // describes callee
osr_message _osr; // describes the osr
osr_result _osr_result; // result of OSR request
};
class BytecodeInterpreter : StackObj {
@ -115,7 +114,8 @@ public:
more_monitors, // need a new monitor
throwing_exception, // unwind stack and rethrow
popping_frame, // unwind call and retry call
do_osr // request this invocation be OSR's
do_osr, // request this invocation be OSR's
early_return // early return as commanded by jvmti
};
private:
@ -216,8 +216,6 @@ inline void set_osr_entry(address entry) { _result._osr._osr_entry = entry; }
inline int bcp_advance() { return _result._to_call._bcp_advance; }
inline void set_bcp_advance(int count) { _result._to_call._bcp_advance = count; }
inline void set_return_kind(Bytecodes::Code kind) { _result._return_kind = kind; }
inline interpreterState prev() { return _prev_link; }
inline intptr_t* stack() { return _stack; }