mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 15:41:09 +08:00
reg-stack.c (get_true_reg): Handle FLOAT_TRUNCATE like FLOAT_EXTEND if flag_unsafe_math_optimizations.
* reg-stack.c (get_true_reg): Handle FLOAT_TRUNCATE like FLOAT_EXTEND if flag_unsafe_math_optimizations. * config/i386/i386.md (truncdfsf2): If flag_unsafe_math_optimizations and TARGET_80387 expand using truncdfsf2_noop pattern. (truncxfsf2): Likewise using truncxfsf2_noop. (truncxfdf2): Likewise using truncxfdf2_noop. (truncdfsf2_noop, truncxfsf2_noop, truncxfdf2_noop): New patterns. From-SVN: r79893
This commit is contained in:
parent
cbfd7e06e5
commit
0c5faf294f
@ -1,3 +1,13 @@
|
||||
2004-03-23 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* reg-stack.c (get_true_reg): Handle FLOAT_TRUNCATE like FLOAT_EXTEND
|
||||
if flag_unsafe_math_optimizations.
|
||||
* config/i386/i386.md (truncdfsf2): If flag_unsafe_math_optimizations
|
||||
and TARGET_80387 expand using truncdfsf2_noop pattern.
|
||||
(truncxfsf2): Likewise using truncxfsf2_noop.
|
||||
(truncxfdf2): Likewise using truncxfdf2_noop.
|
||||
(truncdfsf2_noop, truncxfsf2_noop, truncxfdf2_noop): New patterns.
|
||||
|
||||
2004-03-23 Ziemowit Laski <zlaski@apple.com>
|
||||
|
||||
* hooks.c (hook_constcharptr_tree_null): New hook.
|
||||
|
@ -3653,15 +3653,29 @@
|
||||
(clobber (match_dup 2))])]
|
||||
"TARGET_80387 || TARGET_SSE2"
|
||||
"
|
||||
if (TARGET_80387)
|
||||
operands[2] = assign_386_stack_local (SFmode, 0);
|
||||
else
|
||||
if (!TARGET_80387)
|
||||
{
|
||||
emit_insn (gen_truncdfsf2_sse_only (operands[0], operands[1]));
|
||||
DONE;
|
||||
}
|
||||
else if (flag_unsafe_math_optimizations)
|
||||
{
|
||||
rtx reg = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (SFmode);
|
||||
emit_insn (gen_truncdfsf2_noop (reg, operands[1]));
|
||||
if (reg != operands[0])
|
||||
emit_move_insn (operands[0], reg);
|
||||
DONE;
|
||||
}
|
||||
else
|
||||
operands[2] = assign_386_stack_local (SFmode, 0);
|
||||
")
|
||||
|
||||
(define_insn "truncdfsf2_noop"
|
||||
[(set (match_operand:SF 0 "register_operand" "=f")
|
||||
(float_truncate:SF (match_operand:DF 1 "register_operand" "f")))]
|
||||
"TARGET_80387 && flag_unsafe_math_optimizations"
|
||||
"#")
|
||||
|
||||
(define_insn "*truncdfsf2_1"
|
||||
[(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f#rx,?r#fx,?x#rf")
|
||||
(float_truncate:SF
|
||||
@ -3886,7 +3900,24 @@
|
||||
(match_operand:XF 1 "register_operand" "")))
|
||||
(clobber (match_dup 2))])]
|
||||
"TARGET_80387"
|
||||
"operands[2] = assign_386_stack_local (SFmode, 0);")
|
||||
"
|
||||
if (flag_unsafe_math_optimizations)
|
||||
{
|
||||
rtx reg = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (SFmode);
|
||||
emit_insn (gen_truncxfsf2_noop (reg, operands[1]));
|
||||
if (reg != operands[0])
|
||||
emit_move_insn (operands[0], reg);
|
||||
DONE;
|
||||
}
|
||||
else
|
||||
operands[2] = assign_386_stack_local (SFmode, 0);
|
||||
")
|
||||
|
||||
(define_insn "truncxfsf2_noop"
|
||||
[(set (match_operand:SF 0 "register_operand" "=f")
|
||||
(float_truncate:SF (match_operand:XF 1 "register_operand" "f")))]
|
||||
"TARGET_80387 && flag_unsafe_math_optimizations"
|
||||
"#")
|
||||
|
||||
(define_insn "*truncxfsf2_1"
|
||||
[(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f#rx,?r#fx,?x#rf")
|
||||
@ -3948,7 +3979,24 @@
|
||||
(match_operand:XF 1 "register_operand" "")))
|
||||
(clobber (match_dup 2))])]
|
||||
"TARGET_80387"
|
||||
"operands[2] = assign_386_stack_local (DFmode, 0);")
|
||||
"
|
||||
if (flag_unsafe_math_optimizations)
|
||||
{
|
||||
rtx reg = REG_P (operands[0]) ? operands[0] : gen_reg_rtx (DFmode);
|
||||
emit_insn (gen_truncxfdf2_noop (reg, operands[1]));
|
||||
if (reg != operands[0])
|
||||
emit_move_insn (operands[0], reg);
|
||||
DONE;
|
||||
}
|
||||
else
|
||||
operands[2] = assign_386_stack_local (DFmode, 0);
|
||||
")
|
||||
|
||||
(define_insn "truncxfdf2_noop"
|
||||
[(set (match_operand:DF 0 "register_operand" "=f")
|
||||
(float_truncate:DF (match_operand:XF 1 "register_operand" "f")))]
|
||||
"TARGET_80387 && flag_unsafe_math_optimizations"
|
||||
"#")
|
||||
|
||||
(define_insn "*truncxfdf2_1"
|
||||
[(set (match_operand:DF 0 "nonimmediate_operand" "=m,?f#rY,?r#fY,?Y#rf")
|
||||
|
@ -574,6 +574,13 @@ get_true_reg (rtx *pat)
|
||||
case FIX:
|
||||
case FLOAT_EXTEND:
|
||||
pat = & XEXP (*pat, 0);
|
||||
break;
|
||||
|
||||
case FLOAT_TRUNCATE:
|
||||
if (!flag_unsafe_math_optimizations)
|
||||
return pat;
|
||||
pat = & XEXP (*pat, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user