< prev index next >

src/hotspot/cpu/riscv/gc/z/zBarrierSetAssembler_riscv.cpp

Print this page
*** 183,22 ***
        // A non-relocatable object could have spurious raw null pointers in its fields after
        // getting promoted to the old generation.
        __ relocate(barrier_Relocation::spec(), [&] {
          __ li16u(rnew_zpointer, barrier_Relocation::unpatched);
        }, ZBarrierRelocationFormatStoreGoodBits);
!       __ bne(rtmp, rnew_zpointer, medium_path, true /* is_far */);
      } else {
        __ ld(rtmp, ref_addr);
        // Stores on relocatable objects never need to deal with raw null pointers in fields.
        // Raw null pointers may only exists in the young generation, as they get pruned when
        // the object is relocated to old. And no pre-write barrier needs to perform any action
        // in the young generation.
        __ relocate(barrier_Relocation::spec(), [&] {
          __ li16u(rnew_zpointer, barrier_Relocation::unpatched);
        }, ZBarrierRelocationFormatStoreBadMask);
        __ andr(rtmp, rtmp, rnew_zpointer);
!       __ bnez(rtmp, medium_path, true /* is_far */);
      }
      __ bind(medium_path_continuation);
      __ relocate(barrier_Relocation::spec(), [&] {
        __ li16u(rtmp, barrier_Relocation::unpatched);
      }, ZBarrierRelocationFormatStoreGoodBits);
--- 183,22 ---
        // A non-relocatable object could have spurious raw null pointers in its fields after
        // getting promoted to the old generation.
        __ relocate(barrier_Relocation::spec(), [&] {
          __ li16u(rnew_zpointer, barrier_Relocation::unpatched);
        }, ZBarrierRelocationFormatStoreGoodBits);
!       __ bne(rtmp, rnew_zpointer, medium_path, /* is_far */ true);
      } else {
        __ ld(rtmp, ref_addr);
        // Stores on relocatable objects never need to deal with raw null pointers in fields.
        // Raw null pointers may only exists in the young generation, as they get pruned when
        // the object is relocated to old. And no pre-write barrier needs to perform any action
        // in the young generation.
        __ relocate(barrier_Relocation::spec(), [&] {
          __ li16u(rnew_zpointer, barrier_Relocation::unpatched);
        }, ZBarrierRelocationFormatStoreBadMask);
        __ andr(rtmp, rtmp, rnew_zpointer);
!       __ bnez(rtmp, medium_path, /* is_far */ true);
      }
      __ bind(medium_path_continuation);
      __ relocate(barrier_Relocation::spec(), [&] {
        __ li16u(rtmp, barrier_Relocation::unpatched);
      }, ZBarrierRelocationFormatStoreGoodBits);

*** 208,11 ***
      assert(!is_atomic, "atomic outside of nmethods not supported");
      __ la(rtmp, ref_addr);
      __ ld(rtmp, rtmp);
      __ ld(rnew_zpointer, Address(xthread, ZThreadLocalData::store_bad_mask_offset()));
      __ andr(rtmp, rtmp, rnew_zpointer);
!     __ bnez(rtmp, medium_path, true /* is_far */);
      __ bind(medium_path_continuation);
      if (rnew_zaddress == noreg) {
        __ mv(rnew_zpointer, zr);
      } else {
        __ mv(rnew_zpointer, rnew_zaddress);
--- 208,11 ---
      assert(!is_atomic, "atomic outside of nmethods not supported");
      __ la(rtmp, ref_addr);
      __ ld(rtmp, rtmp);
      __ ld(rnew_zpointer, Address(xthread, ZThreadLocalData::store_bad_mask_offset()));
      __ andr(rtmp, rtmp, rnew_zpointer);
!     __ bnez(rtmp, medium_path, /* is_far */ true);
      __ bind(medium_path_continuation);
      if (rnew_zaddress == noreg) {
        __ mv(rnew_zpointer, zr);
      } else {
        __ mv(rnew_zpointer, rnew_zaddress);
< prev index next >