< prev index next >

src/share/vm/c1/c1_LIRGenerator.cpp

Print this page

        

@@ -1605,10 +1605,15 @@
     __ move(addr, tmp);
     __ unsigned_shift_right(tmp, CardTableModRefBS::card_shift, tmp);
   } else {
     __ unsigned_shift_right(addr, CardTableModRefBS::card_shift, tmp);
   }
+
+  if (UseConcMarkSweepGC && CMSPrecleaningEnabled) {
+    __ membar_storestore();
+  }
+
   if (can_inline_as_constant(card_table_base)) {
     __ move(LIR_OprFact::intConst(0),
               new LIR_Address(tmp, card_table_base->as_jint(), T_BYTE));
   } else {
     __ move(LIR_OprFact::intConst(0),

@@ -2103,11 +2108,11 @@
   if (index_op->is_constant()) {
     assert(log2_scale == 0, "must not have a scale");
     assert(index_op->type() == T_INT, "only int constants supported");
     addr = new LIR_Address(base_op, index_op->as_jint(), dst_type);
   } else {
-#ifdef X86
+#if defined(X86) || defined(AARCH64)
     addr = new LIR_Address(base_op, index_op, LIR_Address::Scale(log2_scale), 0, dst_type);
 #elif defined(GENERATE_ADDRESS_IS_PREFERRED)
     addr = generate_address(base_op, index_op, log2_scale, 0, dst_type);
 #else
     if (index_op->is_illegal() || log2_scale == 0) {
< prev index next >