< prev index next >

src/hotspot/cpu/aarch64/templateTable_aarch64.cpp

8199604_cardtablemodrefbs_rename

166         if (val == noreg) {                                                                                                          
167           __ store_heap_oop_null(Address(r3, 0));                                                                                    
168         } else {                                                                                                                     
169           // G1 barrier needs uncompressed oop for region cross check.                                                               
170           Register new_val = val;                                                                                                    
171           if (UseCompressedOops) {                                                                                                   
172             new_val = rscratch2;                                                                                                     
173             __ mov(new_val, val);                                                                                                    
174           }                                                                                                                          
175           __ store_heap_oop(Address(r3, 0), val);                                                                                    
176           __ g1_write_barrier_post(r3 /* store_adr */,                                                                               
177                                    new_val /* new_val */,                                                                            
178                                    rthread /* thread */,                                                                             
179                                    r10 /* tmp */,                                                                                    
180                                    r1 /* tmp2 */);                                                                                   
181         }                                                                                                                            
182 
183       }                                                                                                                              
184       break;                                                                                                                         
185 #endif // INCLUDE_ALL_GCS                                                                                                            
186     case BarrierSet::CardTableModRef:                                                                                                
187       {                                                                                                                              
188         if (val == noreg) {                                                                                                          
189           __ store_heap_oop_null(obj);                                                                                               
190         } else {                                                                                                                     
191           __ store_heap_oop(obj, val);                                                                                               
192           // flatten object address if needed                                                                                        
193           if (!precise || (obj.index() == noreg && obj.offset() == 0)) {                                                             
194             __ store_check(obj.base());                                                                                              
195           } else {                                                                                                                   
196             __ lea(r3, obj);                                                                                                         
197             __ store_check(r3);                                                                                                      
198           }                                                                                                                          
199         }                                                                                                                            
200       }                                                                                                                              
201       break;                                                                                                                         
202     case BarrierSet::ModRef:                                                                                                         
203       if (val == noreg) {                                                                                                            
204         __ store_heap_oop_null(obj);                                                                                                 
205       } else {                                                                                                                       

166         if (val == noreg) {
167           __ store_heap_oop_null(Address(r3, 0));
168         } else {
169           // G1 barrier needs uncompressed oop for region cross check.
170           Register new_val = val;
171           if (UseCompressedOops) {
172             new_val = rscratch2;
173             __ mov(new_val, val);
174           }
175           __ store_heap_oop(Address(r3, 0), val);
176           __ g1_write_barrier_post(r3 /* store_adr */,
177                                    new_val /* new_val */,
178                                    rthread /* thread */,
179                                    r10 /* tmp */,
180                                    r1 /* tmp2 */);
181         }
182 
183       }
184       break;
185 #endif // INCLUDE_ALL_GCS
186     case BarrierSet::CardTableBarrierSet:
187       {
188         if (val == noreg) {
189           __ store_heap_oop_null(obj);
190         } else {
191           __ store_heap_oop(obj, val);
192           // flatten object address if needed
193           if (!precise || (obj.index() == noreg && obj.offset() == 0)) {
194             __ store_check(obj.base());
195           } else {
196             __ lea(r3, obj);
197             __ store_check(r3);
198           }
199         }
200       }
201       break;
202     case BarrierSet::ModRef:
203       if (val == noreg) {
204         __ store_heap_oop_null(obj);
205       } else {
< prev index next >