src/cpu/x86/vm/templateTable_x86_32.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
8048721 Cdiff src/cpu/x86/vm/templateTable_x86_32.cpp
src/cpu/x86/vm/templateTable_x86_32.cpp
Print this page
*** 1722,1743 ****
// rdi: locals pointer
// rsi: bcp
__ testptr(rax, rax); // test result
__ jcc(Assembler::zero, dispatch); // no osr if null
// nmethod may have been invalidated (VM may block upon call_VM return)
! __ movl(rcx, Address(rax, nmethod::entry_bci_offset()));
! __ cmpl(rcx, InvalidOSREntryBci);
! __ jcc(Assembler::equal, dispatch);
// We have the address of an on stack replacement routine in rax,
// We need to prepare to execute the OSR method. First we must
// migrate the locals and monitors off of the stack.
__ mov(rbx, rax); // save the nmethod
! const Register thread = rcx;
! __ get_thread(thread);
call_VM(noreg, CAST_FROM_FN_PTR(address, SharedRuntime::OSR_migration_begin));
// rax, is OSR buffer, move it to expected parameter location
__ mov(rcx, rax);
// pop the interpreter frame
--- 1722,1741 ----
// rdi: locals pointer
// rsi: bcp
__ testptr(rax, rax); // test result
__ jcc(Assembler::zero, dispatch); // no osr if null
// nmethod may have been invalidated (VM may block upon call_VM return)
! __ cmpb(Address(rax, nmethod::state_offset()), 0);
! __ jcc(Assembler::notEqual, dispatch);
// We have the address of an on stack replacement routine in rax,
// We need to prepare to execute the OSR method. First we must
// migrate the locals and monitors off of the stack.
__ mov(rbx, rax); // save the nmethod
! __ get_thread(rcx);
call_VM(noreg, CAST_FROM_FN_PTR(address, SharedRuntime::OSR_migration_begin));
// rax, is OSR buffer, move it to expected parameter location
__ mov(rcx, rax);
// pop the interpreter frame
src/cpu/x86/vm/templateTable_x86_32.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File