< prev index next >
src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp
Print this page
rev 48251 : 8193257: PPC64, s390 implementation for Thread-local handshakes
Reviewed-by:
@@ -34,10 +34,11 @@
#include "gc/shared/collectedHeap.hpp"
#include "gc/shared/barrierSet.hpp"
#include "gc/shared/cardTableModRefBS.hpp"
#include "nativeInst_ppc.hpp"
#include "oops/objArrayKlass.hpp"
+#include "runtime/safepointMechanism.inline.hpp"
#include "runtime/sharedRuntime.hpp"
#define __ _masm->
@@ -1312,15 +1313,14 @@
__ addi(R1_SP, R1_SP, frame_size);
} else {
__ pop_frame();
}
- if (LoadPollAddressFromThread) {
- // TODO: PPC port __ ld(polling_page, in_bytes(JavaThread::poll_address_offset()), R16_thread);
- Unimplemented();
+ if (SafepointMechanism::uses_thread_local_poll()) {
+ __ ld(polling_page, in_bytes(Thread::polling_page_offset()), R16_thread);
} else {
- __ load_const_optimized(polling_page, (long)(address) os::get_polling_page(), R0); // TODO: PPC port: get_standard_polling_page()
+ __ load_const_optimized(polling_page, (long)(address) os::get_polling_page(), R0);
}
// Restore return pc relative to callers' sp.
__ ld(return_pc, _abi(lr), R1_SP);
// Move return pc to LR.
@@ -1339,30 +1339,22 @@
__ blr();
}
int LIR_Assembler::safepoint_poll(LIR_Opr tmp, CodeEmitInfo* info) {
-
- if (LoadPollAddressFromThread) {
const Register poll_addr = tmp->as_register();
- // TODO: PPC port __ ld(poll_addr, in_bytes(JavaThread::poll_address_offset()), R16_thread);
- Unimplemented();
- __ relocate(relocInfo::poll_type); // XXX
- guarantee(info != NULL, "Shouldn't be NULL");
- int offset = __ offset();
- add_debug_info_for_branch(info);
- __ load_from_polling_page(poll_addr);
- return offset;
+ if (SafepointMechanism::uses_thread_local_poll()) {
+ __ ld(poll_addr, in_bytes(Thread::polling_page_offset()), R16_thread);
+ } else {
+ __ load_const_optimized(poll_addr, (intptr_t)os::get_polling_page(), R0);
}
-
- __ load_const_optimized(tmp->as_register(), (intptr_t)os::get_polling_page(), R0); // TODO: PPC port: get_standard_polling_page()
if (info != NULL) {
add_debug_info_for_branch(info);
}
int offset = __ offset();
__ relocate(relocInfo::poll_type);
- __ load_from_polling_page(tmp->as_register());
+ __ load_from_polling_page(poll_addr);
return offset;
}
< prev index next >