SPU single-precision FP does not support subnormals:
* gcc.c-torture/execute/ieee/mul-subnormal-single-1.x: New file. SPU single-precision FP does not support Inf or Nan: * gcc.c-torture/execute/ieee/inf-1.c: Disable "float" Inf test on SPU. * gcc.c-torture/execute/ieee/compare-fp-1.x: New file. * gcc.c-torture/execute/ieee/compare-fp-4.x: Disable test on SPU. * gcc.c-torture/execute/ieee/fp-cmp-2.x: Disable test on SPU. * gcc.c-torture/execute/ieee/fp-cmp-4f.x: New file. * gcc.c-torture/execute/ieee/fp-cmp-8f.x: New file. * gcc.dg/pr15784-3.c: Disable test on SPU. * gcc.dg/pr28796-2.c: Likewise. * gcc.dg/float-range-1.c: Likewise. * gcc.dg/float-range-3.c: Likewise. * gcc.dg/float-range-4.c: Likewise. * gcc.dg/float-range-5.c: Likewise. * gcc.dg/fold-overflow-1.c: Likewise. * gcc.dg/builtins-1.c: SPU does not support __builtin_inff. * gcc.dg/builtin-inf-1.c: SPU does not support __builtin_inff. Check for error instead of warning "does not support infinity". * gcc.dg/builtins-43.c: Disable "float" Inf/Nan tests on SPU. * gcc.dg/builtins-44.c: Likewise. * gcc.dg/builtins-45.c: Likewise. * gcc.dg/torture/builtin-math-2.c: Likewise. * gcc.dg/torture/builtin-logb-1.c: Likewise. * gcc.dg/torture/builtin-modf-1.c: Likewise. * gcc.dg/torture/builtin-ldexp-1.c: Likewise. * gcc.dg/torture/builtin-frexp-1.c: Likewise. * gcc.dg/torture/type-generic-1.c: Disable test on SPU. * g++.dg/torture/type-generic-1.C: Likewise. SPU single-precision FP always rounds towards zero: * gcc.c-torture/execute/ieee/920518-1.x: New file. * gcc.c-torture/execute/ieee/20010114-2.x: New file. * gcc.c-torture/execute/ieee/20030331-1.x: New file. * gcc.dg/torture/fp-int-convert-float.c: Disable test on SPU. * gcc.dg/torture/fp-int-convert-timode.c: Disable "float" test on SPU. From-SVN: r137357
This commit is contained in:
parent
04f2b60625
commit
8f9ddf6acf
32 changed files with 246 additions and 7 deletions
|
@ -1,3 +1,43 @@
|
|||
2008-07-02 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
|
||||
|
||||
SPU single-precision FP does not support subnormals:
|
||||
* gcc.c-torture/execute/ieee/mul-subnormal-single-1.x: New file.
|
||||
|
||||
SPU single-precision FP does not support Inf or Nan:
|
||||
* gcc.c-torture/execute/ieee/inf-1.c: Disable "float" Inf test on SPU.
|
||||
* gcc.c-torture/execute/ieee/compare-fp-1.x: New file.
|
||||
* gcc.c-torture/execute/ieee/compare-fp-4.x: Disable test on SPU.
|
||||
* gcc.c-torture/execute/ieee/fp-cmp-2.x: Disable test on SPU.
|
||||
* gcc.c-torture/execute/ieee/fp-cmp-4f.x: New file.
|
||||
* gcc.c-torture/execute/ieee/fp-cmp-8f.x: New file.
|
||||
* gcc.dg/pr15784-3.c: Disable test on SPU.
|
||||
* gcc.dg/pr28796-2.c: Likewise.
|
||||
* gcc.dg/float-range-1.c: Likewise.
|
||||
* gcc.dg/float-range-3.c: Likewise.
|
||||
* gcc.dg/float-range-4.c: Likewise.
|
||||
* gcc.dg/float-range-5.c: Likewise.
|
||||
* gcc.dg/fold-overflow-1.c: Likewise.
|
||||
* gcc.dg/builtins-1.c: SPU does not support __builtin_inff.
|
||||
* gcc.dg/builtin-inf-1.c: SPU does not support __builtin_inff.
|
||||
Check for error instead of warning "does not support infinity".
|
||||
* gcc.dg/builtins-43.c: Disable "float" Inf/Nan tests on SPU.
|
||||
* gcc.dg/builtins-44.c: Likewise.
|
||||
* gcc.dg/builtins-45.c: Likewise.
|
||||
* gcc.dg/torture/builtin-math-2.c: Likewise.
|
||||
* gcc.dg/torture/builtin-logb-1.c: Likewise.
|
||||
* gcc.dg/torture/builtin-modf-1.c: Likewise.
|
||||
* gcc.dg/torture/builtin-ldexp-1.c: Likewise.
|
||||
* gcc.dg/torture/builtin-frexp-1.c: Likewise.
|
||||
* gcc.dg/torture/type-generic-1.c: Disable test on SPU.
|
||||
* g++.dg/torture/type-generic-1.C: Likewise.
|
||||
|
||||
SPU single-precision FP always rounds towards zero:
|
||||
* gcc.c-torture/execute/ieee/920518-1.x: New file.
|
||||
* gcc.c-torture/execute/ieee/20010114-2.x: New file.
|
||||
* gcc.c-torture/execute/ieee/20030331-1.x: New file.
|
||||
* gcc.dg/torture/fp-int-convert-float.c: Disable test on SPU.
|
||||
* gcc.dg/torture/fp-int-convert-timode.c: Disable "float" test on SPU.
|
||||
|
||||
2008-07-02 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/36590
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-mieee" { target sh*-*-* } } */
|
||||
/* { dg-skip-if "No Inf/NaN support" { spu-*-* } } */
|
||||
|
||||
#include "../../gcc.dg/tg-tests.h"
|
||||
|
||||
|
|
6
gcc/testsuite/gcc.c-torture/execute/ieee/20010114-2.x
Normal file
6
gcc/testsuite/gcc.c-torture/execute/ieee/20010114-2.x
Normal file
|
@ -0,0 +1,6 @@
|
|||
if [istarget "spu-*-*"] {
|
||||
# This doesn't work on the SPU because single precision floats are
|
||||
# always rounded toward 0.
|
||||
return 1
|
||||
}
|
||||
return 0
|
6
gcc/testsuite/gcc.c-torture/execute/ieee/20030331-1.x
Normal file
6
gcc/testsuite/gcc.c-torture/execute/ieee/20030331-1.x
Normal file
|
@ -0,0 +1,6 @@
|
|||
if [istarget "spu-*-*"] {
|
||||
# This doesn't work on the SPU because single precision floats are
|
||||
# always rounded toward 0.
|
||||
return 1
|
||||
}
|
||||
return 0
|
6
gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.x
Normal file
6
gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.x
Normal file
|
@ -0,0 +1,6 @@
|
|||
if [istarget "spu-*-*"] {
|
||||
# This doesn't work on the SPU because single precision floats are
|
||||
# always rounded toward 0.
|
||||
return 1
|
||||
}
|
||||
return 0
|
6
gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-1.x
Normal file
6
gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-1.x
Normal file
|
@ -0,0 +1,6 @@
|
|||
if [istarget "spu-*-*"] {
|
||||
# The SPU single-precision floating point format does not
|
||||
# support Nan & Inf.
|
||||
return 1
|
||||
}
|
||||
return 0
|
|
@ -13,5 +13,11 @@ if [istarget "arm*-*-vxworks*"] {
|
|||
}
|
||||
}
|
||||
|
||||
if [istarget "spu-*-*"] {
|
||||
# The SPU single-precision floating point format does not
|
||||
# support Nan & Inf.
|
||||
return 1
|
||||
}
|
||||
|
||||
lappend additional_flags "-fno-trapping-math"
|
||||
return 0
|
||||
|
|
|
@ -13,4 +13,10 @@ if [istarget "arm*-*-vxworks*"] {
|
|||
}
|
||||
}
|
||||
|
||||
if [istarget "spu-*-*"] {
|
||||
# The SPU single-precision floating point format does not
|
||||
# support Nan & Inf.
|
||||
return 1
|
||||
}
|
||||
|
||||
return 0
|
||||
|
|
6
gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4f.x
Normal file
6
gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4f.x
Normal file
|
@ -0,0 +1,6 @@
|
|||
if [istarget "spu-*-*"] {
|
||||
# The SPU single-precision floating point format does not
|
||||
# support Nan & Inf.
|
||||
return 1
|
||||
}
|
||||
return 0
|
6
gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8f.x
Normal file
6
gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8f.x
Normal file
|
@ -0,0 +1,6 @@
|
|||
if [istarget "spu-*-*"] {
|
||||
# The SPU single-precision floating point format does not
|
||||
# support Nan & Inf.
|
||||
return 1
|
||||
}
|
||||
return 0
|
|
@ -2,7 +2,10 @@ extern void abort (void);
|
|||
|
||||
int main()
|
||||
{
|
||||
#ifndef __SPU__
|
||||
/* The SPU single-precision floating point format does not support Inf. */
|
||||
float fi = __builtin_inff();
|
||||
#endif
|
||||
double di = __builtin_inf();
|
||||
long double li = __builtin_infl();
|
||||
|
||||
|
@ -10,22 +13,28 @@ int main()
|
|||
double dh = __builtin_huge_val();
|
||||
long double lh = __builtin_huge_vall();
|
||||
|
||||
#ifndef __SPU__
|
||||
if (fi + fi != fi)
|
||||
abort ();
|
||||
#endif
|
||||
if (di + di != di)
|
||||
abort ();
|
||||
if (li + li != li)
|
||||
abort ();
|
||||
|
||||
#ifndef __SPU__
|
||||
if (fi != fh)
|
||||
abort ();
|
||||
#endif
|
||||
if (di != dh)
|
||||
abort ();
|
||||
if (li != lh)
|
||||
abort ();
|
||||
|
||||
#ifndef __SPU__
|
||||
if (fi <= 0)
|
||||
abort ();
|
||||
#endif
|
||||
if (di <= 0)
|
||||
abort ();
|
||||
if (li <= 0)
|
||||
|
|
|
@ -8,4 +8,9 @@ if {[istarget "m68k-*-*"] && [check_effective_target_coldfire_fpu]} {
|
|||
# not aware of any system that has this.
|
||||
set torture_execute_xfail "m68k-*-*"
|
||||
}
|
||||
if [istarget "spu-*-*"] {
|
||||
# The SPU single-precision floating point format does not
|
||||
# support subnormals.
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
|
|
|
@ -8,6 +8,6 @@ float fh = __builtin_huge_valf();
|
|||
double dh = __builtin_huge_val();
|
||||
long double lh = __builtin_huge_vall();
|
||||
|
||||
/* { dg-warning "does not support infinity" "INF unsupported" { target vax-*-* } 3 } */
|
||||
/* { dg-warning "does not support infinity" "INF unsupported" { target vax-*-* } 4 } */
|
||||
/* { dg-warning "does not support infinity" "INF unsupported" { target vax-*-* } 5 } */
|
||||
/* { dg-error "does not support infinity" "INF unsupported" { target vax-*-* spu-*-* } 3 } */
|
||||
/* { dg-error "does not support infinity" "INF unsupported" { target vax-*-* } 4 } */
|
||||
/* { dg-error "does not support infinity" "INF unsupported" { target vax-*-* } 5 } */
|
||||
|
|
|
@ -144,7 +144,7 @@ FPTEST2ARG2_REENT (gamma, int *) /* gamma_r */
|
|||
FPTEST0 (huge_val)
|
||||
FPTEST2 (hypot)
|
||||
FPTEST1 (ilogb)
|
||||
FPTEST0 (inf)
|
||||
FPTEST0 (inf) /* { dg-warning "target format does not support infinity" "inf" {target spu-*-*} } */
|
||||
FPTEST1 (j0)
|
||||
FPTEST1 (j1)
|
||||
FPTEST2ARG1 (jn, int)
|
||||
|
|
|
@ -12,15 +12,20 @@ int
|
|||
main ()
|
||||
{
|
||||
double nan = __builtin_nan ("");
|
||||
#ifndef __SPU__
|
||||
/* The SPU single-precision floating point format does not support NANs. */
|
||||
float nanf = __builtin_nanf ("");
|
||||
#endif
|
||||
long double nanl = __builtin_nanl ("");
|
||||
|
||||
if (!__builtin_isnan (nan))
|
||||
link_error ();
|
||||
#ifndef __SPU__
|
||||
if (!__builtin_isnan (nanf))
|
||||
link_error ();
|
||||
if (!__builtin_isnanf (nanf))
|
||||
link_error ();
|
||||
#endif
|
||||
if (!__builtin_isnan (nanl))
|
||||
link_error ();
|
||||
if (!__builtin_isnanl (nanl))
|
||||
|
|
|
@ -12,15 +12,20 @@ int
|
|||
main ()
|
||||
{
|
||||
double pinf = __builtin_inf ();
|
||||
#ifndef __SPU__
|
||||
/* The SPU single-precision floating point format does not support Inf. */
|
||||
float pinff = __builtin_inff ();
|
||||
#endif
|
||||
long double pinfl = __builtin_infl ();
|
||||
|
||||
if (__builtin_isinf (pinf) != 1)
|
||||
link_error ();
|
||||
#ifndef __SPU__
|
||||
if (__builtin_isinf (pinff) != 1)
|
||||
link_error ();
|
||||
if (__builtin_isinff (pinff) != 1)
|
||||
link_error ();
|
||||
#endif
|
||||
if (__builtin_isinf (pinfl) != 1)
|
||||
link_error ();
|
||||
if (__builtin_isinfl (pinfl) != 1)
|
||||
|
@ -28,10 +33,12 @@ main ()
|
|||
|
||||
if (__builtin_isinf (-pinf) != -1)
|
||||
link_error ();
|
||||
#ifndef __SPU__
|
||||
if (__builtin_isinf (-pinff) != -1)
|
||||
link_error ();
|
||||
if (__builtin_isinff (-pinff) != -1)
|
||||
link_error ();
|
||||
#endif
|
||||
if (__builtin_isinf (-pinfl) != -1)
|
||||
link_error ();
|
||||
if (__builtin_isinfl (-pinfl) != -1)
|
||||
|
|
|
@ -12,24 +12,34 @@ int
|
|||
main ()
|
||||
{
|
||||
double nan = __builtin_nan ("");
|
||||
#ifndef __SPU__
|
||||
/* The SPU single-precision floating point format does not support NANs. */
|
||||
float nanf = __builtin_nanf ("");
|
||||
#endif
|
||||
long double nanl = __builtin_nanl ("");
|
||||
|
||||
double pinf = __builtin_inf ();
|
||||
#ifndef __SPU__
|
||||
/* The SPU single-precision floating point format does not support Inf. */
|
||||
float pinff = __builtin_inff ();
|
||||
#endif
|
||||
long double pinfl = __builtin_infl ();
|
||||
|
||||
if (__builtin_finite (pinf))
|
||||
link_error ();
|
||||
#ifndef __SPU__
|
||||
if (__builtin_finitef (pinff))
|
||||
link_error ();
|
||||
#endif
|
||||
if (__builtin_finitel (pinfl))
|
||||
link_error ();
|
||||
|
||||
if (__builtin_finite (nan))
|
||||
link_error ();
|
||||
#ifndef __SPU__
|
||||
if (__builtin_finitef (nanf))
|
||||
link_error ();
|
||||
#endif
|
||||
if (__builtin_finitel (nanl))
|
||||
link_error ();
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-ansi -pedantic-errors -Woverflow" } */
|
||||
/* { dg-skip-if "No Inf support" { spu-*-* } } */
|
||||
|
||||
void
|
||||
f (void)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* PR 23572 : warnings for out of range floating-point constants. */
|
||||
/* { dg-compile } */
|
||||
/* { dg-options "-std=c99" } */
|
||||
/* { dg-skip-if "No Inf support" { spu-*-* } } */
|
||||
#include <math.h>
|
||||
|
||||
#ifndef INFINITY
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* PR 23572 : warnings for out of range floating-point constants. */
|
||||
/* { dg-compile } */
|
||||
/* { dg-options "-Wno-overflow -std=c99" } */
|
||||
/* { dg-skip-if "No Inf support" { spu-*-* } } */
|
||||
#include <math.h>
|
||||
|
||||
#ifndef INFINITY
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
Test that they are NOT pedantic warnings. */
|
||||
/* { dg-compile } */
|
||||
/* { dg-options "-pedantic-errors -std=c99" } */
|
||||
/* { dg-skip-if "No Inf support" { spu-*-* } } */
|
||||
#include <math.h>
|
||||
|
||||
#ifndef INFINITY
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* { dg-compile } */
|
||||
/* { dg-skip-if "consts are shorts, not longs" { "m32c-*-*" "avr-*-*" } { "*" } { "" } } */
|
||||
/* { dg-skip-if "No Inf support" { spu-*-* } } */
|
||||
/* { dg-options "-O -ftrapping-math" } */
|
||||
|
||||
/* There should be exactly 2 +Inf in the assembly file. */
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "No NaN support" { spu-*-* } } */
|
||||
/* SH4 without -mieee defaults to -ffinite-math-only. */
|
||||
/* { dg-options "-fdump-tree-gimple -fno-finite-math-only" } */
|
||||
/* Test for folding abs(x) where appropriate. */
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -funsafe-math-optimizations -fno-finite-math-only -DUNSAFE" } */
|
||||
/* { dg-options "-mieee -O2 -funsafe-math-optimizations -fno-finite-math-only -DUNSAFE" { target alpha*-*-* } } */
|
||||
/* { dg-skip-if "No Inf/NaN support" { spu-*-* } } */
|
||||
|
||||
#include "tg-tests.h"
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@ extern void link_error(int);
|
|||
|
||||
/* Test that FUNCRES(frexp(NEG FUNCARG(ARGARG),&i)) is false. Check
|
||||
the sign as well. Ensure side-effects are evaluated in i. */
|
||||
#ifndef __SPU__
|
||||
#define TESTIT_FREXP2(NEG,FUNCARG,ARGARG,FUNCRES) do { \
|
||||
int i=5; \
|
||||
if (!__builtin_##FUNCRES##f(__builtin_frexpf(NEG __builtin_##FUNCARG##f(ARGARG),&i)) \
|
||||
|
@ -68,6 +69,20 @@ extern void link_error(int);
|
|||
|| CKEXP(i,8)) \
|
||||
link_error(__LINE__); \
|
||||
} while (0)
|
||||
#else
|
||||
#define TESTIT_FREXP2(NEG,FUNCARG,ARGARG,FUNCRES) do { \
|
||||
int i=6; \
|
||||
/* SPU single-precision floating point format does not support Inf or Nan. */ \
|
||||
if (!__builtin_##FUNCRES(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),&i)) \
|
||||
|| CKSGN(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),(i++,&i)), NEG __builtin_##FUNCARG(ARGARG)) \
|
||||
|| CKEXP(i,7)) \
|
||||
link_error(__LINE__); \
|
||||
if (!__builtin_##FUNCRES##l(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),&i)) \
|
||||
|| CKSGN_L(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),(i++,&i)), NEG __builtin_##FUNCARG##l(ARGARG)) \
|
||||
|| CKEXP(i,8)) \
|
||||
link_error(__LINE__); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
void __attribute__ ((__noinline__))
|
||||
foo(void)
|
||||
|
|
|
@ -45,6 +45,7 @@ extern void link_error(int);
|
|||
|
||||
/* Test that FUNCRES(FUNC(NEG FUNCARG(ARGARG),ARG2)) is false. Check
|
||||
the sign as well. */
|
||||
#ifndef __SPU__
|
||||
#define TESTIT3(FUNC,NEG,FUNCARG,ARGARG,ARG2,FUNCRES) do { \
|
||||
if (!__builtin_##FUNCRES##f(__builtin_##FUNC##f(NEG __builtin_##FUNCARG##f(ARGARG),ARG2)) \
|
||||
|| CKSGN_F(__builtin_##FUNC##f(NEG __builtin_##FUNCARG##f(ARGARG),ARG2), NEG __builtin_##FUNCARG##f(ARGARG))) \
|
||||
|
@ -56,6 +57,17 @@ extern void link_error(int);
|
|||
|| CKSGN_L(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG),ARG2), NEG __builtin_##FUNCARG##l(ARGARG))) \
|
||||
link_error(__LINE__); \
|
||||
} while (0)
|
||||
#else
|
||||
#define TESTIT3(FUNC,NEG,FUNCARG,ARGARG,ARG2,FUNCRES) do { \
|
||||
/* SPU single-precision floating point format does not support Inf or Nan. */ \
|
||||
if (!__builtin_##FUNCRES(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG),ARG2)) \
|
||||
|| CKSGN(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG),ARG2), NEG __builtin_##FUNCARG(ARGARG))) \
|
||||
link_error(__LINE__); \
|
||||
if (!__builtin_##FUNCRES##l(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG),ARG2)) \
|
||||
|| CKSGN_L(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG),ARG2), NEG __builtin_##FUNCARG##l(ARGARG))) \
|
||||
link_error(__LINE__); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/* Using foo==MIN/MAX float values, test that FUNC(foo,EXP) == foo*exp2(EXP),
|
||||
and also that FUNC(foo,-EXP) == foo*exp2(-EXP). */
|
||||
|
|
|
@ -47,6 +47,7 @@ extern void link_error(int);
|
|||
|
||||
/* Test if FUNCRES(FUNC(NEG FUNCARG(ARGARG))) is false. Check the
|
||||
sign as well. */
|
||||
#ifndef __SPU__
|
||||
#define TESTIT3(FUNC,NEG,FUNCARG,ARGARG,FUNCRES) do { \
|
||||
if (!__builtin_##FUNCRES##f(__builtin_##FUNC(NEG __builtin_##FUNCARG##f(ARGARG))) \
|
||||
|| CKSGN_F(__builtin_##FUNC##f(NEG __builtin_##FUNCARG##f(ARGARG)), NEG __builtin_##FUNCARG##f(ARGARG))) \
|
||||
|
@ -58,6 +59,17 @@ extern void link_error(int);
|
|||
|| CKSGN_L(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG)), NEG __builtin_##FUNCARG##l(ARGARG))) \
|
||||
link_error(__LINE__); \
|
||||
} while (0)
|
||||
#else
|
||||
#define TESTIT3(FUNC,NEG,FUNCARG,ARGARG,FUNCRES) do { \
|
||||
/* SPU single-precision floating point format does not support Inf or Nan. */ \
|
||||
if (!__builtin_##FUNCRES(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG))) \
|
||||
|| CKSGN(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG)), NEG __builtin_##FUNCARG(ARGARG))) \
|
||||
link_error(__LINE__); \
|
||||
if (!__builtin_##FUNCRES##l(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG))) \
|
||||
|| CKSGN_L(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG)), NEG __builtin_##FUNCARG##l(ARGARG))) \
|
||||
link_error(__LINE__); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
void __attribute__ ((__noinline__))
|
||||
foo(void)
|
||||
|
|
|
@ -59,15 +59,21 @@ extern void fool (long double);
|
|||
void bar()
|
||||
{
|
||||
/* An argument of NaN is not evaluated at compile-time. */
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_exp2f (__builtin_nanf("")));
|
||||
#endif
|
||||
foo (__builtin_exp2 (__builtin_nan("")));
|
||||
fool (__builtin_exp2l (__builtin_nanl("")));
|
||||
|
||||
/* An argument of Inf/-Inf is not evaluated at compile-time. */
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_exp2f (__builtin_inff()));
|
||||
#endif
|
||||
foo (__builtin_exp2 (__builtin_inf()));
|
||||
fool (__builtin_exp2l (__builtin_infl()));
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_exp2f (-__builtin_inff()));
|
||||
#endif
|
||||
foo (__builtin_exp2 (-__builtin_inf()));
|
||||
fool (__builtin_exp2l (-__builtin_infl()));
|
||||
|
||||
|
@ -130,24 +136,36 @@ void bar()
|
|||
TESTIT (tgamma, -3.0);
|
||||
|
||||
/* An argument of NaN is not evaluated at compile-time. */
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_powf (__builtin_nanf(""), 2.5F));
|
||||
#endif
|
||||
foo (__builtin_pow (__builtin_nan(""), 2.5));
|
||||
fool (__builtin_powl (__builtin_nanl(""), 2.5L));
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_powf (2.5F, __builtin_nanf("")));
|
||||
#endif
|
||||
foo (__builtin_pow (2.5, __builtin_nan("")));
|
||||
fool (__builtin_powl (2.5L, __builtin_nanl("")));
|
||||
|
||||
/* An argument of Inf/-Inf is not evaluated at compile-time. */
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_powf (__builtin_inff(), 2.5F));
|
||||
#endif
|
||||
foo (__builtin_pow (__builtin_inf(), 2.5));
|
||||
fool (__builtin_powl (__builtin_infl(), 2.5L));
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_powf (-__builtin_inff(), 2.5F));
|
||||
#endif
|
||||
foo (__builtin_pow (-__builtin_inf(), 2.5));
|
||||
fool (__builtin_powl (-__builtin_infl(), 2.5L));
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_powf (2.5F, __builtin_inff()));
|
||||
#endif
|
||||
foo (__builtin_pow (2.5, __builtin_inf()));
|
||||
fool (__builtin_powl (2.5L, __builtin_infl()));
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_powf (2.5F, -__builtin_inff()));
|
||||
#endif
|
||||
foo (__builtin_pow (2.5, -__builtin_inf()));
|
||||
fool (__builtin_powl (2.5L, -__builtin_infl()));
|
||||
|
||||
|
@ -235,17 +253,25 @@ void bar()
|
|||
TESTIT (ilogb, 0.0);
|
||||
TESTIT (ilogb, -0.0);
|
||||
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_ilogbf (__builtin_inff()));
|
||||
#endif
|
||||
foo (__builtin_ilogb (__builtin_inf()));
|
||||
fool (__builtin_ilogbl (__builtin_infl()));
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_ilogbf (-__builtin_inff()));
|
||||
#endif
|
||||
foo (__builtin_ilogb (-__builtin_inf()));
|
||||
fool (__builtin_ilogbl (-__builtin_infl()));
|
||||
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_ilogbf (__builtin_nanf("")));
|
||||
#endif
|
||||
foo (__builtin_ilogb (__builtin_nan("")));
|
||||
fool (__builtin_ilogbl (__builtin_nanl("")));
|
||||
#ifndef __SPU__
|
||||
foof (__builtin_ilogbf (-__builtin_nanf("")));
|
||||
#endif
|
||||
foo (__builtin_ilogb (-__builtin_nan("")));
|
||||
fool (__builtin_ilogbl (-__builtin_nanl("")));
|
||||
|
||||
|
@ -291,7 +317,8 @@ void bar()
|
|||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "exp2 " 9 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "exp2f" 9 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "exp2f" 9 "original" { target { ! { spu*-*-* } } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "exp2f" 6 "original" { target { spu*-*-* } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "exp2l" 9 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "asin " 2 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "asinf" 2 "original" } } */
|
||||
|
@ -321,7 +348,8 @@ void bar()
|
|||
/* { dg-final { scan-tree-dump-times "tgammaf" 5 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "tgammal" 5 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "pow " 13 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "powf" 13 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "powf" 13 "original" { target { ! { spu*-*-* } } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "powf" 7 "original" { target { spu*-*-* } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "powl" 13 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "fma " 3 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "fmaf" 3 "original" } } */
|
||||
|
@ -342,7 +370,8 @@ void bar()
|
|||
/* { dg-final { scan-tree-dump-times "_logbf" 2 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "_logbl" 2 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "ilogb " 6 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "ilogbf" 6 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "ilogbf" 6 "original" { target { ! { spu*-*-* } } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "ilogbf" 2 "original" { target { spu*-*-* } } } } */
|
||||
/* { dg-final { scan-tree-dump-times "ilogbl" 6 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "y0 " 3 "original" } } */
|
||||
/* { dg-final { scan-tree-dump-times "y0f" 3 "original" } } */
|
||||
|
|
|
@ -62,6 +62,7 @@ extern void link_error(int);
|
|||
/* Test that modf(NEG FUNCARG(ARGARG, &iptr)) == FRACRES &&
|
||||
FUNCRES(iptr) is true. Check the sign of both as well. This is
|
||||
for checking an argument of Inf. */
|
||||
#ifndef __SPU__
|
||||
#define TESTIT_MODF2(NEG,FUNCARG,ARGARG,FUNCRES,FRACRES) do { \
|
||||
float iptrf = 0.5; double iptr = 0.5; long double iptrl = 0.5; \
|
||||
if (__builtin_modff(NEG __builtin_##FUNCARG##f(ARGARG),&iptrf) != FRACRES##f \
|
||||
|
@ -80,10 +81,27 @@ extern void link_error(int);
|
|||
|| CKSGN_IPTR_L(iptrl,FRACRES##l)) \
|
||||
link_error(__LINE__); \
|
||||
} while (0)
|
||||
#else
|
||||
#define TESTIT_MODF2(NEG,FUNCARG,ARGARG,FUNCRES,FRACRES) do { \
|
||||
/* SPU single-precision floating point format does not support Inf or Nan. */ \
|
||||
double iptr = 0.5; long double iptrl = 0.5; \
|
||||
if (__builtin_modf(NEG __builtin_##FUNCARG(ARGARG),&iptr) != FRACRES \
|
||||
|| CKSGN(__builtin_modf(NEG __builtin_##FUNCARG(ARGARG),&iptr), FRACRES) \
|
||||
|| CKIPTR(!__builtin_##FUNCRES(iptr),0) \
|
||||
|| CKSGN_IPTR(iptr,FRACRES)) \
|
||||
link_error(__LINE__); \
|
||||
if (__builtin_modfl(NEG __builtin_##FUNCARG##l(ARGARG),&iptrl) != FRACRES##l \
|
||||
|| CKSGN_L(__builtin_modfl(NEG __builtin_##FUNCARG##l(ARGARG),&iptrl), FRACRES##l) \
|
||||
|| CKIPTR(!__builtin_##FUNCRES##l(iptrl),0) \
|
||||
|| CKSGN_IPTR_L(iptrl,FRACRES##l)) \
|
||||
link_error(__LINE__); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/* Test that FUNCRES(modf(NEG FUNCARG(ARGARG, &iptr))) is true &&
|
||||
FUNCRES(iptr) is true. Check the sign of both as well. This is
|
||||
for checking an argument of NaN. */
|
||||
#ifndef __SPU__
|
||||
#define TESTIT_MODF3(NEG,FUNCARG,ARGARG,FUNCRES) do { \
|
||||
float iptrf = 0.5; double iptr = 0.5; long double iptrl = 0.5; \
|
||||
if (CKRES(!__builtin_##FUNCRES##f(__builtin_modff(NEG __builtin_##FUNCARG##f(ARGARG),&iptrf))) \
|
||||
|
@ -102,6 +120,22 @@ extern void link_error(int);
|
|||
|| CKSGN_IPTR_L(iptrl,NEG 1)) \
|
||||
link_error(__LINE__); \
|
||||
} while (0)
|
||||
#else
|
||||
#define TESTIT_MODF3(NEG,FUNCARG,ARGARG,FUNCRES) do { \
|
||||
/* SPU single-precision floating point format does not support Inf or Nan. */ \
|
||||
double iptr = 0.5; long double iptrl = 0.5; \
|
||||
if (CKRES(!__builtin_##FUNCRES(__builtin_modf(NEG __builtin_##FUNCARG(ARGARG),&iptr))) \
|
||||
|| CKSGN(__builtin_modf(NEG __builtin_##FUNCARG(ARGARG),&iptr), NEG 1) \
|
||||
|| CKIPTR(!__builtin_##FUNCRES(iptr),0) \
|
||||
|| CKSGN_IPTR(iptr,NEG 1)) \
|
||||
link_error(__LINE__); \
|
||||
if (CKRES(!__builtin_##FUNCRES##l(__builtin_modfl(NEG __builtin_##FUNCARG##l(ARGARG),&iptrl))) \
|
||||
|| CKSGN_L(__builtin_modfl(NEG __builtin_##FUNCARG##l(ARGARG),&iptrl), NEG 1) \
|
||||
|| CKIPTR(!__builtin_##FUNCRES##l(iptrl),0) \
|
||||
|| CKSGN_IPTR_L(iptrl,NEG 1)) \
|
||||
link_error(__LINE__); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
void __attribute__ ((__noinline__))
|
||||
foo(void)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
/* Origin: Joseph Myers <joseph@codesourcery.com> */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "" } */
|
||||
/* { dg-skip-if "Round to zero" { spu-*-* } } */
|
||||
|
||||
#include <float.h>
|
||||
#include "fp-int-convert.h"
|
||||
|
|
|
@ -9,7 +9,10 @@
|
|||
int
|
||||
main (void)
|
||||
{
|
||||
#ifndef __SPU__
|
||||
/* Single-precision floating point on SPU always rounds to zero. */
|
||||
TEST_I_F(TItype, UTItype, float, FLT_MANT_DIG);
|
||||
#endif
|
||||
TEST_I_F(TItype, UTItype, double, DBL_MANT_DIG);
|
||||
/* Disable the long double tests when using IBM Extended Doubles.
|
||||
They have variable precision, but constants calculated by gcc's
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-mieee" { target sh*-*-* } } */
|
||||
/* { dg-skip-if "No Inf/NaN support" { spu-*-* } } */
|
||||
|
||||
#include "../tg-tests.h"
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue