comparison src/cpu/sparc/vm/interpreter_sparc.cpp @ 4137:04b9a2566eec

Merge with hsx23/hotspot.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Sat, 17 Dec 2011 21:40:27 +0100
parents 3d42f82cd811
children 6759698e3140
comparison
equal deleted inserted replaced
3737:9dc19b7d89a3 4137:04b9a2566eec
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