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