< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Print this page
rev 47415 : Add Thread Local handshakes and thread local polling

*** 36,45 **** --- 36,47 ---- #include "prims/methodHandles.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/objectMonitor.hpp" #include "runtime/os.hpp" + #include "runtime/safepoint.hpp" + #include "runtime/safepointMechanism.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" #include "runtime/thread.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS
*** 3742,3751 **** --- 3744,3772 ---- // Size of store must match masking code above movl(as_Address(ArrayAddress(page, index)), tmp); } + #ifdef _LP64 + void MacroAssembler::safepoint_poll(Label& slow_path, Register thread_reg, Register temp_reg) { + if (SafepointMechanism::uses_thread_local_poll()) { + testb(Address(r15_thread, Thread::polling_page_offset()), SafepointMechanism::poll_bit()); + jcc(Assembler::notZero, slow_path); // handshake bit set implies poll + } else { + cmp32(ExternalAddress(SafepointSynchronize::address_of_state()), + SafepointSynchronize::_not_synchronized); + jcc(Assembler::notEqual, slow_path); + } + } + #else + void MacroAssembler::safepoint_poll(Label& slow_path) { + cmp32(ExternalAddress(SafepointSynchronize::address_of_state()), + SafepointSynchronize::_not_synchronized); + jcc(Assembler::notEqual, slow_path); + } + #endif + // Calls to C land // // When entering C land, the rbp, & rsp of the last Java frame have to be recorded // in the (thread-local) JavaThread object. When leaving C land, the last Java fp // has to be reset to 0. This is required to allow proper stack traversal.
< prev index next >