< prev index next >

src/hotspot/cpu/aarch64/gc/shared/cardTableBarrierSetAssembler_aarch64.cpp

Print this page
@@ -30,29 +30,30 @@
  #include "gc/shared/gc_globals.hpp"
  #include "interpreter/interp_masm.hpp"
  
  #define __ masm->
  
- void CardTableBarrierSetAssembler::store_check(MacroAssembler* masm, Register obj, Address dst) {
- 
+ void CardTableBarrierSetAssembler::store_check(MacroAssembler* masm, Register obj, Address dst, Register rscratch) {
+   precond(rscratch != noreg);
    BarrierSet* bs = BarrierSet::barrier_set();
    assert(bs->kind() == BarrierSet::CardTableBarrierSet, "Wrong barrier set kind");
  
    __ lsr(obj, obj, CardTable::card_shift());
  
    assert(CardTable::dirty_card_val() == 0, "must be");
  
-   __ load_byte_map_base(rscratch1);
+   __ load_byte_map_base(rscratch);
  
    if (UseCondCardMark) {
+     precond(rscratch != rscratch2);
      Label L_already_dirty;
-     __ ldrb(rscratch2,  Address(obj, rscratch1));
+     __ ldrb(rscratch2,  Address(obj, rscratch));
      __ cbz(rscratch2, L_already_dirty);
-     __ strb(zr, Address(obj, rscratch1));
+     __ strb(zr, Address(obj, rscratch));
      __ bind(L_already_dirty);
    } else {
-     __ strb(zr, Address(obj, rscratch1));
+     __ strb(zr, Address(obj, rscratch));
    }
  }
  
  void CardTableBarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators,
                                                                      Register start, Register count, Register scratch, RegSet saved_regs) {

@@ -86,12 +87,12 @@
    bool needs_post_barrier = val != noreg && in_heap;
    BarrierSetAssembler::store_at(masm, decorators, type, dst, val, noreg, noreg, noreg);
    if (needs_post_barrier) {
      // flatten object address if needed
      if (!precise || (dst.index() == noreg && dst.offset() == 0)) {
-       store_check(masm, dst.base(), dst);
+       store_check(masm, dst.base(), dst, tmp2);
      } else {
        __ lea(tmp3, dst);
-       store_check(masm, tmp3, dst);
+       store_check(masm, tmp3, dst, tmp2);
      }
    }
  }
< prev index next >