From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1005) id 2E3813858C39; Wed, 25 Aug 2021 22:46:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2E3813858C39 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Michael Meissner To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/meissner/heads/work066)] Revert patch. X-Act-Checkin: gcc X-Git-Author: Michael Meissner X-Git-Refname: refs/users/meissner/heads/work066 X-Git-Oldrev: 98309845f1f9228010820ae5ff0927df13f97cb3 X-Git-Newrev: bfc8901ef3381a515a0723679a645c6b2c95d95a Message-Id: <20210825224631.2E3813858C39@sourceware.org> Date: Wed, 25 Aug 2021 22:46:31 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Aug 2021 22:46:31 -0000 https://gcc.gnu.org/g:bfc8901ef3381a515a0723679a645c6b2c95d95a commit bfc8901ef3381a515a0723679a645c6b2c95d95a Author: Michael Meissner Date: Wed Aug 25 18:45:48 2021 -0400 Revert patch. 2021-08-24 Michael Meissner gcc/testsuite/ Revert patch. PR target/94630 * gcc.target/powerpc/pr70117.c: Specify that we need the long double type to be IBM 128-bit. Remove the code to use __ibm128. * c-c++-common/dfp/convert-bfp-11.c: Specify that we need the long double type to be IBM 128-bit. Run the test at -O2 optimization. * lib/target-supports.exp (add_options_for_long_double_ibm128): New function. (check_effective_target_long_double_ibm128): New function. (add_options_for_long_double_ieee128): New function. (check_effective_target_long_double_ieee128): New function. (add_options_for_long_double_64bit): New function. (check_effective_target_long_double_64bit): New function. Diff: --- gcc/testsuite/c-c++-common/dfp/convert-bfp-11.c | 20 ++--- gcc/testsuite/gcc.target/powerpc/pr70117.c | 24 ++++-- gcc/testsuite/lib/target-supports.exp | 110 ------------------------ 3 files changed, 24 insertions(+), 130 deletions(-) diff --git a/gcc/testsuite/c-c++-common/dfp/convert-bfp-11.c b/gcc/testsuite/c-c++-common/dfp/convert-bfp-11.c index c09c8342bbb..95c433d2c24 100644 --- a/gcc/testsuite/c-c++-common/dfp/convert-bfp-11.c +++ b/gcc/testsuite/c-c++-common/dfp/convert-bfp-11.c @@ -1,16 +1,9 @@ -/* { dg-require-effective-target dfp } */ +/* { dg-skip-if "" { ! "powerpc*-*-linux*" } } */ -/* We need the long double type to be IBM 128-bit because the CONVERT_TO_PINF - tests will fail if we use IEEE 128-bit floating point. This is due to IEEE - 128-bit having a larger exponent range than IBM 128-bit extended double. So - tests that would generate an infinity with IBM 128-bit will generate a - normal number with IEEE 128-bit. */ - -/* { dg-require-effective-target long_double_ibm128 } */ -/* { dg-options "-O2" } */ -/* { dg-add-options long_double_ibm128 } */ - -/* Test decimal float conversions to and from IBM 128-bit long double. */ +/* Test decimal float conversions to and from IBM 128-bit long double. + Checks are skipped at runtime if long double is not 128 bits. + Don't force 128-bit long doubles because runtime support depends + on glibc. */ #include "convert.h" @@ -43,6 +36,9 @@ CONVERT_TO_PINF (312, tf, sd, 1.6e+308L, d32) int main () { + if (sizeof (long double) != 16) + return 0; + convert_101 (); convert_102 (); diff --git a/gcc/testsuite/gcc.target/powerpc/pr70117.c b/gcc/testsuite/gcc.target/powerpc/pr70117.c index 4a51f583157..3bbd2c595e0 100644 --- a/gcc/testsuite/gcc.target/powerpc/pr70117.c +++ b/gcc/testsuite/gcc.target/powerpc/pr70117.c @@ -1,18 +1,26 @@ -/* { dg-do run } */ -/* { dg-require-effective-target long_double_ibm128 } */ -/* { dg-options "-std=c99 -O2" } */ -/* { dg-add-options long_double_ibm128 } */ +/* { dg-do run { target { powerpc*-*-linux* powerpc*-*-darwin* powerpc*-*-aix* rs6000-*-* } } } */ +/* { dg-options "-std=c99 -mlong-double-128 -O2" } */ #include -#ifndef __LONG_DOUBLE_IBM128__ -#error "long double must be IBM 128-bit" +#if defined(__LONG_DOUBLE_IEEE128__) +/* If long double is IEEE 128-bit, we need to use the __ibm128 type instead of + long double. We can't use __ibm128 on systems that don't support IEEE + 128-bit floating point, because the type is not enabled on those + systems. */ +#define LDOUBLE __ibm128 + +#elif defined(__LONG_DOUBLE_IBM128__) +#define LDOUBLE long double + +#else +#error "long double must be either IBM 128-bit or IEEE 128-bit" #endif union gl_long_double_union { struct { double hi; double lo; } dd; - long double ld; + LDOUBLE ld; }; /* This is gnulib's LDBL_MAX which, being 107 bits in precision, is @@ -28,7 +36,7 @@ volatile double dnan = 0.0/0.0; int main (void) { - long double ld; + LDOUBLE ld; ld = gl_LDBL_MAX.ld; if (__builtin_isinf (ld)) diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 1e9064cf139..06f5b1eb54d 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2360,116 +2360,6 @@ proc check_effective_target_ppc_ieee128_ok { } { }] } -# Return the appropriate options to specify that long double uses the IBM -# 128-bit format on PowerPC. - -proc add_options_for_long_double_ibm128 { flags } { - if { [istarget powerpc*-*-*] } { - return "$flags -mlong-double-128 -Wno-psabi -mabi=ibmlongdouble" - } - return "$flags" -} - -# Check if GCC and GLIBC supports explicitly specifying that the long double -# format uses the IBM 128-bit extended double format. Under little endian -# PowerPC Linux, you need GLIBC 2.32 or later to be able to use a different -# long double format for running a program than the system default. - -proc check_effective_target_long_double_ibm128 { } { - return [check_runtime_nocache long_double_ibm128 { - #include - #include - volatile __ibm128 a = (__ibm128) 3.0; - volatile long double one = 1.0L; - volatile long double two = 2.0L; - volatile long double b; - char buffer[20]; - int main() - { - if (sizeof (long double) != 16) - return 1; - b = one + two; - if (memcmp ((void *)&a, (void *)&b, 16) != 0) - return 1; - sprintf (buffer, "%lg", b); - return strcmp (buffer, "3") != 0; - } - } [add_options_for_long_double_ibm128 ""]] -} - -# Return the appropriate options to specify that long double uses the IBM -# 128-bit format on PowerPC. -proc add_options_for_long_double_ieee128 { flags } { - if { [istarget powerpc*-*-*] } { - return "$flags -mlong-double-128 -Wno-psabi -mabi=ieeelongdouble" - } - return "$flags" -} - -# Check if GCC and GLIBC supports explicitly specifying that the long double -# format uses the IEEE 128-bit format. Under little endian PowerPC Linux, you -# need GLIBC 2.32 or later to be able to use a different long double format for -# running a program than the system default. - -proc check_effective_target_long_double_ieee128 { } { - return [check_runtime_nocache long_double_ieee128 { - #include - #include - volatile _Float128 a = 3.0f128; - volatile long double one = 1.0L; - volatile long double two = 2.0L; - volatile long double b; - char buffer[20]; - int main() - { - if (sizeof (long double) != 16) - return 1; - b = one + two; - if (memcmp ((void *)&a, (void *)&b, 16) != 0) - return 1; - sprintf (buffer, "%lg", b); - return strcmp (buffer, "3") != 0; - } - } [add_options_for_long_double_ieee128 ""]] -} - -# Return the appropriate options to specify that long double uses the IEEE -# 64-bit format on PowerPC. - -proc add_options_for_long_double_64bit { flags } { - if { [istarget powerpc*-*-*] } { - return "$flags -mlong-double-64" - } - return "$flags" -} - -# Check if GCC and GLIBC supports explicitly specifying that the long double -# format uses the IEEE 64-bit. Under little endian PowerPC Linux, you need -# GLIBC 2.32 or later to be able to use a different long double format for -# running a program than the system default. - -proc check_effective_target_long_double_64bit { } { - return [check_runtime_nocache long_double_64bit { - #include - #include - volatile double a = 3.0; - volatile long double one = 1.0L; - volatile long double two = 2.0L; - volatile long double b; - char buffer[20]; - int main() - { - if (sizeof (long double) != 8) - return 1; - b = one + two; - if (memcmp ((void *)&a, (void *)&b, 16) != 0) - return 1; - sprintf (buffer, "%lg", b); - return strcmp (buffer, "3") != 0; - } - } [add_options_for_ppc_long_double_override_64bit ""]] -} - # Return 1 if the target supports executing VSX instructions, 0 # otherwise. Cache the result.