Commit 5b1f1e63 by Richard Henderson Committed by Richard Henderson

i386.md (truncdfsf2): Don't create stack temp when using sse math only.

        * config/i386/i386.md (truncdfsf2): Don't create stack temp when
        using sse math only.  Use truncdfsf2_with_temp.
        (truncdfsf2_with_temp): New.
        (truncdfsf_fast_i387): Rename from truncdfsf2_noop.  Add memory
        output alternative.
        (truncdfsf_mixed): Rename from truncdfsf2_1_sse.  Compress duplicate
        alternatives.
        (truncdfsf_fast_sse): Rename from truncdfsf2_2.  Remove f alternative.
        (truncdfsf2_3, truncdfsf2_sse_only): Remove.
        (truncdfsf_i387): Rename from truncdfsf2_1.  Compress duplicates.
        (truncdfsf_fast_mixed): New.
        (truncdfsf splitters): Remove all except the 387 load/store split.
        (truncxfsf2_1, truncxfdf2_1): Unify enable constraint with
        respect to TARGET_SSE2, TARGET_80387, TARGET_SSE_MATH and
        TARGET_MIX_SSE_I387.
        (*truncxf{s,d}f2_1): Rename to *truncxf{s,d}f2_mixed.
        (truncxf{s,d}f2_noop) Rename to truncxf{d,s}f2_i387_noop.
        (*truncxf{s,d}f2_i387): New patterns.
        (*truncxf{s,d}f2_2): Rename to *truncxf{s,d}f2_i387_1.
        (truncxf{s,d}f2, fmod{s,d}f3, drem{s,d}f3, log1p{s,d}f2,
        rint{s,d}f2, floor{s,d}f2, ceil{s,d}f2, btrunc{s,d}f2,
        nearbyint{s,d}f2): Use renamed patterns.

Co-Authored-By: Uros Bizjak <uros@kss-loka.si>

