< prev index next >
src/cpu/x86/vm/c1_CodeStubs_x86.cpp
Print this page
rev 8802 : G1 performance improvements: card batching, joining, sorting, prefetching and write barrier fence elision and simplification based on a global syncrhonization using handshakes piggybacking on thread-local safepoints.
rev 8803 : Implementation improvements to pass JPRT
*** 516,525 ****
--- 516,552 ----
#endif
__ jmp(_continuation);
}
+ void C1ThreadLocalSafepoint::emit_code(LIR_Assembler* ce) {
+ #ifdef _LP64
+ __ bind(_entry);
+ InternalAddress pc_addr(safepoint_pc());
+ __ lea(rscratch1, pc_addr);
+ __ movptr(Address(r15_thread, JavaThread::saved_exception_pc_offset()), rscratch1);
+
+ address stub;
+
+ if (is_return()) {
+ assert(SharedRuntime::polling_page_return_handler_blob() != NULL,
+ "polling page return stub not created yet");
+ stub = SharedRuntime::polling_page_return_handler_blob()->entry_point();
+ } else {
+ assert(SharedRuntime::polling_page_safepoint_handler_blob() != NULL,
+ "polling page safepoint stub not created yet");
+ stub = SharedRuntime::polling_page_safepoint_handler_blob()->entry_point();
+ }
+
+ RuntimeAddress callback_addr(stub);
+
+ __ jump(callback_addr);
+ #else
+ ShouldNotReachHere();
+ #endif /* _LP64 */
+ }
+
/////////////////////////////////////////////////////////////////////////////
#if INCLUDE_ALL_GCS
void G1PreBarrierStub::emit_code(LIR_Assembler* ce) {
// At this point we know that marking is in progress.
< prev index next >