< prev index next >
src/hotspot/cpu/x86/templateTable_x86.cpp
Print this page
*** 2675,2688 ****
__ pop(state);
__ bind(no_safepoint);
}
#endif
if (state == qtos) {
! const Register thread1 = NOT_LP64(rcx) LP64_ONLY(r15_thread);
! __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::return_value), rax);
! NOT_LP64(__ get_thread(thread1));
! __ get_vm_result(rax, thread1);
}
// Narrow result if state is itos but result type is smaller.
// Need to narrow in the return bytecode rather than in generate_return_entry
// since compiled code callers expect the result to already be narrowed.
--- 2675,2702 ----
__ pop(state);
__ bind(no_safepoint);
}
#endif
if (state == qtos) {
! #ifndef _LP64
! ShouldNotReachHere();
! #else
! Label not_buffered;
! __ lea(r14, ExternalAddress(VTBuffer::_base));
! __ cmpptr(rax, r14);
! __ jcc(Assembler::below, not_buffered);
! __ lea(r14, ExternalAddress(VTBuffer::_end));
! __ cmpptr(rax, r14);
! __ jcc(Assembler::aboveEqual, not_buffered);
! if (ReturnValuesInThreadLocalBuffer) {
! __ movptr((Address(r15_thread, JavaThread::return_buffered_value_offset())), rax);
! } else {
! __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::reallocate_value_in_heap), rax);
! __ get_vm_result(rax, r15_thread);
! }
! __ bind(not_buffered);
! #endif
}
// Narrow result if state is itos but result type is smaller.
// Need to narrow in the return bytecode rather than in generate_return_entry
// since compiled code callers expect the result to already be narrowed.
< prev index next >