< prev index next >

src/hotspot/cpu/arm/templateTable_arm.cpp

8199604_cardtablemodrefbs_rename

210           __ add(store_addr, obj.base(), obj.disp());                                                                                
211         }                                                                                                                            
212 
213         __ g1_write_barrier_pre(store_addr, new_val, tmp1, tmp2, tmp3);                                                              
214         if (is_null) {                                                                                                               
215           __ store_heap_oop_null(new_val, Address(store_addr));                                                                      
216         } else {                                                                                                                     
217           // G1 barrier needs uncompressed oop for region cross check.                                                               
218           Register val_to_store = new_val;                                                                                           
219           if (UseCompressedOops) {                                                                                                   
220             val_to_store = tmp1;                                                                                                     
221             __ mov(val_to_store, new_val);                                                                                           
222           }                                                                                                                          
223           __ store_heap_oop(val_to_store, Address(store_addr)); // blows val_to_store:                                               
224           val_to_store = noreg;                                                                                                      
225           __ g1_write_barrier_post(store_addr, new_val, tmp1, tmp2, tmp3);                                                           
226         }                                                                                                                            
227       }                                                                                                                              
228       break;                                                                                                                         
229 #endif // INCLUDE_ALL_GCS                                                                                                            
230     case BarrierSet::CardTableModRef:                                                                                                
231       {                                                                                                                              
232         if (is_null) {                                                                                                               
233           __ store_heap_oop_null(new_val, obj);                                                                                      
234         } else {                                                                                                                     
235           assert (!precise || (obj.index() == noreg && obj.disp() == 0),                                                             
236                   "store check address should be calculated beforehand");                                                            
237 
238           __ store_check_part1(tmp1);                                                                                                
239           __ store_heap_oop(new_val, obj); // blows new_val:                                                                         
240           new_val = noreg;                                                                                                           
241           __ store_check_part2(obj.base(), tmp1, tmp2);                                                                              
242         }                                                                                                                            
243       }                                                                                                                              
244       break;                                                                                                                         
245     case BarrierSet::ModRef:                                                                                                         
246       ShouldNotReachHere();                                                                                                          
247       break;                                                                                                                         
248     default:                                                                                                                         
249       ShouldNotReachHere();                                                                                                          

210           __ add(store_addr, obj.base(), obj.disp());
211         }
212 
213         __ g1_write_barrier_pre(store_addr, new_val, tmp1, tmp2, tmp3);
214         if (is_null) {
215           __ store_heap_oop_null(new_val, Address(store_addr));
216         } else {
217           // G1 barrier needs uncompressed oop for region cross check.
218           Register val_to_store = new_val;
219           if (UseCompressedOops) {
220             val_to_store = tmp1;
221             __ mov(val_to_store, new_val);
222           }
223           __ store_heap_oop(val_to_store, Address(store_addr)); // blows val_to_store:
224           val_to_store = noreg;
225           __ g1_write_barrier_post(store_addr, new_val, tmp1, tmp2, tmp3);
226         }
227       }
228       break;
229 #endif // INCLUDE_ALL_GCS
230     case BarrierSet::CardTableBarrierSet:
231       {
232         if (is_null) {
233           __ store_heap_oop_null(new_val, obj);
234         } else {
235           assert (!precise || (obj.index() == noreg && obj.disp() == 0),
236                   "store check address should be calculated beforehand");
237 
238           __ store_check_part1(tmp1);
239           __ store_heap_oop(new_val, obj); // blows new_val:
240           new_val = noreg;
241           __ store_check_part2(obj.base(), tmp1, tmp2);
242         }
243       }
244       break;
245     case BarrierSet::ModRef:
246       ShouldNotReachHere();
247       break;
248     default:
249       ShouldNotReachHere();
< prev index next >