From-SVN: r92498
parent ad50bc8d
2004-12-22 Richard Henderson <rth@redhat.com>
Uros Bizjak <uros@kss-loka.si>
* config/i386/i386.md (truncdfsf2): Don't create stack temp when
using sse math only. Use truncdfsf2_with_temp.
(truncdfsf2_with_temp): New.
(truncdfsf_fast_i387): Rename from truncdfsf2_noop. Add memory
output alternative.
(truncdfsf_mixed): Rename from truncdfsf2_1_sse. Compress duplicate
alternatives.
(truncdfsf_fast_sse): Rename from truncdfsf2_2. Remove f alternative.
(truncdfsf2_3, truncdfsf2_sse_only): Remove.
(truncdfsf_i387): Rename from truncdfsf2_1. Compress duplicates.
(truncdfsf_fast_mixed): New.
(truncdfsf splitters): Remove all except the 387 load/store split.
(truncxfsf2_1, truncxfdf2_1): Unify enable constraint with
respect to TARGET_SSE2, TARGET_80387, TARGET_SSE_MATH and
TARGET_MIX_SSE_I387.
(*truncxf{s,d}f2_1): Rename to *truncxf{s,d}f2_mixed.
(truncxf{s,d}f2_noop) Rename to truncxf{d,s}f2_i387_noop.
(*truncxf{s,d}f2_i387): New patterns.
(*truncxf{s,d}f2_2): Rename to *truncxf{s,d}f2_i387_1.
(truncxf{s,d}f2, fmod{s,d}f3, drem{s,d}f3, log1p{s,d}f2,
rint{s,d}f2, floor{s,d}f2, ceil{s,d}f2, btrunc{s,d}f2,
nearbyint{s,d}f2): Use renamed patterns.
2004-12-22 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> 2004-12-22 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* tree.h (TYPE_SIZES_GIMPLIFIED): New. * tree.h (TYPE_SIZES_GIMPLIFIED): New.
......
...@@ -3636,46 +3636,40 @@ ...@@ -3636,46 +3636,40 @@
;; insn. So we pretend we can output to a reg in order to get better ;; insn. So we pretend we can output to a reg in order to get better
;; register preferencing, but we really use a stack slot. ;; register preferencing, but we really use a stack slot.
;; Conversion from DFmode to SFmode.
(define_expand "truncdfsf2" (define_expand "truncdfsf2"
[(parallel [(set (match_operand:SF 0 "nonimmediate_operand" "") [(set (match_operand:SF 0 "nonimmediate_operand" "")
(float_truncate:SF (float_truncate:SF
(match_operand:DF 1 "register_operand" ""))) (match_operand:DF 1 "nonimmediate_operand" "")))]
(clobber (match_dup 2))])] "TARGET_80387 || (TARGET_SSE2 && TARGET_SSE_MATH)"
"TARGET_80387 || TARGET_SSE2" {
" if (MEM_P (operands[0]) && MEM_P (operands[1]))
if (!TARGET_80387) operands[1] = force_reg (DFmode, operands[1]);
{
emit_insn (gen_truncdfsf2_sse_only (operands[0], operands[1])); if (TARGET_SSE2 && TARGET_SSE_MATH && !TARGET_MIX_SSE_I387)
DONE; ;
}
else if (flag_unsafe_math_optimizations) else if (flag_unsafe_math_optimizations)
;
else
{ {
rtx reg = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (SFmode); rtx temp = assign_386_stack_local (SFmode, 0);
emit_insn (gen_truncdfsf2_noop (reg, operands[1])); emit_insn (gen_truncdfsf2_with_temp (operands[0], operands[1], temp));
if (reg != operands[0])
emit_move_insn (operands[0], reg);
DONE; DONE;
} }
else })
operands[2] = assign_386_stack_local (SFmode, 0);
")
(define_insn "truncdfsf2_noop" (define_expand "truncdfsf2_with_temp"
[(set (match_operand:SF 0 "register_operand" "=f") [(parallel [(set (match_operand:SF 0 "" "")
(float_truncate:SF (match_operand:DF 1 "register_operand" "f")))] (float_truncate:SF (match_operand:DF 1 "" "")))
"TARGET_80387 && flag_unsafe_math_optimizations" (clobber (match_operand:SF 2 "" ""))])]
{ "")
return output_387_reg_move (insn, operands);
}
[(set_attr "type" "fmov")
(set_attr "mode" "SF")])
(define_insn "*truncdfsf2_1" (define_insn "*truncdfsf_fast_mixed"
[(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f#rx,?r#fx,?x#rf") [(set (match_operand:SF 0 "nonimmediate_operand" "=m,f,Y")
(float_truncate:SF (float_truncate:SF
(match_operand:DF 1 "register_operand" "f,f,f,f"))) (match_operand:DF 1 "nonimmediate_operand" "f ,f,Ym")))]
(clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m"))] "TARGET_SSE2 && TARGET_MIX_SSE_I387 && flag_unsafe_math_optimizations"
"TARGET_80387 && !TARGET_SSE2"
{ {
switch (which_alternative) switch (which_alternative)
{ {
...@@ -3684,19 +3678,43 @@ ...@@ -3684,19 +3678,43 @@
return "fstp%z0\t%y0"; return "fstp%z0\t%y0";
else else
return "fst%z0\t%y0"; return "fst%z0\t%y0";
case 1:
return output_387_reg_move (insn, operands);
case 2:
return "cvtsd2ss\t{%1, %0|%0, %1}";
default: default:
abort (); abort ();
} }
} }
[(set_attr "type" "fmov,multi,multi,multi") [(set_attr "type" "fmov,fmov,ssecvt")
(set_attr "mode" "SF,SF,SF,SF")]) (set_attr "mode" "SF")])
;; Yes, this one doesn't depend on flag_unsafe_math_optimizations,
;; because nothing we do here is unsafe.
(define_insn "*truncdfsf_fast_sse"
[(set (match_operand:SF 0 "nonimmediate_operand" "=Y")
(float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "Ym")))]
"TARGET_SSE2 && TARGET_SSE_MATH"
"cvtsd2ss\t{%1, %0|%0, %1}"
[(set_attr "type" "ssecvt")
(set_attr "mode" "SF")])
(define_insn "*truncdfsf_fast_i387"
[(set (match_operand:SF 0 "nonimmediate_operand" "=fm")
(float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "f")))]
"TARGET_80387 && flag_unsafe_math_optimizations"
"* return output_387_reg_move (insn, operands);"
[(set_attr "type" "fmov")
(set_attr "mode" "SF")])
(define_insn "*truncdfsf2_1_sse" (define_insn "*truncdfsf_mixed"
[(set (match_operand:SF 0 "nonimmediate_operand" "=*!m#fxr,?f#xr,?r#fx,?x#fr,Y#fr") [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?fx*r,Y")
(float_truncate:SF (float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "f#Y,f#Y,f#Y,f#Y,mY#f"))) (match_operand:DF 1 "nonimmediate_operand" "f ,f ,Ym")))
(clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m,X"))] (clobber (match_operand:SF 2 "memory_operand" "=X,m ,X"))]
"TARGET_80387 && TARGET_SSE2" "TARGET_MIX_SSE_I387"
{ {
switch (which_alternative) switch (which_alternative)
{ {
...@@ -3705,96 +3723,53 @@ ...@@ -3705,96 +3723,53 @@
return "fstp%z0\t%y0"; return "fstp%z0\t%y0";
else else
return "fst%z0\t%y0"; return "fst%z0\t%y0";
case 4: case 1:
return "#"; return "#";
case 2:
return "cvtsd2ss\t{%1, %0|%0, %1}";
default: default:
abort (); abort ();
} }
} }
[(set_attr "type" "fmov,multi,multi,multi,ssecvt") [(set_attr "type" "fmov,multi,ssecvt")
(set_attr "mode" "SF,SF,SF,SF,DF")]) (set_attr "mode" "SF")])
(define_insn "*truncdfsf2_2" (define_insn "*truncdfsf_i387"
[(set (match_operand:SF 0 "nonimmediate_operand" "=Y,Y,!m") [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?fx*r")
(float_truncate:SF (float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "Y,mY,f#Y")))] (match_operand:DF 1 "nonimmediate_operand" "f,f")))
"TARGET_80387 && TARGET_SSE2 (clobber (match_operand:SF 2 "memory_operand" "=X,m"))]
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)" "TARGET_80387"
{ {
switch (which_alternative) switch (which_alternative)
{ {
case 0: case 0:
case 1:
return "cvtsd2ss\t{%1, %0|%0, %1}";
case 2:
if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) if (find_regno_note (insn, REG_DEAD, REGNO (operands[1])))
return "fstp%z0\t%y0"; return "fstp%z0\t%y0";
else else
return "fst%z0\t%y0"; return "fst%z0\t%y0";
case 1:
return "#";
default: default:
abort (); abort ();
} }
} }
[(set_attr "type" "ssecvt,ssecvt,fmov") [(set_attr "type" "fmov,multi")
(set_attr "athlon_decode" "vector,double,*")
(set_attr "mode" "SF,SF,SF")])
(define_insn "*truncdfsf2_3"
[(set (match_operand:SF 0 "memory_operand" "=m")
(float_truncate:SF
(match_operand:DF 1 "register_operand" "f")))]
"TARGET_80387"
{
if (find_regno_note (insn, REG_DEAD, REGNO (operands[1])))
return "fstp%z0\t%y0";
else
return "fst%z0\t%y0";
}
[(set_attr "type" "fmov")
(set_attr "mode" "SF")])
(define_insn "truncdfsf2_sse_only"
[(set (match_operand:SF 0 "register_operand" "=Y,Y")
(float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" "Y,mY")))]
"!TARGET_80387 && TARGET_SSE2"
"cvtsd2ss\t{%1, %0|%0, %1}"
[(set_attr "type" "ssecvt")
(set_attr "athlon_decode" "vector,double")
(set_attr "mode" "SF")]) (set_attr "mode" "SF")])
(define_split (define_split
[(set (match_operand:SF 0 "memory_operand" "")
(float_truncate:SF
(match_operand:DF 1 "register_operand" "")))
(clobber (match_operand:SF 2 "memory_operand" ""))]
"TARGET_80387"
[(set (match_dup 0) (float_truncate:SF (match_dup 1)))]
"")
(define_split
[(set (match_operand:SF 0 "register_operand" "") [(set (match_operand:SF 0 "register_operand" "")
(float_truncate:SF (float_truncate:SF
(match_operand:DF 1 "nonimmediate_operand" ""))) (match_operand:DF 1 "fp_register_operand" "")))
(clobber (match_operand 2 "" ""))] (clobber (match_operand 2 "" ""))]
"TARGET_80387 && reload_completed "reload_completed"
&& SSE_REG_P (operands[0]) [(set (match_dup 2) (match_dup 1))
&& !STACK_REG_P (operands[1])" (set (match_dup 0) (match_dup 2))]
[(const_int 0)]
{ {
emit_insn (gen_truncdfsf2_sse_only (operands[0], operands[1])); operands[1] = gen_rtx_REG (SFmode, true_regnum (operands[1]));
DONE;
}) })
(define_split ;; Conversion from XFmode to SFmode.
[(set (match_operand:SF 0 "register_operand" "")
(float_truncate:SF
(match_operand:DF 1 "fp_register_operand" "")))
(clobber (match_operand:SF 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed"
[(set (match_dup 2) (float_truncate:SF (match_dup 1)))
(set (match_dup 0) (match_dup 2))]
"")
(define_expand "truncxfsf2" (define_expand "truncxfsf2"
[(parallel [(set (match_operand:SF 0 "nonimmediate_operand" "") [(parallel [(set (match_operand:SF 0 "nonimmediate_operand" "")
...@@ -3802,20 +3777,41 @@ ...@@ -3802,20 +3777,41 @@
(match_operand:XF 1 "register_operand" ""))) (match_operand:XF 1 "register_operand" "")))
(clobber (match_dup 2))])] (clobber (match_dup 2))])]
"TARGET_80387" "TARGET_80387"
" {
if (flag_unsafe_math_optimizations) if (flag_unsafe_math_optimizations)
{ {
rtx reg = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (SFmode); rtx reg = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (SFmode);
emit_insn (gen_truncxfsf2_noop (reg, operands[1])); emit_insn (gen_truncxfsf2_i387_noop (reg, operands[1]));
if (reg != operands[0]) if (reg != operands[0])
emit_move_insn (operands[0], reg); emit_move_insn (operands[0], reg);
DONE; DONE;
} }
else else
operands[2] = assign_386_stack_local (SFmode, 0); operands[2] = assign_386_stack_local (SFmode, 0);
") })
(define_insn "truncxfsf2_noop" (define_insn "*truncxfsf2_mixed"
[(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f#rx,?r#fx,?x#rf")
(float_truncate:SF
(match_operand:XF 1 "register_operand" "f,f,f,f")))
(clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m"))]
"TARGET_MIX_SSE_I387"
{
switch (which_alternative)
{
case 0:
if (find_regno_note (insn, REG_DEAD, REGNO (operands[1])))
return "fstp%z0\t%y0";
else
return "fst%z0\t%y0";
default:
abort();
}
}
[(set_attr "type" "fmov,multi,multi,multi")
(set_attr "mode" "SF")])
(define_insn "truncxfsf2_i387_noop"
[(set (match_operand:SF 0 "register_operand" "=f") [(set (match_operand:SF 0 "register_operand" "=f")
(float_truncate:SF (match_operand:XF 1 "register_operand" "f")))] (float_truncate:SF (match_operand:XF 1 "register_operand" "f")))]
"TARGET_80387 && flag_unsafe_math_optimizations" "TARGET_80387 && flag_unsafe_math_optimizations"
...@@ -3825,11 +3821,11 @@ ...@@ -3825,11 +3821,11 @@
[(set_attr "type" "fmov") [(set_attr "type" "fmov")
(set_attr "mode" "SF")]) (set_attr "mode" "SF")])
(define_insn "*truncxfsf2_1" (define_insn "*truncxfsf2_i387"
[(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f#rx,?r#fx,?x#rf") [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f#r,?r#f")
(float_truncate:SF (float_truncate:SF
(match_operand:XF 1 "register_operand" "f,f,f,f"))) (match_operand:XF 1 "register_operand" "f,f,f")))
(clobber (match_operand:SF 2 "memory_operand" "=X,m,m,m"))] (clobber (match_operand:SF 2 "memory_operand" "=X,m,m"))]
"TARGET_80387" "TARGET_80387"
{ {
switch (which_alternative) switch (which_alternative)
...@@ -3840,13 +3836,13 @@ ...@@ -3840,13 +3836,13 @@
else else
return "fst%z0\t%y0"; return "fst%z0\t%y0";
default: default:
abort(); abort ();
} }
} }
[(set_attr "type" "fmov,multi,multi,multi") [(set_attr "type" "fmov,multi,multi")
(set_attr "mode" "SF")]) (set_attr "mode" "SF")])
(define_insn "*truncxfsf2_2" (define_insn "*truncxfsf2_i387_1"
[(set (match_operand:SF 0 "memory_operand" "=m") [(set (match_operand:SF 0 "memory_operand" "=m")
(float_truncate:SF (float_truncate:SF
(match_operand:XF 1 "register_operand" "f")))] (match_operand:XF 1 "register_operand" "f")))]
...@@ -3861,44 +3857,68 @@ ...@@ -3861,44 +3857,68 @@
(set_attr "mode" "SF")]) (set_attr "mode" "SF")])
(define_split (define_split
[(set (match_operand:SF 0 "memory_operand" "") [(set (match_operand:SF 0 "register_operand" "")
(float_truncate:SF (float_truncate:SF
(match_operand:XF 1 "register_operand" ""))) (match_operand:XF 1 "register_operand" "")))
(clobber (match_operand:SF 2 "memory_operand" ""))] (clobber (match_operand:SF 2 "memory_operand" ""))]
"TARGET_80387" "TARGET_80387 && reload_completed"
[(set (match_dup 0) (float_truncate:SF (match_dup 1)))] [(set (match_dup 2) (float_truncate:SF (match_dup 1)))
(set (match_dup 0) (match_dup 2))]
"") "")
(define_split (define_split
[(set (match_operand:SF 0 "register_operand" "") [(set (match_operand:SF 0 "memory_operand" "")
(float_truncate:SF (float_truncate:SF
(match_operand:XF 1 "register_operand" ""))) (match_operand:XF 1 "register_operand" "")))
(clobber (match_operand:SF 2 "memory_operand" ""))] (clobber (match_operand:SF 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387"
[(set (match_dup 2) (float_truncate:SF (match_dup 1))) [(set (match_dup 0) (float_truncate:SF (match_dup 1)))]
(set (match_dup 0) (match_dup 2))]
"") "")
;; Conversion from XFmode to DFmode.
(define_expand "truncxfdf2" (define_expand "truncxfdf2"
[(parallel [(set (match_operand:DF 0 "nonimmediate_operand" "") [(parallel [(set (match_operand:DF 0 "nonimmediate_operand" "")
(float_truncate:DF (float_truncate:DF
(match_operand:XF 1 "register_operand" ""))) (match_operand:XF 1 "register_operand" "")))
(clobber (match_dup 2))])] (clobber (match_dup 2))])]
"TARGET_80387" "TARGET_80387"
" {
if (flag_unsafe_math_optimizations) if (flag_unsafe_math_optimizations)
{ {
rtx reg = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (DFmode); rtx reg = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (DFmode);
emit_insn (gen_truncxfdf2_noop (reg, operands[1])); emit_insn (gen_truncxfdf2_i387_noop (reg, operands[1]));
if (reg != operands[0]) if (reg != operands[0])
emit_move_insn (operands[0], reg); emit_move_insn (operands[0], reg);
DONE; DONE;
} }
else else
operands[2] = assign_386_stack_local (DFmode, 0); operands[2] = assign_386_stack_local (DFmode, 0);
") })
(define_insn "truncxfdf2_noop" (define_insn "*truncxfdf2_mixed"
[(set (match_operand:DF 0 "nonimmediate_operand" "=m,?f#rY,?r#fY,?Y#rf")
(float_truncate:DF
(match_operand:XF 1 "register_operand" "f,f,f,f")))
(clobber (match_operand:DF 2 "memory_operand" "=X,m,m,m"))]
"TARGET_SSE2 && TARGET_MIX_SSE_I387"
{
switch (which_alternative)
{
case 0:
if (find_regno_note (insn, REG_DEAD, REGNO (operands[1])))
return "fstp%z0\t%y0";
else
return "fst%z0\t%y0";
default:
abort();
}
abort ();
}
[(set_attr "type" "fmov,multi,multi,multi")
(set_attr "mode" "DF")])
(define_insn "truncxfdf2_i387_noop"
[(set (match_operand:DF 0 "register_operand" "=f") [(set (match_operand:DF 0 "register_operand" "=f")
(float_truncate:DF (match_operand:XF 1 "register_operand" "f")))] (float_truncate:DF (match_operand:XF 1 "register_operand" "f")))]
"TARGET_80387 && flag_unsafe_math_optimizations" "TARGET_80387 && flag_unsafe_math_optimizations"
...@@ -3908,11 +3928,11 @@ ...@@ -3908,11 +3928,11 @@
[(set_attr "type" "fmov") [(set_attr "type" "fmov")
(set_attr "mode" "DF")]) (set_attr "mode" "DF")])
(define_insn "*truncxfdf2_1" (define_insn "*truncxfdf2_i387"
[(set (match_operand:DF 0 "nonimmediate_operand" "=m,?f#rY,?r#fY,?Y#rf") [(set (match_operand:DF 0 "nonimmediate_operand" "=m,?f#r,?r#f")
(float_truncate:DF (float_truncate:DF
(match_operand:XF 1 "register_operand" "f,f,f,f"))) (match_operand:XF 1 "register_operand" "f,f,f")))
(clobber (match_operand:DF 2 "memory_operand" "=X,m,m,m"))] (clobber (match_operand:DF 2 "memory_operand" "=X,m,m"))]
"TARGET_80387" "TARGET_80387"
{ {
switch (which_alternative) switch (which_alternative)
...@@ -3923,14 +3943,13 @@ ...@@ -3923,14 +3943,13 @@
else else
return "fst%z0\t%y0"; return "fst%z0\t%y0";
default: default:
abort();
}
abort (); abort ();
}
} }
[(set_attr "type" "fmov,multi,multi,multi") [(set_attr "type" "fmov,multi,multi")
(set_attr "mode" "DF")]) (set_attr "mode" "DF")])
(define_insn "*truncxfdf2_2" (define_insn "*truncxfdf2_i387_1"
[(set (match_operand:DF 0 "memory_operand" "=m") [(set (match_operand:DF 0 "memory_operand" "=m")
(float_truncate:DF (float_truncate:DF
(match_operand:XF 1 "register_operand" "f")))] (match_operand:XF 1 "register_operand" "f")))]
...@@ -3945,25 +3964,24 @@ ...@@ -3945,25 +3964,24 @@
(set_attr "mode" "DF")]) (set_attr "mode" "DF")])
(define_split (define_split
[(set (match_operand:DF 0 "memory_operand" "") [(set (match_operand:DF 0 "register_operand" "")
(float_truncate:DF (float_truncate:DF
(match_operand:XF 1 "register_operand" ""))) (match_operand:XF 1 "register_operand" "")))
(clobber (match_operand:DF 2 "memory_operand" ""))] (clobber (match_operand:DF 2 "memory_operand" ""))]
"TARGET_80387" "TARGET_80387 && reload_completed"
[(set (match_dup 0) (float_truncate:DF (match_dup 1)))] [(set (match_dup 2) (float_truncate:DF (match_dup 1)))
(set (match_dup 0) (match_dup 2))]
"") "")
(define_split (define_split
[(set (match_operand:DF 0 "register_operand" "") [(set (match_operand:DF 0 "memory_operand" "")
(float_truncate:DF (float_truncate:DF
(match_operand:XF 1 "register_operand" ""))) (match_operand:XF 1 "register_operand" "")))
(clobber (match_operand:DF 2 "memory_operand" ""))] (clobber (match_operand:DF 2 "memory_operand" ""))]
"TARGET_80387 && reload_completed" "TARGET_80387"
[(set (match_dup 2) (float_truncate:DF (match_dup 1))) [(set (match_dup 0) (float_truncate:DF (match_dup 1)))]
(set (match_dup 0) (match_dup 2))]
"") "")
;; %%% Break up all these bad boys. ;; %%% Break up all these bad boys.
;; Signed conversion to DImode. ;; Signed conversion to DImode.
...@@ -14746,7 +14764,7 @@ ...@@ -14746,7 +14764,7 @@
emit_insn (gen_fpremxf4 (op1, op2, op1, op2)); emit_insn (gen_fpremxf4 (op1, op2, op1, op2));
ix86_emit_fp_unordered_jump (label); ix86_emit_fp_unordered_jump (label);
emit_insn (gen_truncxfsf2_noop (operands[0], op1)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op1));
DONE; DONE;
}) })
...@@ -14770,7 +14788,7 @@ ...@@ -14770,7 +14788,7 @@
emit_insn (gen_fpremxf4 (op1, op2, op1, op2)); emit_insn (gen_fpremxf4 (op1, op2, op1, op2));
ix86_emit_fp_unordered_jump (label); ix86_emit_fp_unordered_jump (label);
emit_insn (gen_truncxfdf2_noop (operands[0], op1)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op1));
DONE; DONE;
}) })
...@@ -14829,7 +14847,7 @@ ...@@ -14829,7 +14847,7 @@
emit_insn (gen_fprem1xf4 (op1, op2, op1, op2)); emit_insn (gen_fprem1xf4 (op1, op2, op1, op2));
ix86_emit_fp_unordered_jump (label); ix86_emit_fp_unordered_jump (label);
emit_insn (gen_truncxfsf2_noop (operands[0], op1)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op1));
DONE; DONE;
}) })
...@@ -14853,7 +14871,7 @@ ...@@ -14853,7 +14871,7 @@
emit_insn (gen_fprem1xf4 (op1, op2, op1, op2)); emit_insn (gen_fprem1xf4 (op1, op2, op1, op2));
ix86_emit_fp_unordered_jump (label); ix86_emit_fp_unordered_jump (label);
emit_insn (gen_truncxfdf2_noop (operands[0], op1)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op1));
DONE; DONE;
}) })
...@@ -15679,7 +15697,7 @@ ...@@ -15679,7 +15697,7 @@
emit_insn (gen_extendsfxf2 (op1, operands[1])); emit_insn (gen_extendsfxf2 (op1, operands[1]));
ix86_emit_i387_log1p (op0, op1); ix86_emit_i387_log1p (op0, op1);
emit_insn (gen_truncxfsf2_noop (operands[0], op0)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
...@@ -15694,7 +15712,7 @@ ...@@ -15694,7 +15712,7 @@
emit_insn (gen_extenddfxf2 (op1, operands[1])); emit_insn (gen_extenddfxf2 (op1, operands[1]));
ix86_emit_i387_log1p (op0, op1); ix86_emit_i387_log1p (op0, op1);
emit_insn (gen_truncxfdf2_noop (operands[0], op0)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
...@@ -16175,7 +16193,7 @@ ...@@ -16175,7 +16193,7 @@
emit_insn (gen_extenddfxf2 (op1, operands[1])); emit_insn (gen_extenddfxf2 (op1, operands[1]));
emit_insn (gen_frndintxf2 (op0, op1)); emit_insn (gen_frndintxf2 (op0, op1));
emit_insn (gen_truncxfdf2_noop (operands[0], op0)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
...@@ -16191,7 +16209,7 @@ ...@@ -16191,7 +16209,7 @@
emit_insn (gen_extendsfxf2 (op1, operands[1])); emit_insn (gen_extendsfxf2 (op1, operands[1]));
emit_insn (gen_frndintxf2 (op0, op1)); emit_insn (gen_frndintxf2 (op0, op1));
emit_insn (gen_truncxfsf2_noop (operands[0], op0)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
...@@ -16234,7 +16252,7 @@ ...@@ -16234,7 +16252,7 @@
emit_insn (gen_extenddfxf2 (op1, operands[1])); emit_insn (gen_extenddfxf2 (op1, operands[1]));
emit_insn (gen_frndintxf2_floor (op0, op1, op2, op3)); emit_insn (gen_frndintxf2_floor (op0, op1, op2, op3));
emit_insn (gen_truncxfdf2_noop (operands[0], op0)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
...@@ -16254,7 +16272,7 @@ ...@@ -16254,7 +16272,7 @@
emit_insn (gen_extendsfxf2 (op1, operands[1])); emit_insn (gen_extendsfxf2 (op1, operands[1]));
emit_insn (gen_frndintxf2_floor (op0, op1, op2, op3)); emit_insn (gen_frndintxf2_floor (op0, op1, op2, op3));
emit_insn (gen_truncxfsf2_noop (operands[0], op0)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
...@@ -16302,7 +16320,7 @@ ...@@ -16302,7 +16320,7 @@
emit_insn (gen_extenddfxf2 (op1, operands[1])); emit_insn (gen_extenddfxf2 (op1, operands[1]));
emit_insn (gen_frndintxf2_ceil (op0, op1, op2, op3)); emit_insn (gen_frndintxf2_ceil (op0, op1, op2, op3));
emit_insn (gen_truncxfdf2_noop (operands[0], op0)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
...@@ -16322,7 +16340,7 @@ ...@@ -16322,7 +16340,7 @@
emit_insn (gen_extendsfxf2 (op1, operands[1])); emit_insn (gen_extendsfxf2 (op1, operands[1]));
emit_insn (gen_frndintxf2_ceil (op0, op1, op2, op3)); emit_insn (gen_frndintxf2_ceil (op0, op1, op2, op3));
emit_insn (gen_truncxfsf2_noop (operands[0], op0)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
...@@ -16370,7 +16388,7 @@ ...@@ -16370,7 +16388,7 @@
emit_insn (gen_extenddfxf2 (op1, operands[1])); emit_insn (gen_extenddfxf2 (op1, operands[1]));
emit_insn (gen_frndintxf2_trunc (op0, op1, op2, op3)); emit_insn (gen_frndintxf2_trunc (op0, op1, op2, op3));
emit_insn (gen_truncxfdf2_noop (operands[0], op0)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
...@@ -16390,7 +16408,7 @@ ...@@ -16390,7 +16408,7 @@
emit_insn (gen_extendsfxf2 (op1, operands[1])); emit_insn (gen_extendsfxf2 (op1, operands[1]));
emit_insn (gen_frndintxf2_trunc (op0, op1, op2, op3)); emit_insn (gen_frndintxf2_trunc (op0, op1, op2, op3));
emit_insn (gen_truncxfsf2_noop (operands[0], op0)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
...@@ -16438,7 +16456,7 @@ ...@@ -16438,7 +16456,7 @@
emit_insn (gen_extenddfxf2 (op1, operands[1])); emit_insn (gen_extenddfxf2 (op1, operands[1]));
emit_insn (gen_frndintxf2_mask_pm (op0, op1, op2, op3)); emit_insn (gen_frndintxf2_mask_pm (op0, op1, op2, op3));
emit_insn (gen_truncxfdf2_noop (operands[0], op0)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
...@@ -16458,7 +16476,7 @@ ...@@ -16458,7 +16476,7 @@
emit_insn (gen_extendsfxf2 (op1, operands[1])); emit_insn (gen_extendsfxf2 (op1, operands[1]));
emit_insn (gen_frndintxf2_mask_pm (op0, op1, op2, op3)); emit_insn (gen_frndintxf2_mask_pm (op0, op1, op2, op3));
emit_insn (gen_truncxfsf2_noop (operands[0], op0)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0));
DONE; DONE;
}) })
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment