aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/spu/spu.md52
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/fastmath-2.c18
4 files changed, 27 insertions, 52 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f873898..039edb6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/spu/spu.md b/gcc/config/spu/spu.md
index 89f2109..7b4b743 100644
--- a/gcc/config/spu/spu.md
+++ b/gcc/config/spu/spu.md
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2b4495c..304e76c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gcc.dg/fastmath-2.c b/gcc/testsuite/gcc.dg/fastmath-2.c
new file mode 100644
index 0000000..2003cf9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/fastmath-2.c
@@ -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;
+}
+