mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 03:24:38 +02:00
8019519: PPC64 (part 105): C interpreter: implement support for jvmti early return
Reviewed-by: sspitsyn, kvn
This commit is contained in:
parent
8cc4fad115
commit
6514fe6794
2 changed files with 106 additions and 50 deletions
|
@ -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; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue