OSDN Git Service

* config/i386/i386.c (override_options): Revert 2004-11-24 change.
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 18 Jan 2005 06:30:43 +0000 (06:30 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 18 Jan 2005 06:30:43 +0000 (06:30 +0000)
* config/i386/i386.md (fmodsf3, dremsf3, *sinsf2, *cossf2, sincossf3,
*tansf3_1, tansf2, atan2sf3_1, atan2sf3, atansf2, asinsf2, acossf2,
logsf2, log10sf2, log2sf2, log1psf2, logbsf2, ilogbsf2, expsf2,
exp10sf2, exp2sf2, expm1sf2, rintsf2, floorsf2, ceilsf2, btruncsf2,
nearbyintsf2): Disable for TARGET_SSE_MATH.  Leave patterns enabled
for TARGET_MIX_SSE_I387.
(fmoddf3, dremdf3, *sindf2, *sinextendsfdf2, *cosdf2, *cosextendsfdf2,
sincosdf3, *sincosextendsfdf3, *tandf3_1, tandf2, atan2df3_1,
atan2df3, atandf2, asindf2, acosdf2, logdf2, log10df2, log2df2,
log1pdf2, logbdf2, expdf2, exp10df2, exp2df2, expm1df2, rintdf2,
floordf2, ceildf2, btruncdf2, nearbyintdf2): Disable for
(TARGET_SSE2 && TARGET_SSE_MATH).  Leave patterns enabled for
TARGET_MIX_SSE_I387.
(atan2sf3, atan2df3, atan2xf3): Remove register constraints
from expander.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@93815 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.md

index 8e63550..141cbc4 100644 (file)
@@ -1,5 +1,24 @@
 2005-01-18  Uros Bizjak  <uros@kss-loka.si>
 
+       * config/i386/i386.c (override_options): Revert 2004-11-24 change.
+       * config/i386/i386.md (fmodsf3, dremsf3, *sinsf2, *cossf2, sincossf3,
+       *tansf3_1, tansf2, atan2sf3_1, atan2sf3, atansf2, asinsf2, acossf2,
+       logsf2, log10sf2, log2sf2, log1psf2, logbsf2, ilogbsf2, expsf2,
+       exp10sf2, exp2sf2, expm1sf2, rintsf2, floorsf2, ceilsf2, btruncsf2,
+       nearbyintsf2): Disable for TARGET_SSE_MATH.  Leave patterns enabled
+       for TARGET_MIX_SSE_I387.
+       (fmoddf3, dremdf3, *sindf2, *sinextendsfdf2, *cosdf2, *cosextendsfdf2,
+       sincosdf3, *sincosextendsfdf3, *tandf3_1, tandf2, atan2df3_1,
+       atan2df3, atandf2, asindf2, acosdf2, logdf2, log10df2, log2df2,
+       log1pdf2, logbdf2, expdf2, exp10df2, exp2df2, expm1df2, rintdf2,
+       floordf2, ceildf2, btruncdf2, nearbyintdf2): Disable for
+       (TARGET_SSE2 && TARGET_SSE_MATH).  Leave patterns enabled for
+       TARGET_MIX_SSE_I387.
+       (atan2sf3, atan2df3, atan2xf3): Remove register constraints
+       from expander.
+
+2005-01-18  Uros Bizjak  <uros@kss-loka.si>
+
        PR target/19424
        * config/i386/mmx.md (*movv2sf_internal_rex64, *movv2sf_internal):
        Add movaps alternative for xmm reg->reg move.
index 4bc0c75..5f00e4a 100644 (file)
@@ -1557,10 +1557,6 @@ override_options (void)
        error ("bad value (%s) for -mfpmath= switch", ix86_fpmath_string);
     }
 
-  /* If fpmath doesn't include 387, disable use of x87 intrinsics.  */
-  if (! (ix86_fpmath & FPMATH_387))
-    target_flags |= MASK_NO_FANCY_MATH_387;
-
   if ((x86_accumulate_outgoing_args & TUNEMASK)
       && !(target_flags_explicit & MASK_ACCUMULATE_OUTGOING_ARGS)
       && !optimize_size)
