< prev index next >

src/hotspot/cpu/x86/templateTable_x86.cpp

Print this page
rev 48494 : 8195112: x86 (32 bit): implementation for Thread-local handshakes
Reviewed-by:

*** 2561,2583 **** __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), robj); __ bind(skip_register_finalizer); } - #ifdef _LP64 if (SafepointMechanism::uses_thread_local_poll() && _desc->bytecode() != Bytecodes::_return_register_finalizer) { Label no_safepoint; NOT_PRODUCT(__ block_comment("Thread-local Safepoint poll")); __ testb(Address(r15_thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit()); __ jcc(Assembler::zero, no_safepoint); __ push(state); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_safepoint)); __ pop(state); __ bind(no_safepoint); } - #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. if (state == itos) { --- 2561,2587 ---- __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), robj); __ bind(skip_register_finalizer); } if (SafepointMechanism::uses_thread_local_poll() && _desc->bytecode() != Bytecodes::_return_register_finalizer) { Label no_safepoint; NOT_PRODUCT(__ block_comment("Thread-local Safepoint poll")); + #ifdef AMD64 __ testb(Address(r15_thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit()); + #else + const Register thread = rdi; + __ get_thread(thread); + __ testb(Address(thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit()); + #endif __ jcc(Assembler::zero, no_safepoint); __ push(state); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::at_safepoint)); __ pop(state); __ bind(no_safepoint); } // 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. if (state == itos) {
< prev index next >