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