conversions, and handle BIT_XOR_EXPR that's used to invert the
sense of the single bit test.
+2004-12-13 Richard Henderson <rth@redhat.com>
+
+ PR target/17990
+ * config/i386/i386.md (negsf2): Fix condition for using sse.
+ (negdf2, abssf2, absdf2): Likewise.
+ (negsf2_if, abssf2_if): Don't disable if sse enabled.
+ (movv4sf_internal splitter): Postpone til after reload.
+ (movv2di_internal splitter): Likewise.
+
2004-12-13 Richard Henderson <rth@redhat.com>
PR middle-end/17930
[(parallel [(set (match_operand:SF 0 "nonimmediate_operand" "")
(neg:SF (match_operand:SF 1 "nonimmediate_operand" "")))
(clobber (reg:CC 17))])]
- "TARGET_80387"
- "if (TARGET_SSE)
+ "TARGET_80387 || TARGET_SSE_MATH"
+ "if (TARGET_SSE_MATH)
{
/* In case operand is in memory, we will not use SSE. */
if (memory_operand (operands[0], VOIDmode)
[(set (match_operand:SF 0 "nonimmediate_operand" "=f#r,rm#f")
(neg:SF (match_operand:SF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
- "TARGET_80387 && !TARGET_SSE
+ "TARGET_80387
&& ix86_unary_operator_ok (NEG, SFmode, operands)"
"#")
[(parallel [(set (match_operand:DF 0 "nonimmediate_operand" "")
(neg:DF (match_operand:DF 1 "nonimmediate_operand" "")))
(clobber (reg:CC 17))])]
- "TARGET_80387"
- "if (TARGET_SSE2)
+ "TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH)"
+ "if (TARGET_SSE2 && TARGET_SSE_MATH)
{
/* In case operand is in memory, we will not use SSE. */
if (memory_operand (operands[0], VOIDmode)
[(parallel [(set (match_operand:SF 0 "nonimmediate_operand" "")
(neg:SF (match_operand:SF 1 "nonimmediate_operand" "")))
(clobber (reg:CC 17))])]
- "TARGET_80387"
- "if (TARGET_SSE)
+ "TARGET_80387 || TARGET_SSE_MATH"
+ "if (TARGET_SSE_MATH)
{
/* In case operand is in memory, we will not use SSE. */
if (memory_operand (operands[0], VOIDmode)
[(set (match_operand:SF 0 "nonimmediate_operand" "=f#r,rm#f")
(abs:SF (match_operand:SF 1 "nonimmediate_operand" "0,0")))
(clobber (reg:CC 17))]
- "TARGET_80387 && ix86_unary_operator_ok (ABS, SFmode, operands) && !TARGET_SSE"
+ "TARGET_80387 && ix86_unary_operator_ok (ABS, SFmode, operands)"
"#")
(define_split
[(parallel [(set (match_operand:DF 0 "nonimmediate_operand" "")
(neg:DF (match_operand:DF 1 "nonimmediate_operand" "")))
(clobber (reg:CC 17))])]
- "TARGET_80387"
- "if (TARGET_SSE2)
+ "TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH)"
+ "if (TARGET_SSE2 && TARGET_SSE_MATH)
{
/* In case operand is in memory, we will not use SSE. */
if (memory_operand (operands[0], VOIDmode)
(define_split
[(set (match_operand:V4SF 0 "register_operand" "")
(match_operand:V4SF 1 "zero_extended_scalar_load_operand" ""))]
- "TARGET_SSE"
+ "TARGET_SSE && reload_completed"
[(set (match_dup 0)
(vec_merge:V4SF
(vec_duplicate:V4SF (match_dup 1))
(define_split
[(set (match_operand:V2DF 0 "register_operand" "")
(match_operand:V2DF 1 "zero_extended_scalar_load_operand" ""))]
- "TARGET_SSE2"
+ "TARGET_SSE2 && reload_completed"
[(set (match_dup 0)
(vec_merge:V2DF
(vec_duplicate:V2DF (match_dup 1))