提交 cb6ef5af 编写于 作者: G goetz

8024469: PPC64 (part 202): cppInterpreter: support for OSR.

Summary: Call OSR migration with last java frame.
Reviewed-by: kvn
上级 5bff05b0
...@@ -345,7 +345,9 @@ ...@@ -345,7 +345,9 @@
nmethod* osr_nmethod; \ nmethod* osr_nmethod; \
OSR_REQUEST(osr_nmethod, branch_pc); \ OSR_REQUEST(osr_nmethod, branch_pc); \
if (osr_nmethod != NULL && osr_nmethod->osr_entry_bci() != InvalidOSREntryBci) { \ if (osr_nmethod != NULL && osr_nmethod->osr_entry_bci() != InvalidOSREntryBci) { \
intptr_t* buf = SharedRuntime::OSR_migration_begin(THREAD); \ intptr_t* buf; \
/* Call OSR migration with last java frame only, no checks. */ \
CALL_VM_NAKED_LJF(buf=SharedRuntime::OSR_migration_begin(THREAD)); \
istate->set_msg(do_osr); \ istate->set_msg(do_osr); \
istate->set_osr_buf((address)buf); \ istate->set_osr_buf((address)buf); \
istate->set_osr_entry(osr_nmethod->osr_entry()); \ istate->set_osr_entry(osr_nmethod->osr_entry()); \
...@@ -418,13 +420,17 @@ ...@@ -418,13 +420,17 @@
CACHE_CP(); \ CACHE_CP(); \
CACHE_LOCALS(); CACHE_LOCALS();
// Call the VM don't check for pending exceptions // Call the VM with last java frame only.
#define CALL_VM_NOCHECK(func) \ #define CALL_VM_NAKED_LJF(func) \
DECACHE_STATE(); \ DECACHE_STATE(); \
SET_LAST_JAVA_FRAME(); \ SET_LAST_JAVA_FRAME(); \
func; \ func; \
RESET_LAST_JAVA_FRAME(); \ RESET_LAST_JAVA_FRAME(); \
CACHE_STATE(); \ CACHE_STATE();
// Call the VM. Don't check for pending exceptions.
#define CALL_VM_NOCHECK(func) \
CALL_VM_NAKED_LJF(func) \
if (THREAD->pop_frame_pending() && \ if (THREAD->pop_frame_pending() && \
!THREAD->pop_frame_in_process()) { \ !THREAD->pop_frame_in_process()) { \
goto handle_Pop_Frame; \ goto handle_Pop_Frame; \
...@@ -2702,7 +2708,7 @@ run: ...@@ -2702,7 +2708,7 @@ run:
tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), except_oop()); tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), except_oop());
tty->print_cr(" thrown in interpreter method <%s>", METHOD->print_value_string()); tty->print_cr(" thrown in interpreter method <%s>", METHOD->print_value_string());
tty->print_cr(" at bci %d, continuing at %d for thread " INTPTR_FORMAT, tty->print_cr(" at bci %d, continuing at %d for thread " INTPTR_FORMAT,
pc - (intptr_t)METHOD->code_base(), istate->bcp() - (intptr_t)METHOD->code_base(),
continuation_bci, THREAD); continuation_bci, THREAD);
} }
// for AbortVMOnException flag // for AbortVMOnException flag
...@@ -2715,7 +2721,7 @@ run: ...@@ -2715,7 +2721,7 @@ run:
tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), except_oop()); tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), except_oop());
tty->print_cr(" thrown in interpreter method <%s>", METHOD->print_value_string()); tty->print_cr(" thrown in interpreter method <%s>", METHOD->print_value_string());
tty->print_cr(" at bci %d, unwinding for thread " INTPTR_FORMAT, tty->print_cr(" at bci %d, unwinding for thread " INTPTR_FORMAT,
pc - (intptr_t) METHOD->code_base(), istate->bcp() - (intptr_t)METHOD->code_base(),
THREAD); THREAD);
} }
// for AbortVMOnException flag // for AbortVMOnException flag
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册