spu.md (divdf3): Removed.
2008-09-02 Victor Kaplansky <victork@il.ibm.com> * gcc/config/spu/spu.md (divdf3): Removed. Testsuite Changelog: * gcc.dg/fastmath-2.c: New. From-SVN: r139888
This commit is contained in:
parent
1aeaf0f764
commit
f6d5e84ac3
4 changed files with 27 additions and 52 deletions
|
@ -1,3 +1,8 @@
|
|||
2008-09-02 Victor Kaplansky <victork@il.ibm.com>
|
||||
|
||||
* gcc/config/spu/spu.md (divdf3): Removed.
|
||||
|
||||
|
||||
2008-09-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/37095
|
||||
|
|
|
@ -1864,58 +1864,6 @@
|
|||
DONE;
|
||||
})
|
||||
|
||||
;; Taken from STI's gcc
|
||||
;; Does not correctly handle INF or NAN.
|
||||
(define_expand "divdf3"
|
||||
[(set (match_operand:DF 0 "register_operand" "=r")
|
||||
(div:DF (match_operand:DF 1 "register_operand" "r")
|
||||
(match_operand:DF 2 "register_operand" "r")))]
|
||||
"flag_finite_math_only"
|
||||
"{
|
||||
/*
|
||||
double
|
||||
divdf3 (double x, double y)
|
||||
{
|
||||
float x0;
|
||||
float y_f = (float) y;
|
||||
double x1, x2;
|
||||
|
||||
x0 = spu_extract(spu_re(spu_promote(y_f, 0)), 0);
|
||||
x1 = (double)(x0 * (2.0f - y_f * x0));
|
||||
x2 = x1 * (2.0 - y * x1);
|
||||
return (x * x2 * (2.0 - y * x2));
|
||||
}
|
||||
*/
|
||||
|
||||
rtx dst = operands[0];
|
||||
rtx x = operands[1];
|
||||
rtx y = operands[2];
|
||||
rtx y_f = gen_reg_rtx(SFmode);
|
||||
rtx x0_f = gen_reg_rtx(SFmode);
|
||||
rtx x1_f = gen_reg_rtx(SFmode);
|
||||
rtx x1 = gen_reg_rtx(DFmode);
|
||||
rtx x2 = gen_reg_rtx(DFmode);
|
||||
rtx t1_f = gen_reg_rtx(SFmode);
|
||||
rtx t1 = gen_reg_rtx(DFmode);
|
||||
rtx two = gen_reg_rtx(DFmode);
|
||||
rtx two_f = gen_reg_rtx(SFmode);
|
||||
|
||||
emit_insn (gen_truncdfsf2 (y_f, y));
|
||||
emit_insn (gen_frest_sf (x0_f, y_f));
|
||||
emit_insn (gen_fi_sf (x0_f, y_f, x0_f));
|
||||
emit_insn (gen_movsf (two_f, spu_float_const(\"2.0\",SFmode)));
|
||||
emit_insn (gen_fnms_sf (t1_f, y_f, x0_f, two_f));
|
||||
emit_insn (gen_mulsf3 (x1_f, t1_f, x0_f));
|
||||
emit_insn (gen_extendsfdf2 (x1, x1_f));
|
||||
emit_insn (gen_extendsfdf2 (two, two_f));
|
||||
emit_insn (gen_movdf (t1, two));
|
||||
emit_insn (gen_fnms_df (t1, y, x1, t1));
|
||||
emit_insn (gen_muldf3 (x2, x1, t1));
|
||||
emit_insn (gen_fnms_df (two, y, x2, two));
|
||||
emit_insn (gen_muldf3 (dst, x2, two));
|
||||
emit_insn (gen_muldf3 (dst, dst, x));
|
||||
DONE;
|
||||
}")
|
||||
|
||||
;; sqrt
|
||||
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2008-09-02 Victor Kaplansky <victork@il.ibm.com>
|
||||
|
||||
* gcc.dg/fastmath-2.c: New.
|
||||
|
||||
2008-09-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/37095
|
||||
|
|
18
gcc/testsuite/gcc.dg/fastmath-2.c
Normal file
18
gcc/testsuite/gcc.dg/fastmath-2.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -ffast-math" } */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
volatile double a = 2.002083e-146;
|
||||
double b;
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
b = 1. / a;
|
||||
|
||||
if (b != (1. / 2.002083e-146))
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue