< prev index next >

src/cpu/x86/vm/macroAssembler_x86.cpp

Print this page
rev 10501 : [backport] Check heap stability in C1 WBs
rev 10524 : [backport] Some trivial-ish cleanups
rev 10557 : [backport] Assembler write barriers should consistently check for forwarded objects

*** 3748,3758 **** void MacroAssembler::null_check(Register reg, int offset) { if (needs_explicit_null_check(offset)) { // provoke OS NULL exception if reg = NULL by // accessing M[reg] w/o changing any (non-CC) registers // NOTE: cmpl is plenty here to provoke a segv - cmpptr(rax, Address(reg, 0)); // Note: should probably use testl(rax, Address(reg, 0)); // may be shorter code (however, this version of // testl needs to be implemented first) } else { --- 3748,3757 ----
*** 4447,4465 **** void MacroAssembler::shenandoah_write_barrier(Register dst) { assert(UseShenandoahGC && ShenandoahWriteBarrier, "Should be enabled"); Label done; - // Check for evacuation-in-progress Address gc_state(r15_thread, in_bytes(JavaThread::gc_state_offset())); - testb(gc_state, ShenandoahHeap::EVACUATION); ! // The read-barrier. if (ShenandoahWriteBarrierRB) { movptr(dst, Address(dst, BrooksPointer::byte_offset())); } jccb(Assembler::zero, done); if (dst != rax) { xchgptr(dst, rax); // Move obj into rax and save rax into obj. } --- 4446,4468 ---- void MacroAssembler::shenandoah_write_barrier(Register dst) { assert(UseShenandoahGC && ShenandoahWriteBarrier, "Should be enabled"); Label done; Address gc_state(r15_thread, in_bytes(JavaThread::gc_state_offset())); ! // Check for heap stability ! testb(gc_state, ShenandoahHeap::HAS_FORWARDED | ShenandoahHeap::EVACUATION); ! jccb(Assembler::zero, done); ! ! // Heap is unstable, need to perform the read-barrier even if WB is inactive if (ShenandoahWriteBarrierRB) { movptr(dst, Address(dst, BrooksPointer::byte_offset())); } + // Check for evacuation-in-progress and jump to WB slow-path if needed + testb(gc_state, ShenandoahHeap::EVACUATION); jccb(Assembler::zero, done); if (dst != rax) { xchgptr(dst, rax); // Move obj into rax and save rax into obj. }
< prev index next >