< prev index next >

src/hotspot/cpu/sparc/macroAssembler_sparc.cpp

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

*** 35,44 **** --- 35,46 ---- #include "prims/methodHandles.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/objectMonitor.hpp" #include "runtime/os.inline.hpp" + #include "runtime/safepoint.hpp" + #include "runtime/safepointMechanism.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" #include "utilities/align.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS
*** 234,243 **** --- 236,259 ---- set(os::get_memory_serialize_page(), tmp1); st(G0, tmp1, tmp2); } + void MacroAssembler::safepoint_poll(Label& slow_path, bool a, Register thread_reg, Register temp_reg) { + if (SafepointMechanism::uses_thread_local_poll()) { + ldx(Address(thread_reg, Thread::polling_page_offset()), temp_reg, 0); + // Armed page has poll bit set. + and3(temp_reg, SafepointMechanism::poll_bit(), temp_reg); + br_notnull(temp_reg, a, Assembler::pn, slow_path); + } else { + AddressLiteral sync_state(SafepointSynchronize::address_of_state()); + + load_contents(sync_state, temp_reg); + cmp(temp_reg, SafepointSynchronize::_not_synchronized); + br(Assembler::notEqual, a, Assembler::pn, slow_path); + } + } void MacroAssembler::enter() { Unimplemented(); }
< prev index next >