diff --git a/src/hotspot/cpu/x86/x86_32.ad b/src/hotspot/cpu/x86/x86_32.ad index c78e90354c8..1be9565baf2 100644 --- a/src/hotspot/cpu/x86/x86_32.ad +++ b/src/hotspot/cpu/x86/x86_32.ad @@ -7189,6 +7189,7 @@ instruct castLL( eRegL dst ) %{ %} instruct castFF( regF dst ) %{ + predicate(UseSSE >= 2); match(Set dst (CastFF dst)); format %{ "#castFF of $dst" %} ins_encode( /*empty encoding*/ ); @@ -7197,6 +7198,25 @@ instruct castFF( regF dst ) %{ %} instruct castDD( regD dst ) %{ + predicate(UseSSE >= 2); + match(Set dst (CastDD dst)); + format %{ "#castDD of $dst" %} + ins_encode( /*empty encoding*/ ); + ins_cost(0); + ins_pipe( empty ); +%} + +instruct castFF_PR( regFPR dst ) %{ + predicate(UseSSE < 2); + match(Set dst (CastFF dst)); + format %{ "#castFF of $dst" %} + ins_encode( /*empty encoding*/ ); + ins_cost(0); + ins_pipe( empty ); +%} + +instruct castDD_PR( regDPR dst ) %{ + predicate(UseSSE < 2); match(Set dst (CastDD dst)); format %{ "#castDD of $dst" %} ins_encode( /*empty encoding*/ ); diff --git a/src/hotspot/share/opto/castnode.hpp b/src/hotspot/share/opto/castnode.hpp index 95574e60457..2aa318c0e24 100644 --- a/src/hotspot/share/opto/castnode.hpp +++ b/src/hotspot/share/opto/castnode.hpp @@ -140,7 +140,7 @@ class CastFFNode: public ConstraintCastNode { init_class_id(Class_CastFF); } virtual int Opcode() const; - virtual uint ideal_reg() const { return Op_RegF; } + virtual uint ideal_reg() const { return in(1)->ideal_reg(); } }; class CastDDNode: public ConstraintCastNode { @@ -150,7 +150,7 @@ class CastDDNode: public ConstraintCastNode { init_class_id(Class_CastDD); } virtual int Opcode() const; - virtual uint ideal_reg() const { return Op_RegD; } + virtual uint ideal_reg() const { return in(1)->ideal_reg(); } }; class CastVVNode: public ConstraintCastNode {