< prev index next >

src/cpu/aarch64/vm/shenandoahBarrierSetAssembler_aarch64.cpp

Print this page
rev 11463 : Backport Traversal GC

@@ -118,10 +118,25 @@
 
   __ 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 >