189 __ ld_ptr(ldarg.address_in_frame(), ldarg.as_register()); |
189 __ ld_ptr(ldarg.address_in_frame(), ldarg.as_register()); |
190 else { |
190 else { |
191 // Optimization, see if there are any more args and get out prior to checking |
191 // Optimization, see if there are any more args and get out prior to checking |
192 // all 16 float registers. My guess is that this is rare. |
192 // all 16 float registers. My guess is that this is rare. |
193 // If is_register is false, then we are done the first six integer args. |
193 // If is_register is false, then we are done the first six integer args. |
194 __ tst(G4_scratch); |
194 __ br_null_short(G4_scratch, Assembler::pt, done); |
195 __ brx(Assembler::zero, false, Assembler::pt, done); |
|
196 __ delayed()->nop(); |
|
197 |
|
198 } |
195 } |
199 __ ba(false, NextArg); |
196 __ ba(NextArg); |
200 __ delayed()->srl( G4_scratch, 2, G4_scratch ); |
197 __ delayed()->srl( G4_scratch, 2, G4_scratch ); |
201 |
198 |
202 __ bind(LoadFloatArg); |
199 __ bind(LoadFloatArg); |
203 __ ldf( FloatRegisterImpl::S, a, ldarg.as_float_register(), 4); |
200 __ ldf( FloatRegisterImpl::S, a, ldarg.as_float_register(), 4); |
204 __ ba(false, NextArg); |
201 __ ba(NextArg); |
205 __ delayed()->srl( G4_scratch, 2, G4_scratch ); |
202 __ delayed()->srl( G4_scratch, 2, G4_scratch ); |
206 |
203 |
207 __ bind(LoadDoubleArg); |
204 __ bind(LoadDoubleArg); |
208 __ ldf( FloatRegisterImpl::D, a, ldarg.as_double_register() ); |
205 __ ldf( FloatRegisterImpl::D, a, ldarg.as_double_register() ); |
209 __ ba(false, NextArg); |
206 __ ba(NextArg); |
210 __ delayed()->srl( G4_scratch, 2, G4_scratch ); |
207 __ delayed()->srl( G4_scratch, 2, G4_scratch ); |
211 |
208 |
212 __ bind(NextArg); |
209 __ bind(NextArg); |
213 |
210 |
214 } |
211 } |
232 // if the compilation did not complete (either went background or bailed out). |
229 // if the compilation did not complete (either went background or bailed out). |
233 __ set((int)false, O2); |
230 __ set((int)false, O2); |
234 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), O2, O2, true); |
231 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), O2, O2, true); |
235 // returns verified_entry_point or NULL |
232 // returns verified_entry_point or NULL |
236 // we ignore it in any case |
233 // we ignore it in any case |
237 __ ba(false, Lcontinue); |
234 __ ba_short(Lcontinue); |
238 __ delayed()->nop(); |
|
239 |
235 |
240 } |
236 } |
241 |
237 |
242 |
238 |
243 // End of helpers |
239 // End of helpers |