src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.cpp
changeset 54110 f4f0dce5d0bb
parent 51133 e15cd424736d
child 54266 7816d989bf21
equal deleted inserted replaced
54109:debb15cc04ee 54110:f4f0dce5d0bb
   191   Address buffer(thread, in_bytes(G1ThreadLocalData::dirty_card_queue_buffer_offset()));
   191   Address buffer(thread, in_bytes(G1ThreadLocalData::dirty_card_queue_buffer_offset()));
   192 
   192 
   193   BarrierSet* bs = BarrierSet::barrier_set();
   193   BarrierSet* bs = BarrierSet::barrier_set();
   194   CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs);
   194   CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs);
   195   CardTable* ct = ctbs->card_table();
   195   CardTable* ct = ctbs->card_table();
   196   assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code");
       
   197 
   196 
   198   Label done;
   197   Label done;
   199   Label runtime;
   198   Label runtime;
   200 
   199 
   201   // Does store cross heap regions?
   200   // Does store cross heap regions?
   209   __ cbz(new_val, done);
   208   __ cbz(new_val, done);
   210 
   209 
   211   // storing region crossing non-NULL, is card already dirty?
   210   // storing region crossing non-NULL, is card already dirty?
   212 
   211 
   213   ExternalAddress cardtable((address) ct->byte_map_base());
   212   ExternalAddress cardtable((address) ct->byte_map_base());
   214   assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code");
       
   215   const Register card_addr = tmp;
   213   const Register card_addr = tmp;
   216 
   214 
   217   __ lsr(card_addr, store_addr, CardTable::card_shift);
   215   __ lsr(card_addr, store_addr, CardTable::card_shift);
   218 
   216 
   219   // get the address of the card
   217   // get the address of the card
   415   Address store_addr(rfp, 2*BytesPerWord);
   413   Address store_addr(rfp, 2*BytesPerWord);
   416 
   414 
   417   BarrierSet* bs = BarrierSet::barrier_set();
   415   BarrierSet* bs = BarrierSet::barrier_set();
   418   CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs);
   416   CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs);
   419   CardTable* ct = ctbs->card_table();
   417   CardTable* ct = ctbs->card_table();
   420   assert(sizeof(*ct->byte_map_base()) == sizeof(jbyte), "adjust this code");
       
   421 
   418 
   422   Label done;
   419   Label done;
   423   Label runtime;
   420   Label runtime;
   424 
   421 
   425   // At this point we know new_value is non-NULL and the new_value crosses regions.
   422   // At this point we know new_value is non-NULL and the new_value crosses regions.