index 674d093..949c392 100644 (file)
    (use (match_operand:SF 1 "register_operand" ""))
    (use (match_operand:SF 2 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx label = gen_label_rtx ();
    (use (match_operand:DF 1 "register_operand" ""))
    (use (match_operand:DF 2 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx label = gen_label_rtx ();
    (use (match_operand:SF 1 "register_operand" ""))
    (use (match_operand:SF 2 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx label = gen_label_rtx ();
    (use (match_operand:DF 1 "register_operand" ""))
    (use (match_operand:DF 2 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx label = gen_label_rtx ();
   [(set (match_operand:DF 0 "register_operand" "=f")
        (unspec:DF [(match_operand:DF 1 "register_operand" "0")] UNSPEC_SIN))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fsin"
   [(set_attr "type" "fpspc")
   [(set (match_operand:SF 0 "register_operand" "=f")
        (unspec:SF [(match_operand:SF 1 "register_operand" "0")] UNSPEC_SIN))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fsin"
   [(set_attr "type" "fpspc")
                     (match_operand:SF 1 "register_operand" "0"))]
                   UNSPEC_SIN))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fsin"
   [(set_attr "type" "fpspc")
   [(set (match_operand:DF 0 "register_operand" "=f")
        (unspec:DF [(match_operand:DF 1 "register_operand" "0")] UNSPEC_COS))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fcos"
   [(set_attr "type" "fpspc")
   [(set (match_operand:SF 0 "register_operand" "=f")
        (unspec:SF [(match_operand:SF 1 "register_operand" "0")] UNSPEC_COS))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fcos"
   [(set_attr "type" "fpspc")
                     (match_operand:SF 1 "register_operand" "0"))]
                   UNSPEC_COS))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fcos"
   [(set_attr "type" "fpspc")
    (set (match_operand:DF 1 "register_operand" "=u")
         (unspec:DF [(match_dup 2)] UNSPEC_SINCOS_SIN))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fsincos"
   [(set_attr "type" "fpspc")
    (set (match_operand:SF 1 "register_operand" "=u")
         (unspec:SF [(match_dup 2)] UNSPEC_SINCOS_SIN))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fsincos"
   [(set_attr "type" "fpspc")
         (unspec:DF [(float_extend:DF
                     (match_dup 2))] UNSPEC_SINCOS_SIN))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fsincos"
   [(set_attr "type" "fpspc")
    (set (match_operand:DF 1 "register_operand" "=u")
         (unspec:DF [(match_dup 2)] UNSPEC_TAN_TAN))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fptan"
   [(set_attr "type" "fpspc")
              (set (match_operand:DF 0 "register_operand" "")
                   (unspec:DF [(match_dup 1)] UNSPEC_TAN_TAN))])]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   operands[2] = gen_reg_rtx (DFmode);
    (set (match_operand:SF 1 "register_operand" "=u")
         (unspec:SF [(match_dup 2)] UNSPEC_TAN_TAN))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fptan"
   [(set_attr "type" "fpspc")
              (set (match_operand:SF 0 "register_operand" "")
                   (unspec:SF [(match_dup 1)] UNSPEC_TAN_TAN))])]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   operands[2] = gen_reg_rtx (SFmode);
                   UNSPEC_FPATAN))
    (clobber (match_scratch:DF 3 "=1"))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fpatan"
   [(set_attr "type" "fpspc")
    (set_attr "mode" "DF")])
 
 (define_expand "atan2df3"
-  [(use (match_operand:DF 0 "register_operand" "=f"))
-   (use (match_operand:DF 2 "register_operand" "0"))
-   (use (match_operand:DF 1 "register_operand" "u"))]
+  [(use (match_operand:DF 0 "register_operand" ""))
+   (use (match_operand:DF 2 "register_operand" ""))
+   (use (match_operand:DF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx copy = gen_reg_rtx (DFmode);
                    UNSPEC_FPATAN))
              (clobber (match_scratch:DF 3 ""))])]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   operands[2] = gen_reg_rtx (DFmode);
                   UNSPEC_FPATAN))
    (clobber (match_scratch:SF 3 "=1"))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
   "fpatan"
   [(set_attr "type" "fpspc")
    (set_attr "mode" "SF")])
 
 (define_expand "atan2sf3"
-  [(use (match_operand:SF 0 "register_operand" "=f"))
-   (use (match_operand:SF 2 "register_operand" "0"))
-   (use (match_operand:SF 1 "register_operand" "u"))]
+  [(use (match_operand:SF 0 "register_operand" ""))
+   (use (match_operand:SF 2 "register_operand" ""))
+   (use (match_operand:SF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx copy = gen_reg_rtx (SFmode);
                    UNSPEC_FPATAN))
              (clobber (match_scratch:SF 3 ""))])]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   operands[2] = gen_reg_rtx (SFmode);
    (set_attr "mode" "XF")])
 
 (define_expand "atan2xf3"
-  [(use (match_operand:XF 0 "register_operand" "=f"))
-   (use (match_operand:XF 2 "register_operand" "0"))
-   (use (match_operand:XF 1 "register_operand" "u"))]
+  [(use (match_operand:XF 0 "register_operand" ""))
+   (use (match_operand:XF 2 "register_operand" ""))
+   (use (match_operand:XF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
    && flag_unsafe_math_optimizations"
 {
    (set (match_operand:DF 0 "register_operand" "")
        (float_truncate:DF (match_dup 7)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   int i;
    (set (match_operand:SF 0 "register_operand" "")
        (float_truncate:SF (match_dup 7)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   int i;
    (set (match_operand:DF 0 "register_operand" "")
        (float_truncate:DF (match_dup 7)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   int i;
    (set (match_operand:SF 0 "register_operand" "")
        (float_truncate:SF (match_dup 7)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   int i;
    (set (match_operand:SF 0 "register_operand" "")
        (float_truncate:SF (match_dup 4)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx temp;
    (set (match_operand:DF 0 "register_operand" "")
        (float_truncate:DF (match_dup 4)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx temp;
    (set (match_operand:SF 0 "register_operand" "")
        (float_truncate:SF (match_dup 4)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx temp;
    (set (match_operand:DF 0 "register_operand" "")
        (float_truncate:DF (match_dup 4)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx temp;
    (set (match_operand:SF 0 "register_operand" "")
        (float_truncate:SF (match_dup 4)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   operands[2] = gen_reg_rtx (XFmode);
    (set (match_operand:DF 0 "register_operand" "")
        (float_truncate:DF (match_dup 4)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   operands[2] = gen_reg_rtx (XFmode);
   [(use (match_operand:SF 0 "register_operand" ""))
    (use (match_operand:SF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);
   [(use (match_operand:DF 0 "register_operand" ""))
    (use (match_operand:DF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);
    (set (match_operand:SF 0 "register_operand" "")
        (float_truncate:SF (match_dup 4)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   operands[2] = gen_reg_rtx (XFmode);
    (set (match_operand:DF 0 "register_operand" "")
        (float_truncate:DF (match_dup 4)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   operands[2] = gen_reg_rtx (XFmode);
                   (fix:SI (match_dup 3)))
              (clobber (reg:CC FLAGS_REG))])]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   operands[2] = gen_reg_rtx (XFmode);
    (set (match_operand:SF 0 "register_operand" "")
        (float_truncate:SF (match_dup 10)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx temp;
    (set (match_operand:DF 0 "register_operand" "")
        (float_truncate:DF (match_dup 10)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx temp;
    (set (match_operand:SF 0 "register_operand" "")
        (float_truncate:SF (match_dup 10)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx temp;
    (set (match_operand:DF 0 "register_operand" "")
        (float_truncate:DF (match_dup 10)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx temp;
    (set (match_operand:SF 0 "register_operand" "")
        (float_truncate:SF (match_dup 8)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   int i;
    (set (match_operand:DF 0 "register_operand" "")
        (float_truncate:DF (match_dup 8)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   int i;
    (set (match_operand:DF 0 "register_operand" "")
        (float_truncate:DF (match_dup 14)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx temp;
    (set (match_operand:SF 0 "register_operand" "")
        (float_truncate:SF (match_dup 14)))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx temp;
   [(use (match_operand:DF 0 "register_operand" ""))
    (use (match_operand:DF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);
   [(use (match_operand:SF 0 "register_operand" ""))
    (use (match_operand:SF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);
   [(use (match_operand:DF 0 "register_operand" ""))
    (use (match_operand:DF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);
   [(use (match_operand:SF 0 "register_operand" ""))
    (use (match_operand:SF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);
   [(use (match_operand:DF 0 "register_operand" ""))
    (use (match_operand:DF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);
   [(use (match_operand:SF 0 "register_operand" ""))
    (use (match_operand:SF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);
   [(use (match_operand:DF 0 "register_operand" ""))
    (use (match_operand:DF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);
   [(use (match_operand:SF 0 "register_operand" ""))
    (use (match_operand:SF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);
   [(use (match_operand:DF 0 "register_operand" ""))
    (use (match_operand:DF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!(TARGET_SSE2 && TARGET_SSE_MATH) || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);
   [(use (match_operand:SF 0 "register_operand" ""))
    (use (match_operand:SF 1 "register_operand" ""))]
   "TARGET_USE_FANCY_MATH_387
+   && (!TARGET_SSE_MATH || TARGET_MIX_SSE_I387)
    && flag_unsafe_math_optimizations"
 {
   rtx op0 = gen_reg_rtx (XFmode);