< prev index next >

src/hotspot/cpu/aarch64/templateTable_aarch64.cpp

G1BarrierSet_merge

130   case TemplateTable::less_equal   : return Assembler::GT;                                                                           
131   case TemplateTable::greater      : return Assembler::LE;                                                                           
132   case TemplateTable::greater_equal: return Assembler::LT;                                                                           
133   }                                                                                                                                  
134   ShouldNotReachHere();                                                                                                              
135   return Assembler::EQ;                                                                                                              
136 }                                                                                                                                    
137 
138 
139 // Miscelaneous helper routines                                                                                                      
140 // Store an oop (or NULL) at the Address described by obj.                                                                           
141 // If val == noreg this means store a NULL                                                                                           
142 static void do_oop_store(InterpreterMacroAssembler* _masm,                                                                           
143                          Address obj,                                                                                                
144                          Register val,                                                                                               
145                          BarrierSet::Name barrier,                                                                                   
146                          bool precise) {                                                                                             
147   assert(val == noreg || val == r0, "parameter is just for looks");                                                                  
148   switch (barrier) {                                                                                                                 
149 #if INCLUDE_ALL_GCS                                                                                                                  
150     case BarrierSet::G1SATBCTLogging:                                                                                                
151       {                                                                                                                              
152         // flatten object address if needed                                                                                          
153         if (obj.index() == noreg && obj.offset() == 0) {                                                                             
154           if (obj.base() != r3) {                                                                                                    
155             __ mov(r3, obj.base());                                                                                                  
156           }                                                                                                                          
157         } else {                                                                                                                     
158           __ lea(r3, obj);                                                                                                           
159         }                                                                                                                            
160         __ g1_write_barrier_pre(r3 /* obj */,                                                                                        
161                                 r1 /* pre_val */,                                                                                    
162                                 rthread /* thread */,                                                                                
163                                 r10  /* tmp */,                                                                                      
164                                 val != noreg /* tosca_live */,                                                                       
165                                 false /* expand_call */);                                                                            
166         if (val == noreg) {                                                                                                          
167           __ store_heap_oop_null(Address(r3, 0));                                                                                    
168         } else {                                                                                                                     
169           // G1 barrier needs uncompressed oop for region cross check.                                                               

130   case TemplateTable::less_equal   : return Assembler::GT;
131   case TemplateTable::greater      : return Assembler::LE;
132   case TemplateTable::greater_equal: return Assembler::LT;
133   }
134   ShouldNotReachHere();
135   return Assembler::EQ;
136 }
137 
138 
139 // Miscelaneous helper routines
140 // Store an oop (or NULL) at the Address described by obj.
141 // If val == noreg this means store a NULL
142 static void do_oop_store(InterpreterMacroAssembler* _masm,
143                          Address obj,
144                          Register val,
145                          BarrierSet::Name barrier,
146                          bool precise) {
147   assert(val == noreg || val == r0, "parameter is just for looks");
148   switch (barrier) {
149 #if INCLUDE_ALL_GCS
150     case BarrierSet::G1BarrierSet:
151       {
152         // flatten object address if needed
153         if (obj.index() == noreg && obj.offset() == 0) {
154           if (obj.base() != r3) {
155             __ mov(r3, obj.base());
156           }
157         } else {
158           __ lea(r3, obj);
159         }
160         __ g1_write_barrier_pre(r3 /* obj */,
161                                 r1 /* pre_val */,
162                                 rthread /* thread */,
163                                 r10  /* tmp */,
164                                 val != noreg /* tosca_live */,
165                                 false /* expand_call */);
166         if (val == noreg) {
167           __ store_heap_oop_null(Address(r3, 0));
168         } else {
169           // G1 barrier needs uncompressed oop for region cross check.
< prev index next >