hotspot/src/cpu/sparc/vm/sparc.ad
changeset 46595 18a062f9a227
parent 46592 6e357e2c8143
child 46596 a7c9706d25a9
equal deleted inserted replaced
46594:697dad96a3df 46595:18a062f9a227
  1758 // to construct decryption expanded key
  1758 // to construct decryption expanded key
  1759 const bool Matcher::pass_original_key_for_aes() {
  1759 const bool Matcher::pass_original_key_for_aes() {
  1760   return true;
  1760   return true;
  1761 }
  1761 }
  1762 
  1762 
  1763 /* NOTE: All currently supported SPARC HW provides fast conversion.
  1763 // NOTE: All currently supported SPARC HW provides fast conversion.
  1764  * 
  1764 const bool Matcher::convL2FSupported(void) { return true; }
  1765  * TODO: Clean-out code depending on 'has_fast_fxtof'.
       
  1766  */
       
  1767 const bool Matcher::convL2FSupported(void) {
       
  1768   return VM_Version::has_fast_fxtof();
       
  1769 }
       
  1770 
  1765 
  1771 // Is this branch offset short enough that a short branch can be used?
  1766 // Is this branch offset short enough that a short branch can be used?
  1772 //
  1767 //
  1773 // NOTE: If the platform does not provide any short branch variants, then
  1768 // NOTE: If the platform does not provide any short branch variants, then
  1774 //       this method should return false for offset 0.
  1769 //       this method should return false for offset 0.
  8242   opcode(Assembler::fpop1_op3, Assembler::arith_op, Assembler::fmuld_opf);
  8237   opcode(Assembler::fpop1_op3, Assembler::arith_op, Assembler::fmuld_opf);
  8243   ins_encode(form3_opf_rs1D_rs2D_rdD(src1, src2, dst));
  8238   ins_encode(form3_opf_rs1D_rs2D_rdD(src1, src2, dst));
  8244   ins_pipe(fmulD_reg_reg);
  8239   ins_pipe(fmulD_reg_reg);
  8245 %}
  8240 %}
  8246 
  8241 
  8247 instruct convL2D_reg_slow_fxtof(regD dst, stackSlotL src) %{
       
  8248   match(Set dst (ConvL2D src));
       
  8249   ins_cost(DEFAULT_COST*8 + MEMORY_REF_COST*6);
       
  8250 
       
  8251   expand %{
       
  8252     regD_low   tmpsrc;
       
  8253     iRegI      ix43300000;
       
  8254     iRegI      ix41f00000;
       
  8255     stackSlotL lx43300000;
       
  8256     stackSlotL lx41f00000;
       
  8257     regD_low   dx43300000;
       
  8258     regD       dx41f00000;
       
  8259     regD       tmp1;
       
  8260     regD_low   tmp2;
       
  8261     regD       tmp3;
       
  8262     regD       tmp4;
       
  8263 
       
  8264     stkL_to_regD(tmpsrc, src);
       
  8265 
       
  8266     loadConI_x43300000(ix43300000);
       
  8267     loadConI_x41f00000(ix41f00000);
       
  8268     regI_to_stkLHi(lx43300000, ix43300000);
       
  8269     regI_to_stkLHi(lx41f00000, ix41f00000);
       
  8270     stkL_to_regD(dx43300000, lx43300000);
       
  8271     stkL_to_regD(dx41f00000, lx41f00000);
       
  8272 
       
  8273     convI2D_regDHi_regD(tmp1, tmpsrc);
       
  8274     regDHi_regDLo_to_regD(tmp2, dx43300000, tmpsrc);
       
  8275     subD_regD_regD(tmp3, tmp2, dx43300000);
       
  8276     mulD_regD_regD(tmp4, tmp1, dx41f00000);
       
  8277     addD_regD_regD(dst, tmp3, tmp4);
       
  8278   %}
       
  8279 %}
       
  8280 
       
  8281 // Long to Double conversion using fast fxtof
  8242 // Long to Double conversion using fast fxtof
  8282 instruct convL2D_helper(regD dst, regD tmp) %{
  8243 instruct convL2D_helper(regD dst, regD tmp) %{
  8283   effect(DEF dst, USE tmp);
  8244   effect(DEF dst, USE tmp);
  8284   size(4);
  8245   size(4);
  8285   format %{ "FXTOD  $tmp,$dst" %}
  8246   format %{ "FXTOD  $tmp,$dst" %}
  8287   ins_encode(form3_opf_rs2D_rdD(tmp, dst));
  8248   ins_encode(form3_opf_rs2D_rdD(tmp, dst));
  8288   ins_pipe(fcvtL2D);
  8249   ins_pipe(fcvtL2D);
  8289 %}
  8250 %}
  8290 
  8251 
  8291 instruct convL2D_stk_fast_fxtof(regD dst, stackSlotL src) %{
  8252 instruct convL2D_stk_fast_fxtof(regD dst, stackSlotL src) %{
  8292   predicate(VM_Version::has_fast_fxtof());
       
  8293   match(Set dst (ConvL2D src));
  8253   match(Set dst (ConvL2D src));
  8294   ins_cost(DEFAULT_COST + 3 * MEMORY_REF_COST);
  8254   ins_cost(DEFAULT_COST + 3 * MEMORY_REF_COST);
  8295   expand %{
  8255   expand %{
  8296     regD tmp;
  8256     regD tmp;
  8297     stkL_to_regD(tmp, src);
  8257     stkL_to_regD(tmp, src);