< prev index next >
src/cpu/aarch64/vm/shenandoahBarrierSetAssembler_aarch64.cpp
Print this page
rev 11463 : Backport Traversal GC
*** 118,127 ****
--- 118,142 ----
__ bind(done);
__ leave();
}
+ void ShenandoahBarrierSetAssembler::storeval_barrier(MacroAssembler* masm, Register dst, Register tmp) {
+ if (ShenandoahStoreValEnqueueBarrier) {
+ // Save possibly live regs.
+ RegSet live_regs = RegSet::range(r0, r4) - dst;
+ __ push(live_regs, sp);
+ __ strd(v0, __ pre(sp, 2 * -wordSize));
+
+ __ g1_write_barrier_pre(noreg, dst, rthread, tmp, true, false);
+
+ // Restore possibly live regs.
+ __ ldrd(v0, __ post(sp, 2 * wordSize));
+ __ pop(live_regs, sp);
+ }
+ }
+
void ShenandoahBarrierSetAssembler::load_reference_barrier(MacroAssembler* masm, Register dst) {
if (ShenandoahLoadRefBarrier) {
Label is_null;
__ cbz(dst, is_null);
load_reference_barrier_not_null(masm, dst);
< prev index next >