< prev index next >

src/cpu/ppc/vm/interp_masm_ppc_64.cpp

Print this page
rev 13142 : 8181809: PPC64: Leverage mtfprd/mffprd on POWER8
Reviewed-by: mdoerr, simonis
Contributed-by: Matthew Brandyberry <mbrandy@linux.vnet.ibm.com>


 267   std(r, - Interpreter::stackElementSize, R15_esp);
 268   addi(R15_esp, R15_esp, - 2 * Interpreter::stackElementSize );
 269 }
 270 
 271 void InterpreterMacroAssembler::push_f(FloatRegister f) {
 272   stfs(f, 0, R15_esp);
 273   addi(R15_esp, R15_esp, - Interpreter::stackElementSize );
 274 }
 275 
 276 void InterpreterMacroAssembler::push_d(FloatRegister f)   {
 277   stfd(f, - Interpreter::stackElementSize, R15_esp);
 278   addi(R15_esp, R15_esp, - 2 * Interpreter::stackElementSize );
 279 }
 280 
 281 void InterpreterMacroAssembler::push_2ptrs(Register first, Register second) {
 282   std(first, 0, R15_esp);
 283   std(second, -Interpreter::stackElementSize, R15_esp);
 284   addi(R15_esp, R15_esp, - 2 * Interpreter::stackElementSize );
 285 }
 286 
 287 void InterpreterMacroAssembler::push_l_pop_d(Register l, FloatRegister d) {



 288   std(l, 0, R15_esp);
 289   lfd(d, 0, R15_esp);

 290 }
 291 
 292 void InterpreterMacroAssembler::push_d_pop_l(FloatRegister d, Register l) {



 293   stfd(d, 0, R15_esp);
 294   ld(l, 0, R15_esp);

 295 }
 296 
 297 void InterpreterMacroAssembler::push(TosState state) {
 298   switch (state) {
 299     case atos: push_ptr();                break;
 300     case btos:
 301     case ztos:
 302     case ctos:
 303     case stos:
 304     case itos: push_i();                  break;
 305     case ltos: push_l();                  break;
 306     case ftos: push_f();                  break;
 307     case dtos: push_d();                  break;
 308     case vtos: /* nothing to do */        break;
 309     default  : ShouldNotReachHere();
 310   }
 311 }
 312 
 313 void InterpreterMacroAssembler::pop(TosState state) {
 314   switch (state) {




 267   std(r, - Interpreter::stackElementSize, R15_esp);
 268   addi(R15_esp, R15_esp, - 2 * Interpreter::stackElementSize );
 269 }
 270 
 271 void InterpreterMacroAssembler::push_f(FloatRegister f) {
 272   stfs(f, 0, R15_esp);
 273   addi(R15_esp, R15_esp, - Interpreter::stackElementSize );
 274 }
 275 
 276 void InterpreterMacroAssembler::push_d(FloatRegister f)   {
 277   stfd(f, - Interpreter::stackElementSize, R15_esp);
 278   addi(R15_esp, R15_esp, - 2 * Interpreter::stackElementSize );
 279 }
 280 
 281 void InterpreterMacroAssembler::push_2ptrs(Register first, Register second) {
 282   std(first, 0, R15_esp);
 283   std(second, -Interpreter::stackElementSize, R15_esp);
 284   addi(R15_esp, R15_esp, - 2 * Interpreter::stackElementSize );
 285 }
 286 
 287 void InterpreterMacroAssembler::move_l_to_d(Register l, FloatRegister d) {
 288   if (VM_Version::has_mtfprd()) {
 289     mtfprd(d, l);
 290   } else {
 291     std(l, 0, R15_esp);
 292     lfd(d, 0, R15_esp);
 293   }
 294 }
 295 
 296 void InterpreterMacroAssembler::move_d_to_l(FloatRegister d, Register l) {
 297   if (VM_Version::has_mtfprd()) {
 298     mffprd(l, d);
 299   } else {
 300     stfd(d, 0, R15_esp);
 301     ld(l, 0, R15_esp);
 302   }
 303 }
 304 
 305 void InterpreterMacroAssembler::push(TosState state) {
 306   switch (state) {
 307     case atos: push_ptr();                break;
 308     case btos:
 309     case ztos:
 310     case ctos:
 311     case stos:
 312     case itos: push_i();                  break;
 313     case ltos: push_l();                  break;
 314     case ftos: push_f();                  break;
 315     case dtos: push_d();                  break;
 316     case vtos: /* nothing to do */        break;
 317     default  : ShouldNotReachHere();
 318   }
 319 }
 320 
 321 void InterpreterMacroAssembler::pop(TosState state) {
 322   switch (state) {


< prev index next >