< prev index next >

src/cpu/x86/vm/templateTable_x86.cpp

Print this page
rev 13055 : Implement barriers for maintaining connection matrix.

@@ -180,25 +180,35 @@
                                 val != noreg /* tosca_live */,
                                 false /* expand_call */);
         if (val == noreg) {
           __ store_heap_oop_null(Address(rdx, 0));
         } else {
+          // For Shenandoah, make sure we only store refs into to-space.
+          oopDesc::bs()->interpreter_read_barrier(_masm, val);
+
           // G1 barrier needs uncompressed oop for region cross check.
           Register new_val = val;
           if (UseCompressedOops) {
             new_val = rbx;
             __ movptr(new_val, val);
           }
-          // For Shenandoah, make sure we only store refs into to-space.
-          oopDesc::bs()->interpreter_read_barrier(_masm, val);
 
           __ store_heap_oop(Address(rdx, 0), val);
+          if (UseG1GC) {
           __ g1_write_barrier_post(rdx /* store_adr */,
                                    new_val /* new_val */,
                                    rthread /* thread */,
                                    rtmp /* tmp */,
                                    rbx /* tmp2 */);
+          } else {
+            assert(UseShenandoahGC, "sanity");
+            __ shenandoah_write_barrier_post(rdx /* store_adr */,
+                                             new_val /* new_val */,
+                                             rthread /* thread */,
+                                             rtmp /* tmp */,
+                                             rbx /* tmp2 */);
+          }
         }
         NOT_LP64( __ restore_bcp());
       }
       break;
 #endif // INCLUDE_ALL_GCS
< prev index next >