public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/meissner/heads/work064)] Revert patch.
@ 2021-08-13  1:12 Michael Meissner
  0 siblings, 0 replies; 2+ messages in thread
From: Michael Meissner @ 2021-08-13  1:12 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:1ddf7ad77685dc04bc33160462ff772510958a72

commit 1ddf7ad77685dc04bc33160462ff772510958a72
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Thu Aug 12 21:10:02 2021 -0400

    Revert patch.
    
    2021-08-12  Michael Meissner  <meissner@linux.ibm.com>
    
    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 <float.h>
 
-#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 70ac58c2c3b..44465b14b06 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 <string.h>
-	#include <stdio.h>
-	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 <string.h>
-	#include <stdio.h>
-	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 <string.h>
-	#include <stdio.h>
-	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, 8) != 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.


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [gcc(refs/users/meissner/heads/work064)] Revert patch.
@ 2021-08-13  0:40 Michael Meissner
  0 siblings, 0 replies; 2+ messages in thread
From: Michael Meissner @ 2021-08-13  0:40 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:c339063749c968db582f43b63cbb384895e4a258

commit c339063749c968db582f43b63cbb384895e4a258
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Thu Aug 12 20:37:28 2021 -0400

    Revert patch.
    
    2021-08-12  Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/testsuite/
            Revert patch.
            * 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 <float.h>
 
-#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 1b352107c6c..44465b14b06 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 <string.h>
-	#include <stdio.h>
-	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 (&a, &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 <string.h>
-	#include <stdio.h>
-	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 (&a, &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 <string.h>
-	#include <stdio.h>
-	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 (&a, &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.


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-08-13  1:12 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-13  1:12 [gcc(refs/users/meissner/heads/work064)] Revert patch Michael Meissner
  -- strict thread matches above, loose matches on Subject: below --
2021-08-13  0:40 Michael Meissner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).