From 8f9ddf6acff067428b2312626c50caf9956978b1 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Wed, 2 Jul 2008 15:30:11 +0000 Subject: [PATCH] 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 --- gcc/testsuite/ChangeLog | 40 +++++++++++++++++++ gcc/testsuite/g++.dg/torture/type-generic-1.C | 1 + .../gcc.c-torture/execute/ieee/20010114-2.x | 6 +++ .../gcc.c-torture/execute/ieee/20030331-1.x | 6 +++ .../gcc.c-torture/execute/ieee/920518-1.x | 6 +++ .../gcc.c-torture/execute/ieee/compare-fp-1.x | 6 +++ .../gcc.c-torture/execute/ieee/compare-fp-4.x | 6 +++ .../gcc.c-torture/execute/ieee/fp-cmp-2.x | 6 +++ .../gcc.c-torture/execute/ieee/fp-cmp-4f.x | 6 +++ .../gcc.c-torture/execute/ieee/fp-cmp-8f.x | 6 +++ .../gcc.c-torture/execute/ieee/inf-1.c | 9 +++++ .../execute/ieee/mul-subnormal-single-1.x | 5 +++ gcc/testsuite/gcc.dg/builtin-inf-1.c | 6 +-- gcc/testsuite/gcc.dg/builtins-1.c | 2 +- gcc/testsuite/gcc.dg/builtins-43.c | 5 +++ gcc/testsuite/gcc.dg/builtins-44.c | 7 ++++ gcc/testsuite/gcc.dg/builtins-45.c | 10 +++++ gcc/testsuite/gcc.dg/float-range-1.c | 1 + gcc/testsuite/gcc.dg/float-range-3.c | 1 + gcc/testsuite/gcc.dg/float-range-4.c | 1 + gcc/testsuite/gcc.dg/float-range-5.c | 1 + gcc/testsuite/gcc.dg/fold-overflow-1.c | 1 + gcc/testsuite/gcc.dg/pr15784-3.c | 1 + gcc/testsuite/gcc.dg/pr28796-2.c | 1 + .../gcc.dg/torture/builtin-frexp-1.c | 15 +++++++ .../gcc.dg/torture/builtin-ldexp-1.c | 12 ++++++ gcc/testsuite/gcc.dg/torture/builtin-logb-1.c | 12 ++++++ gcc/testsuite/gcc.dg/torture/builtin-math-2.c | 35 ++++++++++++++-- gcc/testsuite/gcc.dg/torture/builtin-modf-1.c | 34 ++++++++++++++++ .../gcc.dg/torture/fp-int-convert-float.c | 1 + .../gcc.dg/torture/fp-int-convert-timode.c | 3 ++ gcc/testsuite/gcc.dg/torture/type-generic-1.c | 1 + 32 files changed, 246 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/20010114-2.x create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/20030331-1.x create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.x create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-1.x create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4f.x create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8f.x diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ab606ceb560..e8175a12083 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,43 @@ +2008-07-02 Ulrich Weigand + + 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 PR fortran/36590 diff --git a/gcc/testsuite/g++.dg/torture/type-generic-1.C b/gcc/testsuite/g++.dg/torture/type-generic-1.C index 92dd9fcb751..7db2e69d0a5 100644 --- a/gcc/testsuite/g++.dg/torture/type-generic-1.C +++ b/gcc/testsuite/g++.dg/torture/type-generic-1.C @@ -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" diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/20010114-2.x b/gcc/testsuite/gcc.c-torture/execute/ieee/20010114-2.x new file mode 100644 index 00000000000..73b18d1604d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/20010114-2.x @@ -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 diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/20030331-1.x b/gcc/testsuite/gcc.c-torture/execute/ieee/20030331-1.x new file mode 100644 index 00000000000..73b18d1604d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/20030331-1.x @@ -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 diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.x b/gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.x new file mode 100644 index 00000000000..73b18d1604d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.x @@ -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 diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-1.x b/gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-1.x new file mode 100644 index 00000000000..2f7a4ecc54a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-1.x @@ -0,0 +1,6 @@ +if [istarget "spu-*-*"] { + # The SPU single-precision floating point format does not + # support Nan & Inf. + return 1 +} +return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-4.x b/gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-4.x index 510a30909ea..d7ecd110089 100644 --- a/gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-4.x +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/compare-fp-4.x @@ -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 diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.x b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.x index 84c193fe0e4..0fe5a98d375 100644 --- a/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.x +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-2.x @@ -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 diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4f.x b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4f.x new file mode 100644 index 00000000000..2f7a4ecc54a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-4f.x @@ -0,0 +1,6 @@ +if [istarget "spu-*-*"] { + # The SPU single-precision floating point format does not + # support Nan & Inf. + return 1 +} +return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8f.x b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8f.x new file mode 100644 index 00000000000..2f7a4ecc54a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-8f.x @@ -0,0 +1,6 @@ +if [istarget "spu-*-*"] { + # The SPU single-precision floating point format does not + # support Nan & Inf. + return 1 +} +return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/inf-1.c b/gcc/testsuite/gcc.c-torture/execute/ieee/inf-1.c index 34f60f3f1c0..eee8c0130ba 100644 --- a/gcc/testsuite/gcc.c-torture/execute/ieee/inf-1.c +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/inf-1.c @@ -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) diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/mul-subnormal-single-1.x b/gcc/testsuite/gcc.c-torture/execute/ieee/mul-subnormal-single-1.x index ce771550b2e..5978c94a8ea 100644 --- a/gcc/testsuite/gcc.c-torture/execute/ieee/mul-subnormal-single-1.x +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/mul-subnormal-single-1.x @@ -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 diff --git a/gcc/testsuite/gcc.dg/builtin-inf-1.c b/gcc/testsuite/gcc.dg/builtin-inf-1.c index fdb4612274c..d96a5b6b3f5 100644 --- a/gcc/testsuite/gcc.dg/builtin-inf-1.c +++ b/gcc/testsuite/gcc.dg/builtin-inf-1.c @@ -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 } */ diff --git a/gcc/testsuite/gcc.dg/builtins-1.c b/gcc/testsuite/gcc.dg/builtins-1.c index 573a879bd00..5dab9fe0a4e 100644 --- a/gcc/testsuite/gcc.dg/builtins-1.c +++ b/gcc/testsuite/gcc.dg/builtins-1.c @@ -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) diff --git a/gcc/testsuite/gcc.dg/builtins-43.c b/gcc/testsuite/gcc.dg/builtins-43.c index 4256967ee53..85d96b6cb0c 100644 --- a/gcc/testsuite/gcc.dg/builtins-43.c +++ b/gcc/testsuite/gcc.dg/builtins-43.c @@ -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)) diff --git a/gcc/testsuite/gcc.dg/builtins-44.c b/gcc/testsuite/gcc.dg/builtins-44.c index b3916886a43..9e19d774dfd 100644 --- a/gcc/testsuite/gcc.dg/builtins-44.c +++ b/gcc/testsuite/gcc.dg/builtins-44.c @@ -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) diff --git a/gcc/testsuite/gcc.dg/builtins-45.c b/gcc/testsuite/gcc.dg/builtins-45.c index ad9d39ec268..15ec33af677 100644 --- a/gcc/testsuite/gcc.dg/builtins-45.c +++ b/gcc/testsuite/gcc.dg/builtins-45.c @@ -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 (); diff --git a/gcc/testsuite/gcc.dg/float-range-1.c b/gcc/testsuite/gcc.dg/float-range-1.c index bf050487a2f..ddd7fd67207 100644 --- a/gcc/testsuite/gcc.dg/float-range-1.c +++ b/gcc/testsuite/gcc.dg/float-range-1.c @@ -4,6 +4,7 @@ /* Origin: Joseph Myers */ /* { dg-do compile } */ /* { dg-options "-ansi -pedantic-errors -Woverflow" } */ +/* { dg-skip-if "No Inf support" { spu-*-* } } */ void f (void) diff --git a/gcc/testsuite/gcc.dg/float-range-3.c b/gcc/testsuite/gcc.dg/float-range-3.c index 7fa766f526e..e018a1ebc16 100644 --- a/gcc/testsuite/gcc.dg/float-range-3.c +++ b/gcc/testsuite/gcc.dg/float-range-3.c @@ -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 #ifndef INFINITY diff --git a/gcc/testsuite/gcc.dg/float-range-4.c b/gcc/testsuite/gcc.dg/float-range-4.c index 2ec38c43bf6..fbb820f9b21 100644 --- a/gcc/testsuite/gcc.dg/float-range-4.c +++ b/gcc/testsuite/gcc.dg/float-range-4.c @@ -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 #ifndef INFINITY diff --git a/gcc/testsuite/gcc.dg/float-range-5.c b/gcc/testsuite/gcc.dg/float-range-5.c index 49742e322bf..89f00796aec 100644 --- a/gcc/testsuite/gcc.dg/float-range-5.c +++ b/gcc/testsuite/gcc.dg/float-range-5.c @@ -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 #ifndef INFINITY diff --git a/gcc/testsuite/gcc.dg/fold-overflow-1.c b/gcc/testsuite/gcc.dg/fold-overflow-1.c index e2b731b735a..bd4d25a73ed 100644 --- a/gcc/testsuite/gcc.dg/fold-overflow-1.c +++ b/gcc/testsuite/gcc.dg/fold-overflow-1.c @@ -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. */ diff --git a/gcc/testsuite/gcc.dg/pr15784-3.c b/gcc/testsuite/gcc.dg/pr15784-3.c index a8bdc552cde..746f9660e48 100644 --- a/gcc/testsuite/gcc.dg/pr15784-3.c +++ b/gcc/testsuite/gcc.dg/pr15784-3.c @@ -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. */ diff --git a/gcc/testsuite/gcc.dg/pr28796-2.c b/gcc/testsuite/gcc.dg/pr28796-2.c index f4900817581..17fd1584dde 100644 --- a/gcc/testsuite/gcc.dg/pr28796-2.c +++ b/gcc/testsuite/gcc.dg/pr28796-2.c @@ -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" diff --git a/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c b/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c index 2225f825b82..3ef23648a34 100644 --- a/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c +++ b/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c @@ -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) diff --git a/gcc/testsuite/gcc.dg/torture/builtin-ldexp-1.c b/gcc/testsuite/gcc.dg/torture/builtin-ldexp-1.c index 6efa870f837..94560a8abb4 100644 --- a/gcc/testsuite/gcc.dg/torture/builtin-ldexp-1.c +++ b/gcc/testsuite/gcc.dg/torture/builtin-ldexp-1.c @@ -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). */ diff --git a/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c b/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c index 7c8de654c83..25d0f91064e 100644 --- a/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c +++ b/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c @@ -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) diff --git a/gcc/testsuite/gcc.dg/torture/builtin-math-2.c b/gcc/testsuite/gcc.dg/torture/builtin-math-2.c index 214a3ef7c04..5c402873ab7 100644 --- a/gcc/testsuite/gcc.dg/torture/builtin-math-2.c +++ b/gcc/testsuite/gcc.dg/torture/builtin-math-2.c @@ -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" } } */ diff --git a/gcc/testsuite/gcc.dg/torture/builtin-modf-1.c b/gcc/testsuite/gcc.dg/torture/builtin-modf-1.c index 0bed72ba138..05e16ac2cc4 100644 --- a/gcc/testsuite/gcc.dg/torture/builtin-modf-1.c +++ b/gcc/testsuite/gcc.dg/torture/builtin-modf-1.c @@ -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) diff --git a/gcc/testsuite/gcc.dg/torture/fp-int-convert-float.c b/gcc/testsuite/gcc.dg/torture/fp-int-convert-float.c index 7fca1df7adf..ca5a4f8b6d7 100644 --- a/gcc/testsuite/gcc.dg/torture/fp-int-convert-float.c +++ b/gcc/testsuite/gcc.dg/torture/fp-int-convert-float.c @@ -2,6 +2,7 @@ /* Origin: Joseph Myers */ /* { dg-do run } */ /* { dg-options "" } */ +/* { dg-skip-if "Round to zero" { spu-*-* } } */ #include #include "fp-int-convert.h" diff --git a/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode.c b/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode.c index 2b27153044c..faeae6050d1 100644 --- a/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode.c +++ b/gcc/testsuite/gcc.dg/torture/fp-int-convert-timode.c @@ -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 diff --git a/gcc/testsuite/gcc.dg/torture/type-generic-1.c b/gcc/testsuite/gcc.dg/torture/type-generic-1.c index 9b69e923055..9a8e9d0048c 100644 --- a/gcc/testsuite/gcc.dg/torture/type-generic-1.c +++ b/gcc/testsuite/gcc.dg/torture/type-generic-1.c @@ -3,6 +3,7 @@ /* { dg-do run } */ /* { dg-options "-mieee" { target sh*-*-* } } */ +/* { dg-skip-if "No Inf/NaN support" { spu-*-* } } */ #include "../tg-tests.h" -- 2.30.2