From 9bc607c0ea12c47ca314d1bf5b4a44bc07f17d74 Mon Sep 17 00:00:00 2001 From: Igor Zamyatin Date: Tue, 25 Sep 2012 13:05:23 +0000 Subject: [PATCH] Update long double tests for long double size == double size 2012-09-25 Igor Zamyatin * gcc.target/i386/20030217-1.c: Added check for large_long_double effective target. * gcc.target/i386/387-3.c: Likewise. * gcc.target/i386/387-4.c: Likewise. * gcc.target/i386/pr36578-1.c: Likewise. * gcc.target/i386/excess-precision-1.c: Added new code for the case when long double size is equal double size. * gcc.target/i386/excess-precision-1.c: Likewise. * gcc.target/i386/pr36578-2.c: Likewise. * gcc.target/i386/20030217-2.c: New testcase. From-SVN: r191704 --- gcc/testsuite/ChangeLog | 13 +++++++ gcc/testsuite/gcc.target/i386/20030217-1.c | 1 + gcc/testsuite/gcc.target/i386/387-3.c | 1 + gcc/testsuite/gcc.target/i386/387-4.c | 1 + gcc/testsuite/gcc.target/i386/excess-precision-1.c | 38 ++++++++++++++------ gcc/testsuite/gcc.target/i386/excess-precision-3.c | 41 ++++++++++++++++------ gcc/testsuite/gcc.target/i386/pr36578-1.c | 1 + gcc/testsuite/gcc.target/i386/pr36578-2.c | 7 +++- 8 files changed, 81 insertions(+), 22 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 078ebbf..e5a481f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2012-09-25 Igor Zamyatin + + * gcc.target/i386/20030217-1.c: Added check for + large_long_double effective target. + * gcc.target/i386/387-3.c: Likewise. + * gcc.target/i386/387-4.c: Likewise. + * gcc.target/i386/pr36578-1.c: Likewise. + * gcc.target/i386/excess-precision-1.c: Added new code for the case + when long double size is equal double size. + * gcc.target/i386/excess-precision-1.c: Likewise. + * gcc.target/i386/pr36578-2.c: Likewise. + * gcc.target/i386/20030217-2.c: New testcase. + 2012-09-25 Jakub Jelinek PR tree-optimization/54676 diff --git a/gcc/testsuite/gcc.target/i386/20030217-1.c b/gcc/testsuite/gcc.target/i386/20030217-1.c index f19fd27..d2b2480 100644 --- a/gcc/testsuite/gcc.target/i386/20030217-1.c +++ b/gcc/testsuite/gcc.target/i386/20030217-1.c @@ -2,6 +2,7 @@ are parsed correctly. */ /* { dg-do run } */ /* { dg-options "-std=c99" } */ +/* { dg-require-effective-target large_long_double } */ long double d = 0x0.0000003ffffffff00000p-16357L; long double e = 0x0.0000003ffffffff00000p-16356L; diff --git a/gcc/testsuite/gcc.target/i386/387-3.c b/gcc/testsuite/gcc.target/i386/387-3.c index d00c729..1b8dc8b 100644 --- a/gcc/testsuite/gcc.target/i386/387-3.c +++ b/gcc/testsuite/gcc.target/i386/387-3.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mfpmath=387 -mfancy-math-387" } */ /* { dg-final { scan-assembler "fldpi" } } */ +/* { dg-require-effective-target large_long_double } */ long double add_pi(long double x) { diff --git a/gcc/testsuite/gcc.target/i386/387-4.c b/gcc/testsuite/gcc.target/i386/387-4.c index e4f4a48..27c48ed 100644 --- a/gcc/testsuite/gcc.target/i386/387-4.c +++ b/gcc/testsuite/gcc.target/i386/387-4.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mfancy-math-387" } */ /* { dg-final { scan-assembler "fldpi" } } */ +/* { dg-require-effective-target large_long_double } */ long double atanl (long double); diff --git a/gcc/testsuite/gcc.target/i386/excess-precision-1.c b/gcc/testsuite/gcc.target/i386/excess-precision-1.c index bd825d6..1bd3b88 100644 --- a/gcc/testsuite/gcc.target/i386/excess-precision-1.c +++ b/gcc/testsuite/gcc.target/i386/excess-precision-1.c @@ -38,12 +38,22 @@ test_add (void) abort (); if (f1 + f2 < fadd1) abort (); - if (d1 + d2 + d3 == dadd2) - abort (); - if (!(d1 + d2 + d3 > dadd2)) - abort (); - if (!(d1 + d2 + d3 >= dadd2)) - abort (); + if (sizeof(long double) > sizeof(double)) { + if ( d1 + d2 + d3 == dadd2) + abort (); + if (!(d1 + d2 + d3 > dadd2)) + abort (); + if (!(d1 + d2 + d3 >= dadd2)) + abort (); + } + else { + if ( d1 + d2 + d3 != dadd2 ) + abort(); + if ( d1 + d2 + d3 < dadd2 ) + abort(); + if ( d1 + d2 + d3 > dadd2 ) + abort(); + } } volatile long double ldsub1 = 1.0l - 0x1.0p-30l; @@ -90,10 +100,18 @@ test_mul (void) abort (); if ((0, dbl_min * dbl_min * dbl_min) != dbl_min3) abort (); - if (dbl_min * dbl_min * dbl_min == 0) - abort (); - if ((flt_min * flt_min ? dbl_min * dbl_min * dbl_min : 0) == 0) - abort (); + if (sizeof(long double) > sizeof(double) ) { + if (dbl_min * dbl_min * dbl_min == 0) + abort (); + if ((flt_min * flt_min ? dbl_min * dbl_min * dbl_min : 0) == 0) + abort (); + } + else { + if (dbl_min * dbl_min * dbl_min != 0) + abort (); + if ((flt_min * flt_min ? dbl_min * dbl_min * dbl_min : 1) != 0) + abort (); + } if ((flt_min * flt_min ? : 0) == 0) abort (); } diff --git a/gcc/testsuite/gcc.target/i386/excess-precision-3.c b/gcc/testsuite/gcc.target/i386/excess-precision-3.c index 3de61b4..1fd038a 100644 --- a/gcc/testsuite/gcc.target/i386/excess-precision-3.c +++ b/gcc/testsuite/gcc.target/i386/excess-precision-3.c @@ -15,6 +15,7 @@ volatile float f3 = 0x1.0p-60f; volatile double d1 = 1.0; volatile double d2 = 0x1.0p-30; volatile double d3 = 0x1.0p-60; +volatile double d3d = 0x1.0p-52; volatile float fadd1 = 1.0f + 0x1.0p-30f; volatile double dadd2 = 1.0 + 0x1.0p-30 + 0x1.0p-60; volatile double dh = 0x1.0p-24; @@ -35,9 +36,15 @@ test_assign (void) if (d != dadd2) abort (); /* Verify rounding direct to float without double rounding. */ - f = d1 + dh + d3; - if (f != fha) - abort (); + if (sizeof(long double) > sizeof(double) ) { + f = d1 + dh + d3; + if (f != fha) + abort (); + } else { + f = d1 + dh + d3d; + if (f != fha) + abort (); + } } void @@ -193,16 +200,28 @@ test_builtin (void) abort (); if (!__builtin_islessgreater (flt_min * flt_min, 0.0f)) abort (); - if (!__builtin_isgreater (dbl_min * dbl_min, 0.0)) - abort (); if (!__builtin_isgreaterequal (dbl_min * dbl_min, 0.0)) abort (); - if (!__builtin_isless (0.0, dbl_min * dbl_min)) - abort (); - if (__builtin_islessequal (dbl_min * dbl_min, 0.0)) - abort (); - if (!__builtin_islessgreater (dbl_min * dbl_min, 0.0)) - abort (); + if (sizeof(long double) > sizeof(double) ) { + if (!__builtin_isgreater (dbl_min * dbl_min, 0.0)) + abort (); + if (!__builtin_isless (0.0, dbl_min * dbl_min)) + abort (); + if (__builtin_islessequal (dbl_min * dbl_min, 0.0)) + abort (); + if (!__builtin_islessgreater (dbl_min * dbl_min, 0.0)) + abort (); + } + else { + if (__builtin_isgreater (dbl_min * dbl_min, 0.0)) + abort (); + if (__builtin_isless (0.0, dbl_min * dbl_min)) + abort (); + if (!__builtin_islessequal (dbl_min * dbl_min, 0.0)) + abort (); + if (__builtin_islessgreater (dbl_min * dbl_min, 0.0)) + abort (); + } } int diff --git a/gcc/testsuite/gcc.target/i386/pr36578-1.c b/gcc/testsuite/gcc.target/i386/pr36578-1.c index 4999935..5ede23a 100644 --- a/gcc/testsuite/gcc.target/i386/pr36578-1.c +++ b/gcc/testsuite/gcc.target/i386/pr36578-1.c @@ -2,6 +2,7 @@ /* { dg-do run } */ /* { dg-options "-msse2 -mfpmath=sse" } */ /* { dg-require-effective-target sse2 } */ +/* { dg-require-effective-target large_long_double } */ #include "sse2-check.h" diff --git a/gcc/testsuite/gcc.target/i386/pr36578-2.c b/gcc/testsuite/gcc.target/i386/pr36578-2.c index 5d6556f..bfde2cb 100644 --- a/gcc/testsuite/gcc.target/i386/pr36578-2.c +++ b/gcc/testsuite/gcc.target/i386/pr36578-2.c @@ -11,13 +11,18 @@ extern int printf(const char *, ...); volatile double d1 = 0x1.000001p0; volatile double d2 = 0x1p-54; +volatile double d2d = 0x1p-52; volatile float f = 0x1.000002p0f; volatile float f2; static void sse2_test (void) { - f2 = (float)((long double)d1 + (long double)d2); + if (sizeof(long double) > sizeof(double) ) { + f2 = (float)((long double)d1 + (long double)d2); + } else { + f2 = (float)((long double)d1 + (long double)d2d); + } if (f != f2) abort (); exit (0); -- 2.7.4