< prev index next >

src/cpu/aarch64/vm/c1_Runtime1_aarch64.cpp

Print this page

        

@@ -41,11 +41,13 @@
 #include "runtime/signature.hpp"
 #include "runtime/vframe.hpp"
 #include "runtime/vframeArray.hpp"
 #include "vmreg_aarch64.inline.hpp"
 #if INCLUDE_ALL_GCS
+#include "gc_implementation/shenandoah/shenandoahBarrierSet.hpp"
 #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"
+#include "gc_implementation/shenandoah/shenandoahRuntime.hpp"
 #endif
 
 
 // Implementation of StubAssembler
 

@@ -1176,11 +1178,11 @@
       {
         StubFrame f(sasm, "g1_pre_barrier", dont_gc_arguments);
         // arg0 : previous value of memory
 
         BarrierSet* bs = Universe::heap()->barrier_set();
-        if (bs->kind() != BarrierSet::G1SATBCTLogging) {
+        if (bs->kind() != BarrierSet::G1SATBCTLogging && bs->kind() != BarrierSet::ShenandoahBarrierSet) {
           __ mov(r0, (int)id);
           __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), r0);
           __ should_not_reach_here();
           break;
         }

@@ -1226,10 +1228,17 @@
 
         // arg0: store_address
         Address store_addr(rfp, 2*BytesPerWord);
 
         BarrierSet* bs = Universe::heap()->barrier_set();
+        if (bs->kind() == BarrierSet::ShenandoahBarrierSet) {
+          __ movptr(r0, (int)id);
+          __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), r0);
+          __ should_not_reach_here();
+          break;
+        }
+
         CardTableModRefBS* ct = (CardTableModRefBS*)bs;
         assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
 
         Label done;
         Label runtime;

@@ -1289,10 +1298,29 @@
         __ pop_call_clobbered_registers();
         __ bind(done);
 
       }
       break;
+    case shenandoah_lrb_slow_id:
+      {
+        StubFrame f(sasm, "shenandoah_load_reference_barrier", dont_gc_arguments);
+        // arg0 : object to be resolved
+        
+        __ push_call_clobbered_registers();
+        f.load_argument(0, r0);
+        f.load_argument(1, r1);
+        if (UseCompressedOops) {
+          __ mov(lr, CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_narrow));
+        } else {
+          __ mov(lr, CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier));
+        }
+        __ blr(lr);
+        __ mov(rscratch1, r0);
+        __ pop_call_clobbered_registers();
+        __ mov(r0, rscratch1);
+      }
+      break;
 #endif
 
     case predicate_failed_trap_id:
       {
         StubFrame f(sasm, "predicate_failed_trap", dont_gc_arguments);
< prev index next >