< prev index next >

src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp

Print this page
rev 50076 : Fold Partial GC into Traversal GC

*** 86,103 **** Register pre_val, Register thread, Register tmp, bool tosca_live, bool expand_call) { - if (ShenandoahConditionalSATBBarrier) { - Label done; - Address gc_state(rthread, in_bytes(ShenandoahThreadLocalData::gc_state_offset())); - __ ldrb(tmp, gc_state); - __ tbz(tmp, ShenandoahHeap::MARKING_BITPOS, done); - satb_write_barrier_pre(masm, obj, pre_val, thread, tmp, tosca_live, expand_call); - __ bind(done); - } if (ShenandoahSATBBarrier) { satb_write_barrier_pre(masm, obj, pre_val, thread, tmp, tosca_live, expand_call); } } --- 86,95 ----
*** 262,272 **** write_barrier_impl(masm, dst); } } void ShenandoahBarrierSetAssembler::write_barrier_impl(MacroAssembler* masm, Register dst) { ! assert(UseShenandoahGC && (ShenandoahWriteBarrier || ShenandoahStoreValWriteBarrier || ShenandoahStoreValEnqueueBarrier), "should be enabled"); assert(dst != rscratch1, "different regs"); assert(dst != rscratch2, "Need rscratch2"); Label done; --- 254,264 ---- write_barrier_impl(masm, dst); } } void ShenandoahBarrierSetAssembler::write_barrier_impl(MacroAssembler* masm, Register dst) { ! assert(UseShenandoahGC && (ShenandoahWriteBarrier || ShenandoahStoreValEnqueueBarrier), "should be enabled"); assert(dst != rscratch1, "different regs"); assert(dst != rscratch2, "Need rscratch2"); Label done;
*** 275,285 **** __ membar(Assembler::LoadLoad); // Now check if evacuation is in progress. read_barrier_not_null(masm, dst); ! __ mov(rscratch2, ShenandoahHeap::EVACUATION | ShenandoahHeap::PARTIAL | ShenandoahHeap::TRAVERSAL); __ tst(rscratch1, rscratch2); __ br(Assembler::EQ, done); __ lsr(rscratch1, dst, ShenandoahHeapRegion::region_size_bytes_shift_jint()); __ mov(rscratch2, ShenandoahHeap::in_cset_fast_test_addr()); --- 267,277 ---- __ membar(Assembler::LoadLoad); // Now check if evacuation is in progress. read_barrier_not_null(masm, dst); ! __ mov(rscratch2, ShenandoahHeap::EVACUATION | ShenandoahHeap::TRAVERSAL); __ tst(rscratch1, rscratch2); __ br(Assembler::EQ, done); __ lsr(rscratch1, dst, ShenandoahHeapRegion::region_size_bytes_shift_jint()); __ mov(rscratch2, ShenandoahHeap::in_cset_fast_test_addr());
*** 304,320 **** __ bind(done); } void ShenandoahBarrierSetAssembler::storeval_barrier(MacroAssembler* masm, Register dst, Register tmp) { ! if (ShenandoahStoreValWriteBarrier || ShenandoahStoreValEnqueueBarrier) { Label is_null; __ cbz(dst, is_null); write_barrier_impl(masm, dst); __ bind(is_null); - } - if (ShenandoahStoreValEnqueueBarrier) { // Save possibly live regs. RegSet live_regs = RegSet::range(r0, r4) - dst; __ push(live_regs, sp); __ strd(v0, __ pre(sp, 2 * -wordSize)); --- 296,310 ---- __ bind(done); } void ShenandoahBarrierSetAssembler::storeval_barrier(MacroAssembler* masm, Register dst, Register tmp) { ! if (ShenandoahStoreValEnqueueBarrier) { Label is_null; __ cbz(dst, is_null); write_barrier_impl(masm, dst); __ bind(is_null); // Save possibly live regs. RegSet live_regs = RegSet::range(r0, r4) - dst; __ push(live_regs, sp); __ strd(v0, __ pre(sp, 2 * -wordSize));
< prev index next >