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