< prev index next >

src/hotspot/cpu/x86/interp_masm_x86.cpp

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

*** 826,842 **** bind(L); } if (verifyoop) { verify_oop(rax, state); } - #ifdef _LP64 - Label no_safepoint, dispatch; address* const safepoint_table = Interpreter::safept_table(state); if (SafepointMechanism::uses_thread_local_poll() && table != safepoint_table && generate_poll) { NOT_PRODUCT(block_comment("Thread-local Safepoint poll")); - testb(Address(r15_thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit()); jccb(Assembler::zero, no_safepoint); lea(rscratch1, ExternalAddress((address)safepoint_table)); jmpb(dispatch); --- 826,841 ---- bind(L); } if (verifyoop) { verify_oop(rax, state); } address* const safepoint_table = Interpreter::safept_table(state); + #ifdef _LP64 + Label no_safepoint, dispatch; if (SafepointMechanism::uses_thread_local_poll() && table != safepoint_table && generate_poll) { NOT_PRODUCT(block_comment("Thread-local Safepoint poll")); testb(Address(r15_thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit()); jccb(Assembler::zero, no_safepoint); lea(rscratch1, ExternalAddress((address)safepoint_table)); jmpb(dispatch);
*** 847,859 **** bind(dispatch); jmp(Address(rscratch1, rbx, Address::times_8)); #else Address index(noreg, rbx, Address::times_ptr); ! ExternalAddress tbl((address)table); ! ArrayAddress dispatch(tbl, index); ! jump(dispatch); #endif // _LP64 } void InterpreterMacroAssembler::dispatch_only(TosState state, bool generate_poll) { dispatch_base(state, Interpreter::dispatch_table(state), true, generate_poll); --- 846,872 ---- bind(dispatch); jmp(Address(rscratch1, rbx, Address::times_8)); #else Address index(noreg, rbx, Address::times_ptr); ! if (SafepointMechanism::uses_thread_local_poll() && table != safepoint_table && generate_poll) { ! NOT_PRODUCT(block_comment("Thread-local Safepoint poll")); ! Label no_safepoint; ! const Register thread = rcx; ! get_thread(thread); ! testb(Address(thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit()); ! ! jccb(Assembler::zero, no_safepoint); ! ArrayAddress dispatch_addr(ExternalAddress((address)safepoint_table), index); ! jump(dispatch_addr); ! bind(no_safepoint); ! } ! ! { ! ArrayAddress dispatch_addr(ExternalAddress((address)table), index); ! jump(dispatch_addr); ! } #endif // _LP64 } void InterpreterMacroAssembler::dispatch_only(TosState state, bool generate_poll) { dispatch_base(state, Interpreter::dispatch_table(state), true, generate_poll);
< prev index next >