From 6a3d1d4957e60027cf5ab581bf260f50441cdd52 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Fri, 4 Jan 2008 10:26:41 +0000 Subject: [PATCH] mips.md (sqrt_condition): Tweak comment. gcc/ * config/mips/mips.md (sqrt_condition): Tweak comment. (recip_condition): Likewise. Require TARGET_FLOAT64 for DFmode. gcc/testsuite/ * gcc.target/mips/rsqrt-1.c: Require -mgp64. * gcc.target/mips/rsqrt-2.c: Likewise. * gcc.target/mips/rsqrt-4.c: New test. From-SVN: r131318 --- gcc/ChangeLog | 5 +++++ gcc/config/mips/mips.md | 13 +++++++++---- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.target/mips/rsqrt-1.c | 2 +- gcc/testsuite/gcc.target/mips/rsqrt-2.c | 2 +- gcc/testsuite/gcc.target/mips/rsqrt-4.c | 27 +++++++++++++++++++++++++++ 6 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.target/mips/rsqrt-4.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8a7ae195fe3..6dd3f159150 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-01-04 Richard Sandiford + + * config/mips/mips.md (sqrt_condition): Tweak comment. + (recip_condition): Likewise. Require TARGET_FLOAT64 for DFmode. + 2008-01-03 Tom Tromey PR c/34457: diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index b32ed33b93c..864013a01bf 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -583,14 +583,19 @@ [DF (SF "!TARGET_FIX_SB1 || flag_unsafe_math_optimizations") (V2SF "TARGET_SB1 && (!TARGET_FIX_SB1 || flag_unsafe_math_optimizations)")]) -; This attribute gives the condition for which sqrt instructions exist. +;; This attribute gives the conditions under which SQRT.fmt instructions +;; can be used. (define_mode_attr sqrt_condition [(SF "!ISA_MIPS1") (DF "!ISA_MIPS1") (V2SF "TARGET_SB1")]) -; This attribute gives the condition for which recip and rsqrt instructions -; exist. +;; This attribute gives the conditions under which RECIP.fmt and RSQRT.fmt +;; instructions can be used. The MIPS32 and MIPS64 ISAs say that RECIP.D +;; and RSQRT.D are unpredictable when doubles are stored in pairs of FPRs, +;; so for safety's sake, we apply this restriction to all targets. (define_mode_attr recip_condition - [(SF "ISA_HAS_FP4") (DF "ISA_HAS_FP4") (V2SF "TARGET_SB1")]) + [(SF "ISA_HAS_FP4") + (DF "ISA_HAS_FP4 && TARGET_FLOAT64") + (V2SF "TARGET_SB1")]) ;; This code iterator allows all branch instructions to be generated from ;; a single define_expand template. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dd642369405..c027dbae2f8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-01-04 Richard Sandiford + + * gcc.target/mips/rsqrt-1.c: Require -mgp64. + * gcc.target/mips/rsqrt-2.c: Likewise. + * gcc.target/mips/rsqrt-4.c: New test. + 2008-01-04 Tobias Burnus PR fortran/34557 diff --git a/gcc/testsuite/gcc.target/mips/rsqrt-1.c b/gcc/testsuite/gcc.target/mips/rsqrt-1.c index 885deeff28f..4cc6212c351 100644 --- a/gcc/testsuite/gcc.target/mips/rsqrt-1.c +++ b/gcc/testsuite/gcc.target/mips/rsqrt-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-mips-options "-O2 -ffast-math -mips4 -mhard-float" } */ +/* { dg-mips-options "-O2 -ffast-math -mips4 -mhard-float -mgp64" } */ /* { dg-final { scan-assembler "rsqrt.d" } } */ /* { dg-final { scan-assembler "rsqrt.s" } } */ diff --git a/gcc/testsuite/gcc.target/mips/rsqrt-2.c b/gcc/testsuite/gcc.target/mips/rsqrt-2.c index d3e7aa323a7..03a001356f0 100644 --- a/gcc/testsuite/gcc.target/mips/rsqrt-2.c +++ b/gcc/testsuite/gcc.target/mips/rsqrt-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-mips-options "-O2 -ffast-math -mips4 -mhard-float" } */ +/* { dg-mips-options "-O2 -ffast-math -mips4 -mhard-float -mgp64" } */ /* { dg-final { scan-assembler "rsqrt.d" } } */ /* { dg-final { scan-assembler "rsqrt.s" } } */ diff --git a/gcc/testsuite/gcc.target/mips/rsqrt-4.c b/gcc/testsuite/gcc.target/mips/rsqrt-4.c new file mode 100644 index 00000000000..7f7da6452ed --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/rsqrt-4.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-mips-options "-O2 -ffast-math -mips64 -mhard-float -mgp32" } */ +/* { dg-final { scan-assembler-not "\trsqrt.d\t" } } */ +/* { dg-final { scan-assembler-times "\trsqrt.s\t" 2 } } */ + +extern double sqrt(double); +extern float sqrtf(float); + +NOMIPS16 double f1 (double x) +{ + return 1.0 / sqrt (x); +} + +NOMIPS16 double f2 (double x) +{ + return sqrt (1.0 / x); +} + +NOMIPS16 float f3 (float x) +{ + return 1.0f / sqrtf (x); +} + +NOMIPS16 float f4 (float x) +{ + return sqrtf (1.0f / x); +} -- 2.11.4.GIT