Mercurial > hg > truffle
diff src/cpu/x86/vm/x86_64.ad @ 71:3d62cb85208d
6662967: Optimize I2D conversion on new x86
Summary: Use CVTDQ2PS and CVTDQ2PD for integer values conversions to float and double values on new AMD cpu.
Reviewed-by: sgoldman, never
author | kvn |
---|---|
date | Wed, 19 Mar 2008 15:33:25 -0700 |
parents | a61af66fc99e |
children | ba764ed4b6f2 |
line wrap: on
line diff
--- a/src/cpu/x86/vm/x86_64.ad Wed Mar 19 15:14:36 2008 -0700 +++ b/src/cpu/x86/vm/x86_64.ad Wed Mar 19 15:33:25 2008 -0700 @@ -10098,6 +10098,7 @@ instruct convI2F_reg_reg(regF dst, rRegI src) %{ + predicate(!UseXmmI2F); match(Set dst (ConvI2F src)); format %{ "cvtsi2ssl $dst, $src\t# i2f" %} @@ -10118,6 +10119,7 @@ instruct convI2D_reg_reg(regD dst, rRegI src) %{ + predicate(!UseXmmI2D); match(Set dst (ConvI2D src)); format %{ "cvtsi2sdl $dst, $src\t# i2d" %} @@ -10136,6 +10138,34 @@ ins_pipe(pipe_slow); // XXX %} +instruct convXI2F_reg(regF dst, rRegI src) +%{ + predicate(UseXmmI2F); + match(Set dst (ConvI2F src)); + + format %{ "movdl $dst, $src\n\t" + "cvtdq2psl $dst, $dst\t# i2f" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ cvtdq2ps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe(pipe_slow); // XXX +%} + +instruct convXI2D_reg(regD dst, rRegI src) +%{ + predicate(UseXmmI2D); + match(Set dst (ConvI2D src)); + + format %{ "movdl $dst, $src\n\t" + "cvtdq2pdl $dst, $dst\t# i2d" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ cvtdq2pd($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe(pipe_slow); // XXX +%} + instruct convL2F_reg_reg(regF dst, rRegL src) %{ match(Set dst (ConvL2F src));