src/share/vm/opto/matcher.cpp

Print this page
rev 2647 : 7086394: c2/arm: enable UseFPUForSpilling
Summary: ARM has instructions to move data directly between the fpu and integer registers.
Reviewed-by:


 484    idealreg2spillmask[Op_RegF]->OR(C->FIRST_STACK_mask());
 485   *idealreg2spillmask[Op_RegD] = *idealreg2regmask[Op_RegD];
 486    idealreg2spillmask[Op_RegD]->OR(C->FIRST_STACK_mask());
 487   *idealreg2spillmask[Op_RegP] = *idealreg2regmask[Op_RegP];
 488    idealreg2spillmask[Op_RegP]->OR(C->FIRST_STACK_mask());
 489 
 490    if (UseFPUForSpilling) {
 491      // This mask logic assumes that the spill operations are
 492      // symmetric and that the registers involved are the same size.
 493      // On sparc for instance we may have to use 64 bit moves will
 494      // kill 2 registers when used with F0-F31.
 495      idealreg2spillmask[Op_RegI]->OR(*idealreg2regmask[Op_RegF]);
 496      idealreg2spillmask[Op_RegF]->OR(*idealreg2regmask[Op_RegI]);
 497 #ifdef _LP64
 498      idealreg2spillmask[Op_RegN]->OR(*idealreg2regmask[Op_RegF]);
 499      idealreg2spillmask[Op_RegL]->OR(*idealreg2regmask[Op_RegD]);
 500      idealreg2spillmask[Op_RegD]->OR(*idealreg2regmask[Op_RegL]);
 501      idealreg2spillmask[Op_RegP]->OR(*idealreg2regmask[Op_RegD]);
 502 #else
 503      idealreg2spillmask[Op_RegP]->OR(*idealreg2regmask[Op_RegF]);






 504 #endif
 505    }
 506 
 507   // Make up debug masks.  Any spill slot plus callee-save registers.
 508   // Caller-save registers are assumed to be trashable by the various
 509   // inline-cache fixup routines.
 510   *idealreg2debugmask  [Op_RegN]= *idealreg2spillmask[Op_RegN];
 511   *idealreg2debugmask  [Op_RegI]= *idealreg2spillmask[Op_RegI];
 512   *idealreg2debugmask  [Op_RegL]= *idealreg2spillmask[Op_RegL];
 513   *idealreg2debugmask  [Op_RegF]= *idealreg2spillmask[Op_RegF];
 514   *idealreg2debugmask  [Op_RegD]= *idealreg2spillmask[Op_RegD];
 515   *idealreg2debugmask  [Op_RegP]= *idealreg2spillmask[Op_RegP];
 516 
 517   *idealreg2mhdebugmask[Op_RegN]= *idealreg2spillmask[Op_RegN];
 518   *idealreg2mhdebugmask[Op_RegI]= *idealreg2spillmask[Op_RegI];
 519   *idealreg2mhdebugmask[Op_RegL]= *idealreg2spillmask[Op_RegL];
 520   *idealreg2mhdebugmask[Op_RegF]= *idealreg2spillmask[Op_RegF];
 521   *idealreg2mhdebugmask[Op_RegD]= *idealreg2spillmask[Op_RegD];
 522   *idealreg2mhdebugmask[Op_RegP]= *idealreg2spillmask[Op_RegP];
 523 




 484    idealreg2spillmask[Op_RegF]->OR(C->FIRST_STACK_mask());
 485   *idealreg2spillmask[Op_RegD] = *idealreg2regmask[Op_RegD];
 486    idealreg2spillmask[Op_RegD]->OR(C->FIRST_STACK_mask());
 487   *idealreg2spillmask[Op_RegP] = *idealreg2regmask[Op_RegP];
 488    idealreg2spillmask[Op_RegP]->OR(C->FIRST_STACK_mask());
 489 
 490    if (UseFPUForSpilling) {
 491      // This mask logic assumes that the spill operations are
 492      // symmetric and that the registers involved are the same size.
 493      // On sparc for instance we may have to use 64 bit moves will
 494      // kill 2 registers when used with F0-F31.
 495      idealreg2spillmask[Op_RegI]->OR(*idealreg2regmask[Op_RegF]);
 496      idealreg2spillmask[Op_RegF]->OR(*idealreg2regmask[Op_RegI]);
 497 #ifdef _LP64
 498      idealreg2spillmask[Op_RegN]->OR(*idealreg2regmask[Op_RegF]);
 499      idealreg2spillmask[Op_RegL]->OR(*idealreg2regmask[Op_RegD]);
 500      idealreg2spillmask[Op_RegD]->OR(*idealreg2regmask[Op_RegL]);
 501      idealreg2spillmask[Op_RegP]->OR(*idealreg2regmask[Op_RegD]);
 502 #else
 503      idealreg2spillmask[Op_RegP]->OR(*idealreg2regmask[Op_RegF]);
 504 #ifdef ARM
 505      // ARM has support for moving 64bit values between a pair of
 506      // integer registers and a double register
 507      idealreg2spillmask[Op_RegL]->OR(*idealreg2regmask[Op_RegD]);
 508      idealreg2spillmask[Op_RegD]->OR(*idealreg2regmask[Op_RegL]);
 509 #endif
 510 #endif
 511    }
 512 
 513   // Make up debug masks.  Any spill slot plus callee-save registers.
 514   // Caller-save registers are assumed to be trashable by the various
 515   // inline-cache fixup routines.
 516   *idealreg2debugmask  [Op_RegN]= *idealreg2spillmask[Op_RegN];
 517   *idealreg2debugmask  [Op_RegI]= *idealreg2spillmask[Op_RegI];
 518   *idealreg2debugmask  [Op_RegL]= *idealreg2spillmask[Op_RegL];
 519   *idealreg2debugmask  [Op_RegF]= *idealreg2spillmask[Op_RegF];
 520   *idealreg2debugmask  [Op_RegD]= *idealreg2spillmask[Op_RegD];
 521   *idealreg2debugmask  [Op_RegP]= *idealreg2spillmask[Op_RegP];
 522 
 523   *idealreg2mhdebugmask[Op_RegN]= *idealreg2spillmask[Op_RegN];
 524   *idealreg2mhdebugmask[Op_RegI]= *idealreg2spillmask[Op_RegI];
 525   *idealreg2mhdebugmask[Op_RegL]= *idealreg2spillmask[Op_RegL];
 526   *idealreg2mhdebugmask[Op_RegF]= *idealreg2spillmask[Op_RegF];
 527   *idealreg2mhdebugmask[Op_RegD]= *idealreg2spillmask[Op_RegD];
 528   *idealreg2mhdebugmask[Op_RegP]= *idealreg2spillmask[Op_RegP];
 529