< 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 >