--- old/src/hotspot/cpu/sparc/c1_LIRAssembler_sparc.cpp 2017-10-11 15:25:09.671217547 +0200 +++ new/src/hotspot/cpu/sparc/c1_LIRAssembler_sparc.cpp 2017-10-11 15:25:09.428207113 +0200 @@ -35,6 +35,7 @@ #include "gc/shared/collectedHeap.hpp" #include "nativeInst_sparc.hpp" #include "oops/objArrayKlass.hpp" +#include "runtime/safepointMechanism.inline.hpp" #include "runtime/sharedRuntime.hpp" #define __ _masm-> @@ -1415,7 +1416,11 @@ if (StackReservedPages > 0 && compilation()->has_reserved_stack_access()) { __ reserved_stack_check(); } - __ set((intptr_t)os::get_polling_page(), L0); + if (SafepointMechanism::uses_thread_local_poll()) { + __ ld_ptr(Address(G2_thread, Thread::polling_page_offset()), L0); + } else { + __ set((intptr_t)os::get_polling_page(), L0); + } __ relocate(relocInfo::poll_return_type); __ ld_ptr(L0, 0, G0); __ ret(); @@ -1424,11 +1429,16 @@ int LIR_Assembler::safepoint_poll(LIR_Opr tmp, CodeEmitInfo* info) { - __ set((intptr_t)os::get_polling_page(), tmp->as_register()); + if (SafepointMechanism::uses_thread_local_poll()) { + __ ld_ptr(Address(G2_thread, Thread::polling_page_offset()), tmp->as_register()); + } else { + __ set((intptr_t)os::get_polling_page(), tmp->as_register()); + } if (info != NULL) { add_debug_info_for_branch(info); } int offset = __ offset(); + __ relocate(relocInfo::poll_type); __ ld_ptr(tmp->as_register(), 0, G0); return offset;