< prev index next >

src/hotspot/cpu/x86/templateTable_x86.cpp

8199604_cardtablemodrefbs_rename

180         if (val == noreg) {                                                                                                          
181           __ store_heap_oop_null(Address(rdx, 0));                                                                                   
182         } else {                                                                                                                     
183           // G1 barrier needs uncompressed oop for region cross check.                                                               
184           Register new_val = val;                                                                                                    
185           if (UseCompressedOops) {                                                                                                   
186             new_val = rbx;                                                                                                           
187             __ movptr(new_val, val);                                                                                                 
188           }                                                                                                                          
189           __ store_heap_oop(Address(rdx, 0), val);                                                                                   
190           __ g1_write_barrier_post(rdx /* store_adr */,                                                                              
191                                    new_val /* new_val */,                                                                            
192                                    rthread /* thread */,                                                                             
193                                    rtmp /* tmp */,                                                                                   
194                                    rbx /* tmp2 */);                                                                                  
195         }                                                                                                                            
196         NOT_LP64( __ restore_bcp());                                                                                                 
197       }                                                                                                                              
198       break;                                                                                                                         
199 #endif // INCLUDE_ALL_GCS                                                                                                            
200     case BarrierSet::CardTableModRef:                                                                                                
201       {                                                                                                                              
202         if (val == noreg) {                                                                                                          
203           __ store_heap_oop_null(obj);                                                                                               
204         } else {                                                                                                                     
205           __ store_heap_oop(obj, val);                                                                                               
206           // flatten object address if needed                                                                                        
207           if (!precise || (obj.index() == noreg && obj.disp() == 0)) {                                                               
208             __ store_check(obj.base());                                                                                              
209           } else {                                                                                                                   
210             __ lea(rdx, obj);                                                                                                        
211             __ store_check(rdx);                                                                                                     
212           }                                                                                                                          
213         }                                                                                                                            
214       }                                                                                                                              
215       break;                                                                                                                         
216     case BarrierSet::ModRef:                                                                                                         
217       if (val == noreg) {                                                                                                            
218         __ store_heap_oop_null(obj);                                                                                                 
219       } else {                                                                                                                       

180         if (val == noreg) {
181           __ store_heap_oop_null(Address(rdx, 0));
182         } else {
183           // G1 barrier needs uncompressed oop for region cross check.
184           Register new_val = val;
185           if (UseCompressedOops) {
186             new_val = rbx;
187             __ movptr(new_val, val);
188           }
189           __ store_heap_oop(Address(rdx, 0), val);
190           __ g1_write_barrier_post(rdx /* store_adr */,
191                                    new_val /* new_val */,
192                                    rthread /* thread */,
193                                    rtmp /* tmp */,
194                                    rbx /* tmp2 */);
195         }
196         NOT_LP64( __ restore_bcp());
197       }
198       break;
199 #endif // INCLUDE_ALL_GCS
200     case BarrierSet::CardTableBarrierSet:
201       {
202         if (val == noreg) {
203           __ store_heap_oop_null(obj);
204         } else {
205           __ store_heap_oop(obj, val);
206           // flatten object address if needed
207           if (!precise || (obj.index() == noreg && obj.disp() == 0)) {
208             __ store_check(obj.base());
209           } else {
210             __ lea(rdx, obj);
211             __ store_check(rdx);
212           }
213         }
214       }
215       break;
216     case BarrierSet::ModRef:
217       if (val == noreg) {
218         __ store_heap_oop_null(obj);
219       } else {
< prev index next >