< prev index next >

src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp

Print this page




 111     __ mov(dst, r0);
 112   }
 113 
 114   __ pop(RegSet::range(r0,r28) - RegSet::of(dst), sp);
 115   __ leave();
 116 
 117   __ bind(done);
 118 
 119   // Restore tmps
 120   __ pop(savedRegs, sp);
 121 }
 122 
 123 #ifdef ASSERT
 124 
 125 void ZBarrierSetAssembler::store_at(MacroAssembler* masm,
 126                                         DecoratorSet decorators,
 127                                         BasicType type,
 128                                         Address dst,
 129                                         Register val,
 130                                         Register tmp1,
 131                                         Register tmp2) {

 132   // Verify value
 133   if (type == T_OBJECT || type == T_ARRAY) {
 134     // Note that src could be noreg, which means we
 135     // are storing null and can skip verification.
 136     if (val != noreg) {
 137       Label done;
 138 
 139       // tmp1 and tmp2 are often set to noreg.
 140       RegSet savedRegs = RegSet::of(rscratch1);
 141       __ push(savedRegs, sp);
 142 
 143       __ ldr(rscratch1, address_bad_mask_from_thread(rthread));
 144       __ tst(val, rscratch1);
 145       __ br(Assembler::EQ, done);
 146       __ stop("Verify oop store failed");
 147       __ should_not_reach_here();
 148       __ bind(done);
 149       __ pop(savedRegs, sp);
 150     }
 151   }




 111     __ mov(dst, r0);
 112   }
 113 
 114   __ pop(RegSet::range(r0,r28) - RegSet::of(dst), sp);
 115   __ leave();
 116 
 117   __ bind(done);
 118 
 119   // Restore tmps
 120   __ pop(savedRegs, sp);
 121 }
 122 
 123 #ifdef ASSERT
 124 
 125 void ZBarrierSetAssembler::store_at(MacroAssembler* masm,
 126                                         DecoratorSet decorators,
 127                                         BasicType type,
 128                                         Address dst,
 129                                         Register val,
 130                                         Register tmp1,
 131                                         Register tmp2,
 132                                         Register tmp3) {
 133   // Verify value
 134   if (type == T_OBJECT || type == T_ARRAY) {
 135     // Note that src could be noreg, which means we
 136     // are storing null and can skip verification.
 137     if (val != noreg) {
 138       Label done;
 139 
 140       // tmp1 and tmp2 are often set to noreg.
 141       RegSet savedRegs = RegSet::of(rscratch1);
 142       __ push(savedRegs, sp);
 143 
 144       __ ldr(rscratch1, address_bad_mask_from_thread(rthread));
 145       __ tst(val, rscratch1);
 146       __ br(Assembler::EQ, done);
 147       __ stop("Verify oop store failed");
 148       __ should_not_reach_here();
 149       __ bind(done);
 150       __ pop(savedRegs, sp);
 151     }
 152   }


< prev index next >