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
This commit is contained in:
Richard Sandiford 2008-01-04 10:26:41 +00:00 committed by Richard Sandiford
parent 3c7215130f
commit 6a3d1d4957
6 changed files with 49 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2008-01-04 Richard Sandiford <rsandifo@nildram.co.uk>
* config/mips/mips.md (sqrt_condition): Tweak comment.
(recip_condition): Likewise. Require TARGET_FLOAT64 for DFmode.
2008-01-03 Tom Tromey <tromey@redhat.com>
PR c/34457:

View File

@ -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.

View File

@ -1,3 +1,9 @@
2008-01-04 Richard Sandiford <rsandifo@nildram.co.uk>
* 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 <burnus@net-b.de>
PR fortran/34557

View File

@ -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" } } */

View File

@ -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" } } */

View File

@ -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);
}