forked from rpms/glibc
GCC Toolset 13 C++ compatibility for <math.h> iseqsig (#2222188)
Resolves: #2222188
This commit is contained in:
parent
7aac3aeef3
commit
370cf824b2
147
glibc-rh2222188-1.patch
Normal file
147
glibc-rh2222188-1.patch
Normal file
@ -0,0 +1,147 @@
|
||||
commit d653fd2d9ebe23c2b16b76edf717c5dbd5ce9b77
|
||||
Author: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Thu Mar 10 08:50:51 2022 +0100
|
||||
|
||||
malloc: Exit early on test failure in tst-realloc
|
||||
|
||||
This addresses more (correct) use-after-free warnings reported by
|
||||
GCC 12 on some targets.
|
||||
|
||||
Fixes commit c094c232eb3246154265bb035182f92fe1b17ab8 ("Avoid
|
||||
-Wuse-after-free in tests [BZ #26779].").
|
||||
|
||||
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||
|
||||
diff --git a/malloc/tst-realloc.c b/malloc/tst-realloc.c
|
||||
index 80711beab1257ed5..e985b9d565086257 100644
|
||||
--- a/malloc/tst-realloc.c
|
||||
+++ b/malloc/tst-realloc.c
|
||||
@@ -20,15 +20,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <libc-diag.h>
|
||||
-
|
||||
-static int errors = 0;
|
||||
-
|
||||
-static void
|
||||
-merror (const char *msg)
|
||||
-{
|
||||
- ++errors;
|
||||
- printf ("Error: %s\n", msg);
|
||||
-}
|
||||
+#include <support/check.h>
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
@@ -51,11 +43,11 @@ do_test (void)
|
||||
save = errno;
|
||||
|
||||
if (p != NULL)
|
||||
- merror ("realloc (NULL, -1) succeeded.");
|
||||
+ FAIL_EXIT1 ("realloc (NULL, -1) succeeded.");
|
||||
|
||||
/* errno should be set to ENOMEM on failure (POSIX). */
|
||||
if (p == NULL && save != ENOMEM)
|
||||
- merror ("errno is not set correctly");
|
||||
+ FAIL_EXIT1 ("errno is not set correctly");
|
||||
|
||||
errno = 0;
|
||||
|
||||
@@ -64,18 +56,18 @@ do_test (void)
|
||||
save = errno;
|
||||
|
||||
if (p == NULL)
|
||||
- merror ("realloc (NULL, 10) failed.");
|
||||
+ FAIL_EXIT1 ("realloc (NULL, 10) failed.");
|
||||
|
||||
free (p);
|
||||
|
||||
p = calloc (20, 1);
|
||||
if (p == NULL)
|
||||
- merror ("calloc (20, 1) failed.");
|
||||
+ FAIL_EXIT1 ("calloc (20, 1) failed.");
|
||||
|
||||
/* Check increasing size preserves contents (C89). */
|
||||
p = realloc (p, 200);
|
||||
if (p == NULL)
|
||||
- merror ("realloc (p, 200) failed.");
|
||||
+ FAIL_EXIT1 ("realloc (p, 200) failed.");
|
||||
|
||||
c = p;
|
||||
ok = 1;
|
||||
@@ -87,20 +79,20 @@ do_test (void)
|
||||
}
|
||||
|
||||
if (ok == 0)
|
||||
- merror ("first 20 bytes were not cleared");
|
||||
+ FAIL_EXIT1 ("first 20 bytes were not cleared");
|
||||
|
||||
free (p);
|
||||
|
||||
p = realloc (NULL, 100);
|
||||
if (p == NULL)
|
||||
- merror ("realloc (NULL, 100) failed.");
|
||||
+ FAIL_EXIT1 ("realloc (NULL, 100) failed.");
|
||||
|
||||
memset (p, 0xff, 100);
|
||||
|
||||
/* Check decreasing size preserves contents (C89). */
|
||||
p = realloc (p, 16);
|
||||
if (p == NULL)
|
||||
- merror ("realloc (p, 16) failed.");
|
||||
+ FAIL_EXIT1 ("realloc (p, 16) failed.");
|
||||
|
||||
c = p;
|
||||
ok = 1;
|
||||
@@ -112,7 +104,7 @@ do_test (void)
|
||||
}
|
||||
|
||||
if (ok == 0)
|
||||
- merror ("first 16 bytes were not correct");
|
||||
+ FAIL_EXIT1 ("first 16 bytes were not correct");
|
||||
|
||||
/* Check failed realloc leaves original untouched (C89). */
|
||||
DIAG_PUSH_NEEDS_COMMENT;
|
||||
@@ -124,7 +116,7 @@ do_test (void)
|
||||
c = realloc (p, -1);
|
||||
DIAG_POP_NEEDS_COMMENT;
|
||||
if (c != NULL)
|
||||
- merror ("realloc (p, -1) succeeded.");
|
||||
+ FAIL_EXIT1 ("realloc (p, -1) succeeded.");
|
||||
|
||||
c = p;
|
||||
ok = 1;
|
||||
@@ -136,29 +128,21 @@ do_test (void)
|
||||
}
|
||||
|
||||
if (ok == 0)
|
||||
- merror ("first 16 bytes were not correct after failed realloc");
|
||||
+ FAIL_EXIT1 ("first 16 bytes were not correct after failed realloc");
|
||||
|
||||
-#if __GNUC_PREREQ (12, 0)
|
||||
- /* Ignore a valid warning about using a pointer made indeterminate
|
||||
- by a prior call to realloc(). */
|
||||
- DIAG_IGNORE_NEEDS_COMMENT (12, "-Wuse-after-free");
|
||||
-#endif
|
||||
/* realloc (p, 0) frees p (C89) and returns NULL (glibc). */
|
||||
p = realloc (p, 0);
|
||||
-#if __GNUC_PREREQ (12, 0)
|
||||
- DIAG_POP_NEEDS_COMMENT;
|
||||
-#endif
|
||||
if (p != NULL)
|
||||
- merror ("realloc (p, 0) returned non-NULL.");
|
||||
+ FAIL_EXIT1 ("realloc (p, 0) returned non-NULL.");
|
||||
|
||||
/* realloc (NULL, 0) acts like malloc (0) (glibc). */
|
||||
p = realloc (NULL, 0);
|
||||
if (p == NULL)
|
||||
- merror ("realloc (NULL, 0) returned NULL.");
|
||||
+ FAIL_EXIT1 ("realloc (NULL, 0) returned NULL.");
|
||||
|
||||
free (p);
|
||||
|
||||
- return errors != 0;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
#define TEST_FUNCTION do_test ()
|
382
glibc-rh2222188-2.patch
Normal file
382
glibc-rh2222188-2.patch
Normal file
@ -0,0 +1,382 @@
|
||||
commit 3e5760fcb48528d48deeb60cb885a97bb731160c
|
||||
Author: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Wed Sep 28 20:09:34 2022 +0000
|
||||
|
||||
Update _FloatN header support for C++ in GCC 13
|
||||
|
||||
GCC 13 adds support for _FloatN and _FloatNx types in C++, so breaking
|
||||
the installed glibc headers that assume such support is not present.
|
||||
GCC mostly works around this with fixincludes, but that doesn't help
|
||||
for building glibc and its tests (glibc doesn't itself contain C++
|
||||
code, but there's C++ code built for tests). Update glibc's
|
||||
bits/floatn-common.h and bits/floatn.h headers to handle the GCC 13
|
||||
support directly.
|
||||
|
||||
In general the changes match those made by fixincludes, though I think
|
||||
the ones in sysdeps/powerpc/bits/floatn.h, where the header tests
|
||||
__LDBL_MANT_DIG__ == 113 or uses #elif, wouldn't match the existing
|
||||
fixincludes patterns.
|
||||
|
||||
Some places involving special C++ handling in relation to _FloatN
|
||||
support are not changed. There's no need to change the
|
||||
__HAVE_FLOATN_NOT_TYPEDEF definition (also in a form that wouldn't be
|
||||
matched by the fixincludes fixes) because it's only used in relation
|
||||
to macro definitions using features not supported for C++
|
||||
(__builtin_types_compatible_p and _Generic). And there's no need to
|
||||
change the inline function overloads for issignaling, iszero and
|
||||
iscanonical in C++ because cases where types have the same format but
|
||||
are no longer compatible types are handled automatically by the C++
|
||||
overload resolution rules.
|
||||
|
||||
This patch also does not change the overload handling for iseqsig, and
|
||||
there I think changes *are* needed, beyond those in this patch or made
|
||||
by fixincludes. The way that overload is defined, via a template
|
||||
parameter to a structure type, requires overloads whenever the types
|
||||
are incompatible, even if they have the same format. So I think we
|
||||
need to add overloads with GCC 13 for every supported _FloatN and
|
||||
_FloatNx type, rather than just having one for _Float128 when it has a
|
||||
different ABI to long double as at present (but for older GCC, such
|
||||
overloads must not be defined for types that end up defined as
|
||||
typedefs for another type).
|
||||
|
||||
Tested with build-many-glibcs.py: compilers build for
|
||||
aarch64-linux-gnu ia64-linux-gnu mips64-linux-gnu powerpc-linux-gnu
|
||||
powerpc64le-linux-gnu x86_64-linux-gnu; glibcs build for
|
||||
aarch64-linux-gnu ia64-linux-gnu i686-linux-gnu mips-linux-gnu
|
||||
mips64-linux-gnu-n32 powerpc-linux-gnu powerpc64le-linux-gnu
|
||||
x86_64-linux-gnu.
|
||||
|
||||
diff --git a/bits/floatn-common.h b/bits/floatn-common.h
|
||||
index b43c9532d8b01cca..45d4555f48483fff 100644
|
||||
--- a/bits/floatn-common.h
|
||||
+++ b/bits/floatn-common.h
|
||||
@@ -78,7 +78,7 @@
|
||||
or _FloatNx types, if __HAVE_<type> is 1. The corresponding
|
||||
literal suffixes exist since GCC 7, for C only. */
|
||||
# if __HAVE_FLOAT16
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
/* No corresponding suffix available for this type. */
|
||||
# define __f16(x) ((_Float16) x##f)
|
||||
# else
|
||||
@@ -87,7 +87,7 @@
|
||||
# endif
|
||||
|
||||
# if __HAVE_FLOAT32
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# define __f32(x) x##f
|
||||
# else
|
||||
# define __f32(x) x##f32
|
||||
@@ -95,7 +95,7 @@
|
||||
# endif
|
||||
|
||||
# if __HAVE_FLOAT64
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# ifdef __NO_LONG_DOUBLE_MATH
|
||||
# define __f64(x) x##l
|
||||
# else
|
||||
@@ -107,7 +107,7 @@
|
||||
# endif
|
||||
|
||||
# if __HAVE_FLOAT32X
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# define __f32x(x) x
|
||||
# else
|
||||
# define __f32x(x) x##f32x
|
||||
@@ -115,7 +115,7 @@
|
||||
# endif
|
||||
|
||||
# if __HAVE_FLOAT64X
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# if __HAVE_FLOAT64X_LONG_DOUBLE
|
||||
# define __f64x(x) x##l
|
||||
# else
|
||||
@@ -127,7 +127,7 @@
|
||||
# endif
|
||||
|
||||
# if __HAVE_FLOAT128X
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# error "_Float128X supported but no constant suffix"
|
||||
# else
|
||||
# define __f128x(x) x##f128x
|
||||
@@ -136,7 +136,7 @@
|
||||
|
||||
/* Defined to a complex type if __HAVE_<type> is 1. */
|
||||
# if __HAVE_FLOAT16
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef _Complex float __cfloat16 __attribute__ ((__mode__ (__HC__)));
|
||||
# define __CFLOAT16 __cfloat16
|
||||
# else
|
||||
@@ -145,7 +145,7 @@ typedef _Complex float __cfloat16 __attribute__ ((__mode__ (__HC__)));
|
||||
# endif
|
||||
|
||||
# if __HAVE_FLOAT32
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# define __CFLOAT32 _Complex float
|
||||
# else
|
||||
# define __CFLOAT32 _Complex _Float32
|
||||
@@ -153,7 +153,7 @@ typedef _Complex float __cfloat16 __attribute__ ((__mode__ (__HC__)));
|
||||
# endif
|
||||
|
||||
# if __HAVE_FLOAT64
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# ifdef __NO_LONG_DOUBLE_MATH
|
||||
# define __CFLOAT64 _Complex long double
|
||||
# else
|
||||
@@ -165,7 +165,7 @@ typedef _Complex float __cfloat16 __attribute__ ((__mode__ (__HC__)));
|
||||
# endif
|
||||
|
||||
# if __HAVE_FLOAT32X
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# define __CFLOAT32X _Complex double
|
||||
# else
|
||||
# define __CFLOAT32X _Complex _Float32x
|
||||
@@ -173,7 +173,7 @@ typedef _Complex float __cfloat16 __attribute__ ((__mode__ (__HC__)));
|
||||
# endif
|
||||
|
||||
# if __HAVE_FLOAT64X
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# if __HAVE_FLOAT64X_LONG_DOUBLE
|
||||
# define __CFLOAT64X _Complex long double
|
||||
# else
|
||||
@@ -185,7 +185,7 @@ typedef _Complex float __cfloat16 __attribute__ ((__mode__ (__HC__)));
|
||||
# endif
|
||||
|
||||
# if __HAVE_FLOAT128X
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# error "_Float128X supported but no complex type"
|
||||
# else
|
||||
# define __CFLOAT128X _Complex _Float128x
|
||||
@@ -195,7 +195,7 @@ typedef _Complex float __cfloat16 __attribute__ ((__mode__ (__HC__)));
|
||||
/* The remaining of this file provides support for older compilers. */
|
||||
# if __HAVE_FLOAT16
|
||||
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef float _Float16 __attribute__ ((__mode__ (__HF__)));
|
||||
# endif
|
||||
|
||||
@@ -210,7 +210,7 @@ typedef float _Float16 __attribute__ ((__mode__ (__HF__)));
|
||||
|
||||
# if __HAVE_FLOAT32
|
||||
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef float _Float32;
|
||||
# endif
|
||||
|
||||
@@ -234,7 +234,7 @@ typedef float _Float32;
|
||||
|
||||
# ifdef __NO_LONG_DOUBLE_MATH
|
||||
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef long double _Float64;
|
||||
# endif
|
||||
|
||||
@@ -247,7 +247,7 @@ typedef long double _Float64;
|
||||
|
||||
# else
|
||||
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef double _Float64;
|
||||
# endif
|
||||
|
||||
@@ -264,7 +264,7 @@ typedef double _Float64;
|
||||
|
||||
# if __HAVE_FLOAT32X
|
||||
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef double _Float32x;
|
||||
# endif
|
||||
|
||||
@@ -281,7 +281,7 @@ typedef double _Float32x;
|
||||
|
||||
# if __HAVE_FLOAT64X_LONG_DOUBLE
|
||||
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef long double _Float64x;
|
||||
# endif
|
||||
|
||||
@@ -294,7 +294,7 @@ typedef long double _Float64x;
|
||||
|
||||
# else
|
||||
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef _Float128 _Float64x;
|
||||
# endif
|
||||
|
||||
@@ -311,7 +311,7 @@ typedef _Float128 _Float64x;
|
||||
|
||||
# if __HAVE_FLOAT128X
|
||||
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# error "_Float128x supported but no type"
|
||||
# endif
|
||||
|
||||
diff --git a/sysdeps/ia64/bits/floatn.h b/sysdeps/ia64/bits/floatn.h
|
||||
index 60c5a130e12d88a1..3d493909aeebf81e 100644
|
||||
--- a/sysdeps/ia64/bits/floatn.h
|
||||
+++ b/sysdeps/ia64/bits/floatn.h
|
||||
@@ -56,7 +56,7 @@
|
||||
/* Defined to concatenate the literal suffix to be used with _Float128
|
||||
types, if __HAVE_FLOAT128 is 1. */
|
||||
# if __HAVE_FLOAT128
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
/* The literal suffix f128 exists only since GCC 7.0. */
|
||||
# define __f128(x) x##q
|
||||
# else
|
||||
@@ -66,7 +66,7 @@
|
||||
|
||||
/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */
|
||||
# if __HAVE_FLOAT128
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
/* Add a typedef for older GCC compilers which don't natively support
|
||||
_Complex _Float128. */
|
||||
typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
|
||||
@@ -80,7 +80,7 @@ typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
|
||||
# if __HAVE_FLOAT128
|
||||
|
||||
/* The type _Float128 exists only since GCC 7.0. */
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef __float128 _Float128;
|
||||
# endif
|
||||
|
||||
diff --git a/sysdeps/ieee754/ldbl-128/bits/floatn.h b/sysdeps/ieee754/ldbl-128/bits/floatn.h
|
||||
index da50ae796f681c60..d75a3d12e890c0be 100644
|
||||
--- a/sysdeps/ieee754/ldbl-128/bits/floatn.h
|
||||
+++ b/sysdeps/ieee754/ldbl-128/bits/floatn.h
|
||||
@@ -55,7 +55,7 @@
|
||||
/* Defined to concatenate the literal suffix to be used with _Float128
|
||||
types, if __HAVE_FLOAT128 is 1. */
|
||||
# if __HAVE_FLOAT128
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
/* The literal suffix f128 exists only since GCC 7.0. */
|
||||
# define __f128(x) x##l
|
||||
# else
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */
|
||||
# if __HAVE_FLOAT128
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# define __CFLOAT128 _Complex long double
|
||||
# else
|
||||
# define __CFLOAT128 _Complex _Float128
|
||||
@@ -76,7 +76,7 @@
|
||||
# if __HAVE_FLOAT128
|
||||
|
||||
/* The type _Float128 exists only since GCC 7.0. */
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef long double _Float128;
|
||||
# endif
|
||||
|
||||
diff --git a/sysdeps/mips/ieee754/bits/floatn.h b/sysdeps/mips/ieee754/bits/floatn.h
|
||||
index b7720a2889e59e8f..fe7be983592e1e0e 100644
|
||||
--- a/sysdeps/mips/ieee754/bits/floatn.h
|
||||
+++ b/sysdeps/mips/ieee754/bits/floatn.h
|
||||
@@ -55,7 +55,7 @@
|
||||
/* Defined to concatenate the literal suffix to be used with _Float128
|
||||
types, if __HAVE_FLOAT128 is 1. */
|
||||
# if __HAVE_FLOAT128
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
/* The literal suffix f128 exists only since GCC 7.0. */
|
||||
# define __f128(x) x##l
|
||||
# else
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */
|
||||
# if __HAVE_FLOAT128
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
# define __CFLOAT128 _Complex long double
|
||||
# else
|
||||
# define __CFLOAT128 _Complex _Float128
|
||||
@@ -76,7 +76,7 @@
|
||||
# if __HAVE_FLOAT128
|
||||
|
||||
/* The type _Float128 exists only since GCC 7.0. */
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef long double _Float128;
|
||||
# endif
|
||||
|
||||
diff --git a/sysdeps/powerpc/bits/floatn.h b/sysdeps/powerpc/bits/floatn.h
|
||||
index fab164e0a2907668..a5a572f646dac2bf 100644
|
||||
--- a/sysdeps/powerpc/bits/floatn.h
|
||||
+++ b/sysdeps/powerpc/bits/floatn.h
|
||||
@@ -57,7 +57,7 @@
|
||||
/* Defined to concatenate the literal suffix to be used with _Float128
|
||||
types, if __HAVE_FLOAT128 is 1. */
|
||||
# if __HAVE_FLOAT128
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
/* The literal suffix (f128) exist for powerpc only since GCC 7.0. */
|
||||
# if __LDBL_MANT_DIG__ == 113
|
||||
# define __f128(x) x##l
|
||||
@@ -71,10 +71,10 @@
|
||||
|
||||
/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */
|
||||
# if __HAVE_FLOAT128
|
||||
-# if __LDBL_MANT_DIG__ == 113 && defined __cplusplus
|
||||
+# if __LDBL_MANT_DIG__ == 113 && defined __cplusplus && !__GNUC_PREREQ (13, 0)
|
||||
typedef long double _Float128;
|
||||
# define __CFLOAT128 _Complex long double
|
||||
-# elif !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# elif !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
/* The type _Float128 exist for powerpc only since GCC 7.0. */
|
||||
typedef __float128 _Float128;
|
||||
/* Add a typedef for older GCC and C++ compilers which don't natively support
|
||||
diff --git a/sysdeps/x86/bits/floatn.h b/sysdeps/x86/bits/floatn.h
|
||||
index f0c51716a99c1886..8674273f46b87069 100644
|
||||
--- a/sysdeps/x86/bits/floatn.h
|
||||
+++ b/sysdeps/x86/bits/floatn.h
|
||||
@@ -58,7 +58,7 @@
|
||||
/* Defined to concatenate the literal suffix to be used with _Float128
|
||||
types, if __HAVE_FLOAT128 is 1. */
|
||||
# if __HAVE_FLOAT128
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
/* The literal suffix f128 exists only since GCC 7.0. */
|
||||
# define __f128(x) x##q
|
||||
# else
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */
|
||||
# if __HAVE_FLOAT128
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
/* Add a typedef for older GCC compilers which don't natively support
|
||||
_Complex _Float128. */
|
||||
typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
|
||||
@@ -82,7 +82,7 @@ typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
|
||||
# if __HAVE_FLOAT128
|
||||
|
||||
/* The type _Float128 exists only since GCC 7.0. */
|
||||
-# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
+# if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
|
||||
typedef __float128 _Float128;
|
||||
# endif
|
||||
|
897
glibc-rh2222188-3.patch
Normal file
897
glibc-rh2222188-3.patch
Normal file
@ -0,0 +1,897 @@
|
||||
commit f66780ba46805760a328f01967836416b06c93ca
|
||||
Author: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Mon Oct 31 23:20:08 2022 +0000
|
||||
|
||||
Fix build with GCC 13 _FloatN, _FloatNx built-in functions
|
||||
|
||||
GCC 13 has added more _FloatN and _FloatNx versions of existing
|
||||
<math.h> and <complex.h> built-in functions, for use in libstdc++-v3.
|
||||
|
||||
This breaks the glibc build because of how those functions are defined
|
||||
as aliases to functions with the same ABI but different types. Add
|
||||
appropriate -fno-builtin-* options for compiling relevant files, as
|
||||
already done for the case of long double functions aliasing double
|
||||
ones and based on the list of files used there.
|
||||
|
||||
I fixed some mistakes in that list of double files that I noticed
|
||||
while implementing this fix, but there may well be more such
|
||||
(harmless) cases, in this list or the new one (files that don't
|
||||
actually exist or don't define the named functions as aliases so don't
|
||||
need the options). I did try to exclude cases where glibc doesn't
|
||||
define certain functions for _FloatN or _FloatNx types at all from the
|
||||
new uses of -fno-builtin-* options. As with the options for double
|
||||
files (see the commit message for commit
|
||||
49348beafe9ba150c9bd48595b3f372299bddbb0, "Fix build with GCC 10 when
|
||||
long double = double."), it's deliberate that the options are used
|
||||
even if GCC currently doesn't have a built-in version of a given
|
||||
functions, so providing some level of future-proofing against more
|
||||
such built-in functions being added in future.
|
||||
|
||||
Tested with build-many-glibcs.py for aarch64-linux-gnu
|
||||
powerpc-linux-gnu powerpc64le-linux-gnu x86_64-linux-gnu (compilers
|
||||
and glibcs builds) with GCC mainline.
|
||||
|
||||
Conflicts:
|
||||
math/Makefile
|
||||
(missing narrowing fma, sqrt downstream)
|
||||
|
||||
diff --git a/math/Makefile b/math/Makefile
|
||||
index ceb1eb2085c8bfd4..2edb044d9d590de1 100644
|
||||
--- a/math/Makefile
|
||||
+++ b/math/Makefile
|
||||
@@ -661,16 +661,18 @@ CFLAGS-s_csinh.c += -fno-builtin-csinhl
|
||||
CFLAGS-s_csqrt.c += -fno-builtin-csqrtl
|
||||
CFLAGS-s_ctan.c += -fno-builtin-ctanl
|
||||
CFLAGS-s_ctanh.c += -fno-builtin-ctanhl
|
||||
-CFLAGS-s_dadd.c += -fno-builtin-daddl
|
||||
-CFLAGS-s_ddiv.c += -fno-builtin-ddivl
|
||||
-CFLAGS-s_dmul.c += -fno-builtin-dmull
|
||||
-CFLAGS-s_dsub.c += -fno-builtin-dsubl
|
||||
CFLAGS-s_erf.c += -fno-builtin-erfl
|
||||
CFLAGS-s_erfc.c += -fno-builtin-erfcl
|
||||
CFLAGS-e_exp.c += -fno-builtin-expl
|
||||
CFLAGS-w_exp10.c += -fno-builtin-exp10l
|
||||
CFLAGS-e_exp2.c += -fno-builtin-exp2l
|
||||
CFLAGS-s_expm1.c += -fno-builtin-expm1l
|
||||
+CFLAGS-s_f32xaddf64.c += -fno-builtin-daddl
|
||||
+CFLAGS-s_f32xdivf64.c += -fno-builtin-ddivl
|
||||
+CFLAGS-s_f32xfmaf64.c += -fno-builtin-dfmal
|
||||
+CFLAGS-s_f32xmulf64.c += -fno-builtin-dmull
|
||||
+CFLAGS-s_f32xsqrtf64.c += -fno-builtin-dsqrtl
|
||||
+CFLAGS-s_f32xsubf64.c += -fno-builtin-dsubl
|
||||
CFLAGS-s_fabs.c += -fno-builtin-fabsl
|
||||
CFLAGS-s_fadd.c += -fno-builtin-faddl
|
||||
CFLAGS-s_fdim.c += -fno-builtin-fdiml
|
||||
@@ -688,7 +690,6 @@ CFLAGS-s_frexp.c += -fno-builtin-frexpl
|
||||
CFLAGS-s_fromfp.c += -fno-builtin-fromfpl
|
||||
CFLAGS-s_fromfpx.c += -fno-builtin-fromfpxl
|
||||
CFLAGS-s_fsub.c += -fno-builtin-fsubl
|
||||
-CFLAGS-s_gamma.c += -fno-builtin-gammal
|
||||
CFLAGS-s_getpayload.c += -fno-builtin-getpayloadl
|
||||
CFLAGS-w_hypot.c += -fno-builtin-hypotl
|
||||
CFLAGS-w_ilogb.c += -fno-builtin-ilogbl
|
||||
@@ -747,6 +748,240 @@ CFLAGS-s_y1.c += -fno-builtin-y1l
|
||||
CFLAGS-s_yn.c += -fno-builtin-ynl
|
||||
endif
|
||||
|
||||
+# Likewise, for _Float32x and _Float64 aliases.
|
||||
+CFLAGS-w_acos.c += -fno-builtin-acosf32x -fno-builtin-acosf64
|
||||
+CFLAGS-w_acosh.c += -fno-builtin-acoshf32x -fno-builtin-acoshf64
|
||||
+CFLAGS-w_asin.c += -fno-builtin-asinf32x -fno-builtin-asinf64
|
||||
+CFLAGS-s_asinh.c += -fno-builtin-asinhf32x -fno-builtin-asinhf64
|
||||
+CFLAGS-s_atan.c += -fno-builtin-atanf32x -fno-builtin-atanf64
|
||||
+CFLAGS-w_atan2.c += -fno-builtin-atan2f32x -fno-builtin-atan2f64
|
||||
+CFLAGS-w_atanh.c += -fno-builtin-atanhf32x -fno-builtin-atanhf64
|
||||
+CFLAGS-s_cabs.c += -fno-builtin-cabsf32x -fno-builtin-cabsf64
|
||||
+CFLAGS-s_cacos.c += -fno-builtin-cacosf32x -fno-builtin-cacosf64
|
||||
+CFLAGS-s_cacosh.c += -fno-builtin-cacoshf32x -fno-builtin-cacoshf64
|
||||
+CFLAGS-s_canonicalize.c += -fno-builtin-canonicalizef32x -fno-builtin-canonicalizef64
|
||||
+CFLAGS-s_carg.c += -fno-builtin-cargf32x -fno-builtin-cargf64
|
||||
+CFLAGS-s_casin.c += -fno-builtin-casinf32x -fno-builtin-casinf64
|
||||
+CFLAGS-s_casinh.c += -fno-builtin-casinhf32x -fno-builtin-casinhf64
|
||||
+CFLAGS-s_catan.c += -fno-builtin-catanf32x -fno-builtin-catanf64
|
||||
+CFLAGS-s_catanh.c += -fno-builtin-catanhf32x -fno-builtin-catanhf64
|
||||
+CFLAGS-s_cbrt.c += -fno-builtin-cbrtf32x -fno-builtin-cbrtf64
|
||||
+CFLAGS-s_ccos.c += -fno-builtin-ccosf32x -fno-builtin-ccosf64
|
||||
+CFLAGS-s_ccosh.c += -fno-builtin-ccoshf32x -fno-builtin-ccoshf64
|
||||
+CFLAGS-s_ceil.c += -fno-builtin-ceilf32x -fno-builtin-ceilf64
|
||||
+CFLAGS-s_cexp.c += -fno-builtin-cexpf32x -fno-builtin-cexpf64
|
||||
+CFLAGS-s_cimag.c += -fno-builtin-cimagf32x -fno-builtin-cimagf64
|
||||
+CFLAGS-s_clog.c += -fno-builtin-clogf32x -fno-builtin-clogf64
|
||||
+CFLAGS-s_clog10.c += -fno-builtin-clog10f32x -fno-builtin-clog10f64
|
||||
+CFLAGS-s_conj.c += -fno-builtin-conjf32x -fno-builtin-conjf64
|
||||
+CFLAGS-s_copysign.c += -fno-builtin-copysignf32x -fno-builtin-copysignf64
|
||||
+CFLAGS-s_cos.c += -fno-builtin-cosf32x -fno-builtin-cosf64
|
||||
+CFLAGS-w_cosh.c += -fno-builtin-coshf32x -fno-builtin-coshf64
|
||||
+CFLAGS-s_cpow.c += -fno-builtin-cpowf32x -fno-builtin-cpowf64
|
||||
+CFLAGS-s_cproj.c += -fno-builtin-cprojf32x -fno-builtin-cprojf64
|
||||
+CFLAGS-s_creal.c += -fno-builtin-crealf32x -fno-builtin-crealf64
|
||||
+CFLAGS-s_csin.c += -fno-builtin-csinf32x -fno-builtin-csinf64
|
||||
+CFLAGS-s_csinh.c += -fno-builtin-csinhf32x -fno-builtin-csinhf64
|
||||
+CFLAGS-s_csqrt.c += -fno-builtin-csqrtf32x -fno-builtin-csqrtf64
|
||||
+CFLAGS-s_ctan.c += -fno-builtin-ctanf32x -fno-builtin-ctanf64
|
||||
+CFLAGS-s_ctanh.c += -fno-builtin-ctanhf32x -fno-builtin-ctanhf64
|
||||
+CFLAGS-s_erf.c += -fno-builtin-erff32x -fno-builtin-erff64
|
||||
+CFLAGS-s_erfc.c += -fno-builtin-erfcf32x -fno-builtin-erfcf64
|
||||
+CFLAGS-e_exp.c += -fno-builtin-expf32x -fno-builtin-expf64
|
||||
+CFLAGS-w_exp10.c += -fno-builtin-exp10f32x -fno-builtin-exp10f64
|
||||
+CFLAGS-e_exp2.c += -fno-builtin-exp2f32x -fno-builtin-exp2f64
|
||||
+CFLAGS-s_expm1.c += -fno-builtin-expm1f32x -fno-builtin-expm1f64
|
||||
+CFLAGS-s_fabs.c += -fno-builtin-fabsf32x -fno-builtin-fabsf64
|
||||
+CFLAGS-s_fadd.c += -fno-builtin-f32addf32x -fno-builtin-f32addf64
|
||||
+CFLAGS-s_fdim.c += -fno-builtin-fdimf32x -fno-builtin-fdimf64
|
||||
+CFLAGS-s_fdiv.c += -fno-builtin-f32divf32x -fno-builtin-f32divf64
|
||||
+CFLAGS-s_ffma.c += -fno-builtin-f32fmaf32x -fno-builtin-f32fmaf64
|
||||
+CFLAGS-s_floor.c += -fno-builtin-floorf32x -fno-builtin-floorf64
|
||||
+CFLAGS-s_fma.c += -fno-builtin-fmaf32x -fno-builtin-fmaf64
|
||||
+CFLAGS-s_fmax.c += -fno-builtin-fmaxf32x -fno-builtin-fmaxf64
|
||||
+CFLAGS-s_fmaximum.c += -fno-builtin-fmaximumf32x -fno-builtin-fmaximumf64
|
||||
+CFLAGS-s_fmaximum_mag.c += -fno-builtin-fmaximum_magf32x -fno-builtin-fmaximum_magf64
|
||||
+CFLAGS-s_fmaximum_mag_num.c += -fno-builtin-fmaximum_mag_numf32x -fno-builtin-fmaximum_mag_numf64
|
||||
+CFLAGS-s_fmaximum_num.c += -fno-builtin-fmaximum_numf32x -fno-builtin-fmaximum_numf64
|
||||
+CFLAGS-s_fmaxmag.c += -fno-builtin-fmaxmagf32x -fno-builtin-fmaxmagf64
|
||||
+CFLAGS-s_fmin.c += -fno-builtin-fminf32x -fno-builtin-fminf64
|
||||
+CFLAGS-s_fminimum.c += -fno-builtin-fminimumf32x -fno-builtin-fminimumf64
|
||||
+CFLAGS-s_fminimum_mag.c += -fno-builtin-fminimum_magf32x -fno-builtin-fminimum_magf64
|
||||
+CFLAGS-s_fminimum_mag_num.c += -fno-builtin-fminimum_mag_numf32x -fno-builtin-fminimum_mag_numf64
|
||||
+CFLAGS-s_fminimum_num.c += -fno-builtin-fminimum_numf32x -fno-builtin-fminimum_numf64
|
||||
+CFLAGS-s_fminmag.c += -fno-builtin-fminmagf32x -fno-builtin-fminmagf64
|
||||
+CFLAGS-w_fmod.c += -fno-builtin-fmodf32x -fno-builtin-fmodf64
|
||||
+CFLAGS-s_fmul.c += -fno-builtin-f32mulf32x -fno-builtin-f32mulf64
|
||||
+CFLAGS-s_frexp.c += -fno-builtin-frexpf32x -fno-builtin-frexpf64
|
||||
+CFLAGS-s_fromfp.c += -fno-builtin-fromfpf32x -fno-builtin-fromfpf64
|
||||
+CFLAGS-s_fromfpx.c += -fno-builtin-fromfpxf32x -fno-builtin-fromfpxf64
|
||||
+CFLAGS-s_fsqrt.c += -fno-builtin-f32sqrtf32x -fno-builtin-f32sqrtf64
|
||||
+CFLAGS-s_fsub.c += -fno-builtin-f32subf32x -fno-builtin-f32subf64
|
||||
+CFLAGS-s_getpayload.c += -fno-builtin-getpayloadf32x -fno-builtin-getpayloadf64
|
||||
+CFLAGS-w_hypot.c += -fno-builtin-hypotf32x -fno-builtin-hypotf64
|
||||
+CFLAGS-w_ilogb.c += -fno-builtin-ilogbf32x -fno-builtin-ilogbf64
|
||||
+CFLAGS-w_j0.c += -fno-builtin-j0f32x -fno-builtin-j0f64
|
||||
+CFLAGS-w_j1.c += -fno-builtin-j1f32x -fno-builtin-j1f64
|
||||
+CFLAGS-w_jn.c += -fno-builtin-jnf32x -fno-builtin-jnf64
|
||||
+CFLAGS-s_ldexp.c += -fno-builtin-ldexpf32x -fno-builtin-ldexpf64
|
||||
+CFLAGS-w_lgamma.c += -fno-builtin-lgammaf32x -fno-builtin-lgammaf64
|
||||
+CFLAGS-w_lgamma_r.c += -fno-builtin-lgammaf32x_r -fno-builtin-lgammaf64_r
|
||||
+CFLAGS-w_llogb.c += -fno-builtin-llogbf32x -fno-builtin-llogbf64
|
||||
+CFLAGS-s_llrint.c += -fno-builtin-llrintf32x -fno-builtin-llrintf64
|
||||
+CFLAGS-s_llround.c += -fno-builtin-llroundf32x -fno-builtin-llroundf64
|
||||
+CFLAGS-e_log.c += -fno-builtin-logf32x -fno-builtin-logf64
|
||||
+CFLAGS-w_log10.c += -fno-builtin-log10f32x -fno-builtin-log10f64
|
||||
+CFLAGS-w_log1p.c += -fno-builtin-log1pf32x -fno-builtin-log1pf64
|
||||
+CFLAGS-e_log2.c += -fno-builtin-log2f32x -fno-builtin-log2f64
|
||||
+CFLAGS-s_logb.c += -fno-builtin-logbf32x -fno-builtin-logbf64
|
||||
+CFLAGS-s_lrint.c += -fno-builtin-lrintf32x -fno-builtin-lrintf64
|
||||
+CFLAGS-s_lround.c += -fno-builtin-lroundf32x -fno-builtin-lroundf64
|
||||
+CFLAGS-s_modf.c += -fno-builtin-modff32x -fno-builtin-modff64
|
||||
+CFLAGS-s_nan.c += -fno-builtin-nanf32x -fno-builtin-nanf64
|
||||
+CFLAGS-s_nearbyint.c += -fno-builtin-nearbyintf32x -fno-builtin-nearbyintf64
|
||||
+CFLAGS-s_nextafter.c += -fno-builtin-nextafterf32x -fno-builtin-nextafterf64
|
||||
+CFLAGS-s_nextdown.c += -fno-builtin-nextdownf32x -fno-builtin-nextdownf64
|
||||
+CFLAGS-s_nextup.c += -fno-builtin-nextupf32x -fno-builtin-nextupf64
|
||||
+CFLAGS-e_pow.c += -fno-builtin-powf32x -fno-builtin-powf64
|
||||
+CFLAGS-w_remainder.c += -fno-builtin-remainderf32x -fno-builtin-remainderf64
|
||||
+CFLAGS-s_remquo.c += -fno-builtin-remquof32x -fno-builtin-remquof64
|
||||
+CFLAGS-s_rint.c += -fno-builtin-rintf32x -fno-builtin-rintf64
|
||||
+CFLAGS-s_round.c += -fno-builtin-roundf32x -fno-builtin-roundf64
|
||||
+CFLAGS-s_roundeven.c += -fno-builtin-roundevenf32x -fno-builtin-roundevenf64
|
||||
+CFLAGS-w_scalbln.c += -fno-builtin-scalblnf32x -fno-builtin-scalblnf64
|
||||
+CFLAGS-s_scalbn.c += -fno-builtin-scalbnf32x -fno-builtin-scalbnf64
|
||||
+CFLAGS-s_setpayload.c += -fno-builtin-setpayloadf32x -fno-builtin-setpayloadf64
|
||||
+CFLAGS-s_setpayloadsig.c += -fno-builtin-setpayloadsigf32x -fno-builtin-setpayloadsigf64
|
||||
+CFLAGS-s_sin.c += -fno-builtin-sinf32x -fno-builtin-sinf64
|
||||
+CFLAGS-s_sincos.c += -fno-builtin-sincosf32x -fno-builtin-sincosf64
|
||||
+CFLAGS-w_sinh.c += -fno-builtin-sinhf32x -fno-builtin-sinhf64
|
||||
+CFLAGS-w_sqrt.c += -fno-builtin-sqrtf32x -fno-builtin-sqrtf64
|
||||
+CFLAGS-s_tan.c += -fno-builtin-tanf32x -fno-builtin-tanf64
|
||||
+CFLAGS-s_tanh.c += -fno-builtin-tanhf32x -fno-builtin-tanhf64
|
||||
+CFLAGS-w_tgamma.c += -fno-builtin-tgammaf32x -fno-builtin-tgammaf64
|
||||
+CFLAGS-s_totalorder.c += -fno-builtin-totalorderf32x -fno-builtin-totalorderf64
|
||||
+CFLAGS-s_totalordermag.c += -fno-builtin-totalordermagf32x -fno-builtin-totalordermagf64
|
||||
+CFLAGS-s_trunc.c += -fno-builtin-truncf32x -fno-builtin-truncf64
|
||||
+CFLAGS-s_ufromfp.c += -fno-builtin-ufromfpf32x -fno-builtin-ufromfpf64
|
||||
+CFLAGS-s_ufromfpx.c += -fno-builtin-ufromfpxf32x -fno-builtin-ufromfpxf64
|
||||
+CFLAGS-s_y0.c += -fno-builtin-y0f32x -fno-builtin-y0f64
|
||||
+CFLAGS-s_y1.c += -fno-builtin-y1f32x -fno-builtin-y1f64
|
||||
+CFLAGS-s_yn.c += -fno-builtin-ynf32x -fno-builtin-ynf64
|
||||
+
|
||||
+# Likewise, for _Float32 aliases.
|
||||
+CFLAGS-w_acosf.c += -fno-builtin-acosf32
|
||||
+CFLAGS-w_acoshf.c += -fno-builtin-acoshf32
|
||||
+CFLAGS-w_asinf.c += -fno-builtin-asinf32
|
||||
+CFLAGS-s_asinhf.c += -fno-builtin-asinhf32
|
||||
+CFLAGS-s_atanf.c += -fno-builtin-atanf32
|
||||
+CFLAGS-w_atan2f.c += -fno-builtin-atan2f32
|
||||
+CFLAGS-w_atanhf.c += -fno-builtin-atanhf32
|
||||
+CFLAGS-s_cabsf.c += -fno-builtin-cabsf32
|
||||
+CFLAGS-s_cacosf.c += -fno-builtin-cacosf32
|
||||
+CFLAGS-s_cacoshf.c += -fno-builtin-cacoshf32
|
||||
+CFLAGS-s_canonicalizef.c += -fno-builtin-canonicalizef32
|
||||
+CFLAGS-s_cargf.c += -fno-builtin-cargf32
|
||||
+CFLAGS-s_casinf.c += -fno-builtin-casinf32
|
||||
+CFLAGS-s_casinhf.c += -fno-builtin-casinhf32
|
||||
+CFLAGS-s_catanf.c += -fno-builtin-catanf32
|
||||
+CFLAGS-s_catanhf.c += -fno-builtin-catanhf32
|
||||
+CFLAGS-s_cbrtf.c += -fno-builtin-cbrtf32
|
||||
+CFLAGS-s_ccosf.c += -fno-builtin-ccosf32
|
||||
+CFLAGS-s_ccoshf.c += -fno-builtin-ccoshf32
|
||||
+CFLAGS-s_ceilf.c += -fno-builtin-ceilf32
|
||||
+CFLAGS-s_cexpf.c += -fno-builtin-cexpf32
|
||||
+CFLAGS-s_cimagf.c += -fno-builtin-cimagf32
|
||||
+CFLAGS-s_clogf.c += -fno-builtin-clogf32
|
||||
+CFLAGS-s_clog10f.c += -fno-builtin-clog10f32
|
||||
+CFLAGS-s_conjf.c += -fno-builtin-conjf32
|
||||
+CFLAGS-s_copysignf.c += -fno-builtin-copysignf32
|
||||
+CFLAGS-s_cosf.c += -fno-builtin-cosf32
|
||||
+CFLAGS-w_coshf.c += -fno-builtin-coshf32
|
||||
+CFLAGS-s_cpowf.c += -fno-builtin-cpowf32
|
||||
+CFLAGS-s_cprojf.c += -fno-builtin-cprojf32
|
||||
+CFLAGS-s_crealf.c += -fno-builtin-crealf32
|
||||
+CFLAGS-s_csinf.c += -fno-builtin-csinf32
|
||||
+CFLAGS-s_csinhf.c += -fno-builtin-csinhf32
|
||||
+CFLAGS-s_csqrtf.c += -fno-builtin-csqrtf32
|
||||
+CFLAGS-s_ctanf.c += -fno-builtin-ctanf32
|
||||
+CFLAGS-s_ctanhf.c += -fno-builtin-ctanhf32
|
||||
+CFLAGS-s_erff.c += -fno-builtin-erff32
|
||||
+CFLAGS-s_erfcf.c += -fno-builtin-erfcf32
|
||||
+CFLAGS-e_expf.c += -fno-builtin-expf32
|
||||
+CFLAGS-w_exp10f.c += -fno-builtin-exp10f32
|
||||
+CFLAGS-e_exp2f.c += -fno-builtin-exp2f32
|
||||
+CFLAGS-s_expm1f.c += -fno-builtin-expm1f32
|
||||
+CFLAGS-s_fabsf.c += -fno-builtin-fabsf32
|
||||
+CFLAGS-s_fdimf.c += -fno-builtin-fdimf32
|
||||
+CFLAGS-s_floorf.c += -fno-builtin-floorf32
|
||||
+CFLAGS-s_fmaf.c += -fno-builtin-fmaf32
|
||||
+CFLAGS-s_fmaxf.c += -fno-builtin-fmaxf32
|
||||
+CFLAGS-s_fmaximumf.c += -fno-builtin-fmaximumf32
|
||||
+CFLAGS-s_fmaximum_magf.c += -fno-builtin-fmaximum_magf32
|
||||
+CFLAGS-s_fmaximum_mag_numf.c += -fno-builtin-fmaximum_mag_numf32
|
||||
+CFLAGS-s_fmaximum_numf.c += -fno-builtin-fmaximum_numf32
|
||||
+CFLAGS-s_fmaxmagf.c += -fno-builtin-fmaxmagf32
|
||||
+CFLAGS-s_fminf.c += -fno-builtin-fminf32
|
||||
+CFLAGS-s_fminimumf.c += -fno-builtin-fminimumf32
|
||||
+CFLAGS-s_fminimum_magf.c += -fno-builtin-fminimum_magf32
|
||||
+CFLAGS-s_fminimum_mag_numf.c += -fno-builtin-fminimum_mag_numf32
|
||||
+CFLAGS-s_fminimum_numf.c += -fno-builtin-fminimum_numf32
|
||||
+CFLAGS-s_fminmagf.c += -fno-builtin-fminmagf32
|
||||
+CFLAGS-w_fmodf.c += -fno-builtin-fmodf32
|
||||
+CFLAGS-s_frexpf.c += -fno-builtin-frexpf32
|
||||
+CFLAGS-s_fromfpf.c += -fno-builtin-fromfpf32
|
||||
+CFLAGS-s_fromfpxf.c += -fno-builtin-fromfpxf32
|
||||
+CFLAGS-s_getpayloadf.c += -fno-builtin-getpayloadf32
|
||||
+CFLAGS-w_hypotf.c += -fno-builtin-hypotf32
|
||||
+CFLAGS-w_ilogbf.c += -fno-builtin-ilogbf32
|
||||
+CFLAGS-w_j0f.c += -fno-builtin-j0f32
|
||||
+CFLAGS-w_j1f.c += -fno-builtin-j1f32
|
||||
+CFLAGS-w_jnf.c += -fno-builtin-jnf32
|
||||
+CFLAGS-s_ldexpf.c += -fno-builtin-ldexpf32
|
||||
+CFLAGS-w_lgammaf.c += -fno-builtin-lgammaf32
|
||||
+CFLAGS-w_lgammaf_r.c += -fno-builtin-lgammaf32_r
|
||||
+CFLAGS-w_llogbf.c += -fno-builtin-llogbf32
|
||||
+CFLAGS-s_llrintf.c += -fno-builtin-llrintf32
|
||||
+CFLAGS-s_llroundf.c += -fno-builtin-llroundf32
|
||||
+CFLAGS-e_logf.c += -fno-builtin-logf32
|
||||
+CFLAGS-w_log10f.c += -fno-builtin-log10f32
|
||||
+CFLAGS-w_log1pf.c += -fno-builtin-log1pf32
|
||||
+CFLAGS-e_log2f.c += -fno-builtin-log2f32
|
||||
+CFLAGS-s_logbf.c += -fno-builtin-logbf32
|
||||
+CFLAGS-s_lrintf.c += -fno-builtin-lrintf32
|
||||
+CFLAGS-s_lroundf.c += -fno-builtin-lroundf32
|
||||
+CFLAGS-s_modff.c += -fno-builtin-modff32
|
||||
+CFLAGS-s_nanf.c += -fno-builtin-nanf32
|
||||
+CFLAGS-s_nearbyintf.c += -fno-builtin-nearbyintf32
|
||||
+CFLAGS-s_nextafterf.c += -fno-builtin-nextafterf32
|
||||
+CFLAGS-s_nextdownf.c += -fno-builtin-nextdownf32
|
||||
+CFLAGS-s_nextupf.c += -fno-builtin-nextupf32
|
||||
+CFLAGS-e_powf.c += -fno-builtin-powf32
|
||||
+CFLAGS-w_remainderf.c += -fno-builtin-remainderf32
|
||||
+CFLAGS-s_remquof.c += -fno-builtin-remquof32
|
||||
+CFLAGS-s_rintf.c += -fno-builtin-rintf32
|
||||
+CFLAGS-s_roundf.c += -fno-builtin-roundf32
|
||||
+CFLAGS-s_roundevenf.c += -fno-builtin-roundevenf32
|
||||
+CFLAGS-w_scalblnf.c += -fno-builtin-scalblnf32
|
||||
+CFLAGS-s_scalbnf.c += -fno-builtin-scalbnf32
|
||||
+CFLAGS-s_setpayloadf.c += -fno-builtin-setpayloadf32
|
||||
+CFLAGS-s_setpayloadsigf.c += -fno-builtin-setpayloadsigf32
|
||||
+CFLAGS-s_sinf.c += -fno-builtin-sinf32
|
||||
+CFLAGS-s_sincosf.c += -fno-builtin-sincosf32
|
||||
+CFLAGS-w_sinhf.c += -fno-builtin-sinhf32
|
||||
+CFLAGS-w_sqrtf.c += -fno-builtin-sqrtf32
|
||||
+CFLAGS-s_tanf.c += -fno-builtin-tanf32
|
||||
+CFLAGS-s_tanhf.c += -fno-builtin-tanhf32
|
||||
+CFLAGS-w_tgammaf.c += -fno-builtin-tgammaf32
|
||||
+CFLAGS-s_totalorderf.c += -fno-builtin-totalorderf32
|
||||
+CFLAGS-s_totalordermagf.c += -fno-builtin-totalordermagf32
|
||||
+CFLAGS-s_truncf.c += -fno-builtin-truncf32
|
||||
+CFLAGS-s_ufromfpf.c += -fno-builtin-ufromfpf32
|
||||
+CFLAGS-s_ufromfpxf.c += -fno-builtin-ufromfpxf32
|
||||
+CFLAGS-s_y0f.c += -fno-builtin-y0f32
|
||||
+CFLAGS-s_y1f.c += -fno-builtin-y1f32
|
||||
+CFLAGS-s_ynf.c += -fno-builtin-ynf32
|
||||
+
|
||||
# These files quiet sNaNs in a way that is optimized away without
|
||||
# -fsignaling-nans.
|
||||
CFLAGS-s_modf.c += -fsignaling-nans
|
||||
diff --git a/sysdeps/ieee754/float128/Makefile b/sysdeps/ieee754/float128/Makefile
|
||||
index 571a841809234edd..f869e80f268ba446 100644
|
||||
--- a/sysdeps/ieee754/float128/Makefile
|
||||
+++ b/sysdeps/ieee754/float128/Makefile
|
||||
@@ -10,3 +10,130 @@ endif
|
||||
ifeq ($(subdir),wcsmbs)
|
||||
routines += wcstof128_l wcstof128 wcstof128_nan
|
||||
endif
|
||||
+
|
||||
+ifeq ($(subdir),math)
|
||||
+CFLAGS-w_acosf128.c += -fno-builtin-acosf64x
|
||||
+CFLAGS-w_acoshf128.c += -fno-builtin-acoshf64x
|
||||
+CFLAGS-w_asinf128.c += -fno-builtin-asinf64x
|
||||
+CFLAGS-s_asinhf128.c += -fno-builtin-asinhf64x
|
||||
+CFLAGS-s_atanf128.c += -fno-builtin-atanf64x
|
||||
+CFLAGS-w_atan2f128.c += -fno-builtin-atan2f64x
|
||||
+CFLAGS-w_atanhf128.c += -fno-builtin-atanhf64x
|
||||
+CFLAGS-s_cabsf128.c += -fno-builtin-cabsf64x
|
||||
+CFLAGS-s_cacosf128.c += -fno-builtin-cacosf64x
|
||||
+CFLAGS-s_cacoshf128.c += -fno-builtin-cacoshf64x
|
||||
+CFLAGS-s_canonicalizef128.c += -fno-builtin-canonicalizef64x
|
||||
+CFLAGS-s_cargf128.c += -fno-builtin-cargf64x
|
||||
+CFLAGS-s_casinf128.c += -fno-builtin-casinf64x
|
||||
+CFLAGS-s_casinhf128.c += -fno-builtin-casinhf64x
|
||||
+CFLAGS-s_catanf128.c += -fno-builtin-catanf64x
|
||||
+CFLAGS-s_catanhf128.c += -fno-builtin-catanhf64x
|
||||
+CFLAGS-s_cbrtf128.c += -fno-builtin-cbrtf64x
|
||||
+CFLAGS-s_ccosf128.c += -fno-builtin-ccosf64x
|
||||
+CFLAGS-s_ccoshf128.c += -fno-builtin-ccoshf64x
|
||||
+CFLAGS-s_ceilf128.c += -fno-builtin-ceilf64x
|
||||
+CFLAGS-s_cexpf128.c += -fno-builtin-cexpf64x
|
||||
+CFLAGS-s_cimagf128.c += -fno-builtin-cimagf64x
|
||||
+CFLAGS-s_clogf128.c += -fno-builtin-clogf64x
|
||||
+CFLAGS-s_clog10f128.c += -fno-builtin-clog10f64x
|
||||
+CFLAGS-s_conjf128.c += -fno-builtin-conjf64x
|
||||
+CFLAGS-s_copysignf128.c += -fno-builtin-copysignf64x
|
||||
+CFLAGS-s_cosf128.c += -fno-builtin-cosf64x
|
||||
+CFLAGS-w_coshf128.c += -fno-builtin-coshf64x
|
||||
+CFLAGS-s_cpowf128.c += -fno-builtin-cpowf64x
|
||||
+CFLAGS-s_cprojf128.c += -fno-builtin-cprojf64x
|
||||
+CFLAGS-s_crealf128.c += -fno-builtin-crealf64x
|
||||
+CFLAGS-s_csinf128.c += -fno-builtin-csinf64x
|
||||
+CFLAGS-s_csinhf128.c += -fno-builtin-csinhf64x
|
||||
+CFLAGS-s_csqrtf128.c += -fno-builtin-csqrtf64x
|
||||
+CFLAGS-s_ctanf128.c += -fno-builtin-ctanf64x
|
||||
+CFLAGS-s_ctanhf128.c += -fno-builtin-ctanhf64x
|
||||
+CFLAGS-s_daddf128.c += -fno-builtin-f64addf64x
|
||||
+CFLAGS-s_ddivf128.c += -fno-builtin-f64divf64x
|
||||
+CFLAGS-s_dfmaf128.c += -fno-builtin-f64fmaf64x
|
||||
+CFLAGS-s_dmulf128.c += -fno-builtin-f64mulf64x
|
||||
+CFLAGS-s_dsqrtf128.c += -fno-builtin-f64sqrtf64x
|
||||
+CFLAGS-s_dsubf128.c += -fno-builtin-f64subf64x
|
||||
+CFLAGS-s_erff128.c += -fno-builtin-erff64x
|
||||
+CFLAGS-s_erfcf128.c += -fno-builtin-erfcf64x
|
||||
+CFLAGS-e_expf128.c += -fno-builtin-expf64x
|
||||
+CFLAGS-w_exp10f128.c += -fno-builtin-exp10f64x
|
||||
+CFLAGS-e_exp2f128.c += -fno-builtin-exp2f64x
|
||||
+CFLAGS-s_expm1f128.c += -fno-builtin-expm1f64x
|
||||
+CFLAGS-s_fabsf128.c += -fno-builtin-fabsf64x
|
||||
+CFLAGS-s_faddf128.c += -fno-builtin-f32addf64x
|
||||
+CFLAGS-s_fdimf128.c += -fno-builtin-fdimf64x
|
||||
+CFLAGS-s_fdivf128.c += -fno-builtin-f32divf64x
|
||||
+CFLAGS-s_ffmaf128.c += -fno-builtin-f32fmaf64x
|
||||
+CFLAGS-s_floorf128.c += -fno-builtin-floorf64x
|
||||
+CFLAGS-s_fmaf128.c += -fno-builtin-fmaf64x
|
||||
+CFLAGS-s_fmaxf128.c += -fno-builtin-fmaxf64x
|
||||
+CFLAGS-s_fmaximumf128.c += -fno-builtin-fmaximumf64x
|
||||
+CFLAGS-s_fmaximum_magf128.c += -fno-builtin-fmaximum_magf64x
|
||||
+CFLAGS-s_fmaximum_mag_numf128.c += -fno-builtin-fmaximum_mag_numf64x
|
||||
+CFLAGS-s_fmaximum_numf128.c += -fno-builtin-fmaximum_numf64x
|
||||
+CFLAGS-s_fmaxmagf128.c += -fno-builtin-fmaxmagf64x
|
||||
+CFLAGS-s_fminf128.c += -fno-builtin-fminf64x
|
||||
+CFLAGS-s_fminimumf128.c += -fno-builtin-fminimumf64x
|
||||
+CFLAGS-s_fminimum_magf128.c += -fno-builtin-fminimum_magf64x
|
||||
+CFLAGS-s_fminimum_mag_numf128.c += -fno-builtin-fminimum_mag_numf64x
|
||||
+CFLAGS-s_fminimum_numf128.c += -fno-builtin-fminimum_numf64x
|
||||
+CFLAGS-s_fminmagf128.c += -fno-builtin-fminmagf64x
|
||||
+CFLAGS-w_fmodf128.c += -fno-builtin-fmodf64x
|
||||
+CFLAGS-s_fmulf128.c += -fno-builtin-f32mulf64x
|
||||
+CFLAGS-s_frexpf128.c += -fno-builtin-frexpf64x
|
||||
+CFLAGS-s_fromfpf128.c += -fno-builtin-fromfpf64x
|
||||
+CFLAGS-s_fromfpxf128.c += -fno-builtin-fromfpxf64x
|
||||
+CFLAGS-s_fsqrtf128.c += -fno-builtin-f32sqrtf64x
|
||||
+CFLAGS-s_fsubf128.c += -fno-builtin-f32subf64x
|
||||
+CFLAGS-s_getpayloadf128.c += -fno-builtin-getpayloadf64x
|
||||
+CFLAGS-w_hypotf128.c += -fno-builtin-hypotf64x
|
||||
+CFLAGS-w_ilogbf128.c += -fno-builtin-ilogbf64x
|
||||
+CFLAGS-w_j0f128.c += -fno-builtin-j0f64x
|
||||
+CFLAGS-w_j1f128.c += -fno-builtin-j1f64x
|
||||
+CFLAGS-w_jnf128.c += -fno-builtin-jnf64x
|
||||
+CFLAGS-s_ldexpf128.c += -fno-builtin-ldexpf64x
|
||||
+CFLAGS-w_lgammaf128.c += -fno-builtin-lgammaf64x
|
||||
+CFLAGS-w_lgammaf128_r.c += -fno-builtin-lgammaf64x_r
|
||||
+CFLAGS-w_llogbf128.c += -fno-builtin-llogbf64x
|
||||
+CFLAGS-s_llrintf128.c += -fno-builtin-llrintf64x
|
||||
+CFLAGS-s_llroundf128.c += -fno-builtin-llroundf64x
|
||||
+CFLAGS-e_logf128.c += -fno-builtin-logf64x
|
||||
+CFLAGS-w_log10f128.c += -fno-builtin-log10f64x
|
||||
+CFLAGS-w_log1pf128.c += -fno-builtin-log1pf64x
|
||||
+CFLAGS-e_log2f128.c += -fno-builtin-log2f64x
|
||||
+CFLAGS-s_logbf128.c += -fno-builtin-logbf64x
|
||||
+CFLAGS-s_lrintf128.c += -fno-builtin-lrintf64x
|
||||
+CFLAGS-s_lroundf128.c += -fno-builtin-lroundf64x
|
||||
+CFLAGS-s_modff128.c += -fno-builtin-modff64x
|
||||
+CFLAGS-s_nanf128.c += -fno-builtin-nanf64x
|
||||
+CFLAGS-s_nearbyintf128.c += -fno-builtin-nearbyintf64x
|
||||
+CFLAGS-s_nextafterf128.c += -fno-builtin-nextafterf64x
|
||||
+CFLAGS-s_nextdownf128.c += -fno-builtin-nextdownf64x
|
||||
+CFLAGS-s_nextupf128.c += -fno-builtin-nextupf64x
|
||||
+CFLAGS-e_powf128.c += -fno-builtin-powf64x
|
||||
+CFLAGS-w_remainderf128.c += -fno-builtin-remainderf64x
|
||||
+CFLAGS-s_remquof128.c += -fno-builtin-remquof64x
|
||||
+CFLAGS-s_rintf128.c += -fno-builtin-rintf64x
|
||||
+CFLAGS-s_roundf128.c += -fno-builtin-roundf64x
|
||||
+CFLAGS-s_roundevenf128.c += -fno-builtin-roundevenf64x
|
||||
+CFLAGS-w_scalblnf128.c += -fno-builtin-scalblnf64x
|
||||
+CFLAGS-s_scalbnf128.c += -fno-builtin-scalbnf64x
|
||||
+CFLAGS-s_setpayloadf128.c += -fno-builtin-setpayloadf64x
|
||||
+CFLAGS-s_setpayloadsigf128.c += -fno-builtin-setpayloadsigf64x
|
||||
+CFLAGS-s_sinf128.c += -fno-builtin-sinf64x
|
||||
+CFLAGS-s_sincosf128.c += -fno-builtin-sincosf64x
|
||||
+CFLAGS-w_sinhf128.c += -fno-builtin-sinhf64x
|
||||
+CFLAGS-w_sqrtf128.c += -fno-builtin-sqrtf64x
|
||||
+CFLAGS-s_tanf128.c += -fno-builtin-tanf64x
|
||||
+CFLAGS-s_tanhf128.c += -fno-builtin-tanhf64x
|
||||
+CFLAGS-w_tgammaf128.c += -fno-builtin-tgammaf64x
|
||||
+CFLAGS-s_totalorderf128.c += -fno-builtin-totalorderf64x
|
||||
+CFLAGS-s_totalordermagf128.c += -fno-builtin-totalordermagf64x
|
||||
+CFLAGS-s_truncf128.c += -fno-builtin-truncf64x
|
||||
+CFLAGS-s_ufromfpf128.c += -fno-builtin-ufromfpf64x
|
||||
+CFLAGS-s_ufromfpxf128.c += -fno-builtin-ufromfpxf64x
|
||||
+CFLAGS-s_y0f128.c += -fno-builtin-y0f64x
|
||||
+CFLAGS-s_y1f128.c += -fno-builtin-y1f64x
|
||||
+CFLAGS-s_ynf128.c += -fno-builtin-ynf64x
|
||||
+endif
|
||||
diff --git a/sysdeps/ieee754/ldbl-128/Makefile b/sysdeps/ieee754/ldbl-128/Makefile
|
||||
index 8fd6dad343bde2c9..9cbfc7ff6e8cd6f7 100644
|
||||
--- a/sysdeps/ieee754/ldbl-128/Makefile
|
||||
+++ b/sysdeps/ieee754/ldbl-128/Makefile
|
||||
@@ -1 +1,128 @@
|
||||
long-double-fcts = yes
|
||||
+
|
||||
+ifeq ($(subdir),math)
|
||||
+CFLAGS-w_acosl.c += -fno-builtin-acosf64x -fno-builtin-acosf128
|
||||
+CFLAGS-w_acoshl.c += -fno-builtin-acoshf64x -fno-builtin-acoshf128
|
||||
+CFLAGS-w_asinl.c += -fno-builtin-asinf64x -fno-builtin-asinf128
|
||||
+CFLAGS-s_asinhl.c += -fno-builtin-asinhf64x -fno-builtin-asinhf128
|
||||
+CFLAGS-s_atanl.c += -fno-builtin-atanf64x -fno-builtin-atanf128
|
||||
+CFLAGS-w_atan2l.c += -fno-builtin-atan2f64x -fno-builtin-atan2f128
|
||||
+CFLAGS-w_atanhl.c += -fno-builtin-atanhf64x -fno-builtin-atanhf128
|
||||
+CFLAGS-s_cabsl.c += -fno-builtin-cabsf64x -fno-builtin-cabsf128
|
||||
+CFLAGS-s_cacosl.c += -fno-builtin-cacosf64x -fno-builtin-cacosf128
|
||||
+CFLAGS-s_cacoshl.c += -fno-builtin-cacoshf64x -fno-builtin-cacoshf128
|
||||
+CFLAGS-s_canonicalizel.c += -fno-builtin-canonicalizef64x -fno-builtin-canonicalizef128
|
||||
+CFLAGS-s_cargl.c += -fno-builtin-cargf64x -fno-builtin-cargf128
|
||||
+CFLAGS-s_casinl.c += -fno-builtin-casinf64x -fno-builtin-casinf128
|
||||
+CFLAGS-s_casinhl.c += -fno-builtin-casinhf64x -fno-builtin-casinhf128
|
||||
+CFLAGS-s_catanl.c += -fno-builtin-catanf64x -fno-builtin-catanf128
|
||||
+CFLAGS-s_catanhl.c += -fno-builtin-catanhf64x -fno-builtin-catanhf128
|
||||
+CFLAGS-s_cbrtl.c += -fno-builtin-cbrtf64x -fno-builtin-cbrtf128
|
||||
+CFLAGS-s_ccosl.c += -fno-builtin-ccosf64x -fno-builtin-ccosf128
|
||||
+CFLAGS-s_ccoshl.c += -fno-builtin-ccoshf64x -fno-builtin-ccoshf128
|
||||
+CFLAGS-s_ceill.c += -fno-builtin-ceilf64x -fno-builtin-ceilf128
|
||||
+CFLAGS-s_cexpl.c += -fno-builtin-cexpf64x -fno-builtin-cexpf128
|
||||
+CFLAGS-s_cimagl.c += -fno-builtin-cimagf64x -fno-builtin-cimagf128
|
||||
+CFLAGS-s_clogl.c += -fno-builtin-clogf64x -fno-builtin-clogf128
|
||||
+CFLAGS-s_clog10l.c += -fno-builtin-clog10f64x -fno-builtin-clog10f128
|
||||
+CFLAGS-s_conjl.c += -fno-builtin-conjf64x -fno-builtin-conjf128
|
||||
+CFLAGS-s_copysignl.c += -fno-builtin-copysignf64x -fno-builtin-copysignf128
|
||||
+CFLAGS-s_cosl.c += -fno-builtin-cosf64x -fno-builtin-cosf128
|
||||
+CFLAGS-w_coshl.c += -fno-builtin-coshf64x -fno-builtin-coshf128
|
||||
+CFLAGS-s_cpowl.c += -fno-builtin-cpowf64x -fno-builtin-cpowf128
|
||||
+CFLAGS-s_cprojl.c += -fno-builtin-cprojf64x -fno-builtin-cprojf128
|
||||
+CFLAGS-s_creall.c += -fno-builtin-crealf64x -fno-builtin-crealf128
|
||||
+CFLAGS-s_csinl.c += -fno-builtin-csinf64x -fno-builtin-csinf128
|
||||
+CFLAGS-s_csinhl.c += -fno-builtin-csinhf64x -fno-builtin-csinhf128
|
||||
+CFLAGS-s_csqrtl.c += -fno-builtin-csqrtf64x -fno-builtin-csqrtf128
|
||||
+CFLAGS-s_ctanl.c += -fno-builtin-ctanf64x -fno-builtin-ctanf128
|
||||
+CFLAGS-s_ctanhl.c += -fno-builtin-ctanhf64x -fno-builtin-ctanhf128
|
||||
+CFLAGS-s_daddl.c += -fno-builtin-f64addf64x -fno-builtin-f64addf128
|
||||
+CFLAGS-s_ddivl.c += -fno-builtin-f64divf64x -fno-builtin-f64divf128
|
||||
+CFLAGS-s_dfmal.c += -fno-builtin-f64fmaf64x -fno-builtin-f64fmaf128
|
||||
+CFLAGS-s_dmull.c += -fno-builtin-f64mulf64x -fno-builtin-f64mulf128
|
||||
+CFLAGS-s_dsqrtl.c += -fno-builtin-f64sqrtf64x -fno-builtin-f64sqrtf128
|
||||
+CFLAGS-s_dsubl.c += -fno-builtin-f64subf64x -fno-builtin-f64subf128
|
||||
+CFLAGS-s_erfl.c += -fno-builtin-erff64x -fno-builtin-erff128
|
||||
+CFLAGS-s_erfcl.c += -fno-builtin-erfcf64x -fno-builtin-erfcf128
|
||||
+CFLAGS-e_expl.c += -fno-builtin-expf64x -fno-builtin-expf128
|
||||
+CFLAGS-w_exp10l.c += -fno-builtin-exp10f64x -fno-builtin-exp10f128
|
||||
+CFLAGS-e_exp2l.c += -fno-builtin-exp2f64x -fno-builtin-exp2f128
|
||||
+CFLAGS-s_expm1l.c += -fno-builtin-expm1f64x -fno-builtin-expm1f128
|
||||
+CFLAGS-s_fabsl.c += -fno-builtin-fabsf64x -fno-builtin-fabsf128
|
||||
+CFLAGS-s_faddl.c += -fno-builtin-f32addf64x -fno-builtin-f32addf128
|
||||
+CFLAGS-s_fdiml.c += -fno-builtin-fdimf64x -fno-builtin-fdimf128
|
||||
+CFLAGS-s_fdivl.c += -fno-builtin-f32divf64x -fno-builtin-f32divf128
|
||||
+CFLAGS-s_ffmal.c += -fno-builtin-f32fmaf64x -fno-builtin-f32fmaf128
|
||||
+CFLAGS-s_floorl.c += -fno-builtin-floorf64x -fno-builtin-floorf128
|
||||
+CFLAGS-s_fmal.c += -fno-builtin-fmaf64x -fno-builtin-fmaf128
|
||||
+CFLAGS-s_fmaxl.c += -fno-builtin-fmaxf64x -fno-builtin-fmaxf128
|
||||
+CFLAGS-s_fmaximuml.c += -fno-builtin-fmaximumf64x -fno-builtin-fmaximumf128
|
||||
+CFLAGS-s_fmaximum_magl.c += -fno-builtin-fmaximum_magf64x -fno-builtin-fmaximum_magf128
|
||||
+CFLAGS-s_fmaximum_mag_numl.c += -fno-builtin-fmaximum_mag_numf64x -fno-builtin-fmaximum_mag_numf128
|
||||
+CFLAGS-s_fmaximum_numl.c += -fno-builtin-fmaximum_numf64x -fno-builtin-fmaximum_numf128
|
||||
+CFLAGS-s_fmaxmagl.c += -fno-builtin-fmaxmagf64x -fno-builtin-fmaxmagf128
|
||||
+CFLAGS-s_fminl.c += -fno-builtin-fminf64x -fno-builtin-fminf128
|
||||
+CFLAGS-s_fminimuml.c += -fno-builtin-fminimumf64x -fno-builtin-fminimumf128
|
||||
+CFLAGS-s_fminimum_magl.c += -fno-builtin-fminimum_magf64x -fno-builtin-fminimum_magf128
|
||||
+CFLAGS-s_fminimum_mag_numl.c += -fno-builtin-fminimum_mag_numf64x -fno-builtin-fminimum_mag_numf128
|
||||
+CFLAGS-s_fminimum_numl.c += -fno-builtin-fminimum_numf64x -fno-builtin-fminimum_numf128
|
||||
+CFLAGS-s_fminmagl.c += -fno-builtin-fminmagf64x -fno-builtin-fminmagf128
|
||||
+CFLAGS-w_fmodl.c += -fno-builtin-fmodf64x -fno-builtin-fmodf128
|
||||
+CFLAGS-s_fmull.c += -fno-builtin-f32mulf64x -fno-builtin-f32mulf128
|
||||
+CFLAGS-s_frexpl.c += -fno-builtin-frexpf64x -fno-builtin-frexpf128
|
||||
+CFLAGS-s_fromfpl.c += -fno-builtin-fromfpf64x -fno-builtin-fromfpf128
|
||||
+CFLAGS-s_fromfpxl.c += -fno-builtin-fromfpxf64x -fno-builtin-fromfpxf128
|
||||
+CFLAGS-s_fsqrtl.c += -fno-builtin-f32sqrtf64x -fno-builtin-f32sqrtf128
|
||||
+CFLAGS-s_fsubl.c += -fno-builtin-f32subf64x -fno-builtin-f32subf128
|
||||
+CFLAGS-s_getpayloadl.c += -fno-builtin-getpayloadf64x -fno-builtin-getpayloadf128
|
||||
+CFLAGS-w_hypotl.c += -fno-builtin-hypotf64x -fno-builtin-hypotf128
|
||||
+CFLAGS-w_ilogbl.c += -fno-builtin-ilogbf64x -fno-builtin-ilogbf128
|
||||
+CFLAGS-w_j0l.c += -fno-builtin-j0f64x -fno-builtin-j0f128
|
||||
+CFLAGS-w_j1l.c += -fno-builtin-j1f64x -fno-builtin-j1f128
|
||||
+CFLAGS-w_jnl.c += -fno-builtin-jnf64x -fno-builtin-jnf128
|
||||
+CFLAGS-s_ldexpl.c += -fno-builtin-ldexpf64x -fno-builtin-ldexpf128
|
||||
+CFLAGS-w_lgammal.c += -fno-builtin-lgammaf64x -fno-builtin-lgammaf128
|
||||
+CFLAGS-w_lgammal_r.c += -fno-builtin-lgammaf64x_r
|
||||
+CFLAGS-w_llogbl.c += -fno-builtin-llogbf64x -fno-builtin-llogbf128
|
||||
+CFLAGS-s_llrintl.c += -fno-builtin-llrintf64x -fno-builtin-llrintf128
|
||||
+CFLAGS-s_llroundl.c += -fno-builtin-llroundf64x -fno-builtin-llroundf128
|
||||
+CFLAGS-e_logl.c += -fno-builtin-logf64x -fno-builtin-logf128
|
||||
+CFLAGS-w_log10l.c += -fno-builtin-log10f64x -fno-builtin-log10f128
|
||||
+CFLAGS-w_log1pl.c += -fno-builtin-log1pf64x -fno-builtin-log1pf128
|
||||
+CFLAGS-e_log2l.c += -fno-builtin-log2f64x -fno-builtin-log2f128
|
||||
+CFLAGS-s_logbl.c += -fno-builtin-logbf64x -fno-builtin-logbf128
|
||||
+CFLAGS-s_lrintl.c += -fno-builtin-lrintf64x -fno-builtin-lrintf128
|
||||
+CFLAGS-s_lroundl.c += -fno-builtin-lroundf64x -fno-builtin-lroundf128
|
||||
+CFLAGS-s_modfl.c += -fno-builtin-modff64x -fno-builtin-modff128
|
||||
+CFLAGS-s_nanl.c += -fno-builtin-nanf64x -fno-builtin-nanf128
|
||||
+CFLAGS-s_nearbyintl.c += -fno-builtin-nearbyintf64x -fno-builtin-nearbyintf128
|
||||
+CFLAGS-s_nextafterl.c += -fno-builtin-nextafterf64x -fno-builtin-nextafterf128
|
||||
+CFLAGS-s_nextdownl.c += -fno-builtin-nextdownf64x -fno-builtin-nextdownf128
|
||||
+CFLAGS-s_nextupl.c += -fno-builtin-nextupf64x -fno-builtin-nextupf128
|
||||
+CFLAGS-e_powl.c += -fno-builtin-powf64x -fno-builtin-powf128
|
||||
+CFLAGS-w_remainderl.c += -fno-builtin-remainderf64x -fno-builtin-remainderf128
|
||||
+CFLAGS-s_remquol.c += -fno-builtin-remquof64x -fno-builtin-remquof128
|
||||
+CFLAGS-s_rintl.c += -fno-builtin-rintf64x -fno-builtin-rintf128
|
||||
+CFLAGS-s_roundl.c += -fno-builtin-roundf64x -fno-builtin-roundf128
|
||||
+CFLAGS-s_roundevenl.c += -fno-builtin-roundevenf64x -fno-builtin-roundevenf128
|
||||
+CFLAGS-w_scalblnl.c += -fno-builtin-scalblnf64x -fno-builtin-scalblnf128
|
||||
+CFLAGS-s_scalbnl.c += -fno-builtin-scalbnf64x -fno-builtin-scalbnf128
|
||||
+CFLAGS-s_setpayloadl.c += -fno-builtin-setpayloadf64x -fno-builtin-setpayloadf128
|
||||
+CFLAGS-s_setpayloadsigl.c += -fno-builtin-setpayloadsigf64x -fno-builtin-setpayloadsigf128
|
||||
+CFLAGS-s_sinl.c += -fno-builtin-sinf64x -fno-builtin-sinf128
|
||||
+CFLAGS-s_sincosl.c += -fno-builtin-sincosf64x -fno-builtin-sincosf128
|
||||
+CFLAGS-w_sinhl.c += -fno-builtin-sinhf64x -fno-builtin-sinhf128
|
||||
+CFLAGS-w_sqrtl.c += -fno-builtin-sqrtf64x -fno-builtin-sqrtf128
|
||||
+CFLAGS-s_tanl.c += -fno-builtin-tanf64x -fno-builtin-tanf128
|
||||
+CFLAGS-s_tanhl.c += -fno-builtin-tanhf64x -fno-builtin-tanhf128
|
||||
+CFLAGS-w_tgammal.c += -fno-builtin-tgammaf64x -fno-builtin-tgammaf128
|
||||
+CFLAGS-s_totalorderl.c += -fno-builtin-totalorderf64x -fno-builtin-totalorderf128
|
||||
+CFLAGS-s_totalordermagl.c += -fno-builtin-totalordermagf64x -fno-builtin-totalordermagf128
|
||||
+CFLAGS-s_truncl.c += -fno-builtin-truncf64x -fno-builtin-truncf128
|
||||
+CFLAGS-s_ufromfpl.c += -fno-builtin-ufromfpf64x -fno-builtin-ufromfpf128
|
||||
+CFLAGS-s_ufromfpxl.c += -fno-builtin-ufromfpxf64x -fno-builtin-ufromfpxf128
|
||||
+CFLAGS-s_y0l.c += -fno-builtin-y0f64x -fno-builtin-y0f128
|
||||
+CFLAGS-s_y1l.c += -fno-builtin-y1f64x -fno-builtin-y1f128
|
||||
+CFLAGS-s_ynl.c += -fno-builtin-ynf64x -fno-builtin-ynf128
|
||||
+endif
|
||||
diff --git a/sysdeps/ieee754/ldbl-96/Makefile b/sysdeps/ieee754/ldbl-96/Makefile
|
||||
index 75aed7ae6ca217ed..f28f91fa6a1e61a7 100644
|
||||
--- a/sysdeps/ieee754/ldbl-96/Makefile
|
||||
+++ b/sysdeps/ieee754/ldbl-96/Makefile
|
||||
@@ -21,4 +21,130 @@ tests += test-canonical-ldbl-96 test-totalorderl-ldbl-96 test-sinl-pseudo
|
||||
ifeq ($(have-ssp),yes)
|
||||
CFLAGS-test-sinl-pseudo.c += -fstack-protector-all
|
||||
endif
|
||||
+
|
||||
+CFLAGS-w_acosl.c += -fno-builtin-acosf64x
|
||||
+CFLAGS-w_acoshl.c += -fno-builtin-acoshf64x
|
||||
+CFLAGS-w_asinl.c += -fno-builtin-asinf64x
|
||||
+CFLAGS-s_asinhl.c += -fno-builtin-asinhf64x
|
||||
+CFLAGS-s_atanl.c += -fno-builtin-atanf64x
|
||||
+CFLAGS-w_atan2l.c += -fno-builtin-atan2f64x
|
||||
+CFLAGS-w_atanhl.c += -fno-builtin-atanhf64x
|
||||
+CFLAGS-s_cabsl.c += -fno-builtin-cabsf64x
|
||||
+CFLAGS-s_cacosl.c += -fno-builtin-cacosf64x
|
||||
+CFLAGS-s_cacoshl.c += -fno-builtin-cacoshf64x
|
||||
+CFLAGS-s_canonicalizel.c += -fno-builtin-canonicalizef64x
|
||||
+CFLAGS-s_cargl.c += -fno-builtin-cargf64x
|
||||
+CFLAGS-s_casinl.c += -fno-builtin-casinf64x
|
||||
+CFLAGS-s_casinhl.c += -fno-builtin-casinhf64x
|
||||
+CFLAGS-s_catanl.c += -fno-builtin-catanf64x
|
||||
+CFLAGS-s_catanhl.c += -fno-builtin-catanhf64x
|
||||
+CFLAGS-s_cbrtl.c += -fno-builtin-cbrtf64x
|
||||
+CFLAGS-s_ccosl.c += -fno-builtin-ccosf64x
|
||||
+CFLAGS-s_ccoshl.c += -fno-builtin-ccoshf64x
|
||||
+CFLAGS-s_ceill.c += -fno-builtin-ceilf64x
|
||||
+CFLAGS-s_cexpl.c += -fno-builtin-cexpf64x
|
||||
+CFLAGS-s_cimagl.c += -fno-builtin-cimagf64x
|
||||
+CFLAGS-s_clogl.c += -fno-builtin-clogf64x
|
||||
+CFLAGS-s_clog10l.c += -fno-builtin-clog10f64x
|
||||
+CFLAGS-s_conjl.c += -fno-builtin-conjf64x
|
||||
+CFLAGS-s_copysignl.c += -fno-builtin-copysignf64x
|
||||
+CFLAGS-s_cosl.c += -fno-builtin-cosf64x
|
||||
+CFLAGS-w_coshl.c += -fno-builtin-coshf64x
|
||||
+CFLAGS-s_cpowl.c += -fno-builtin-cpowf64x
|
||||
+CFLAGS-s_cprojl.c += -fno-builtin-cprojf64x
|
||||
+CFLAGS-s_creall.c += -fno-builtin-crealf64x
|
||||
+CFLAGS-s_csinl.c += -fno-builtin-csinf64x
|
||||
+CFLAGS-s_csinhl.c += -fno-builtin-csinhf64x
|
||||
+CFLAGS-s_csqrtl.c += -fno-builtin-csqrtf64x
|
||||
+CFLAGS-s_ctanl.c += -fno-builtin-ctanf64x
|
||||
+CFLAGS-s_ctanhl.c += -fno-builtin-ctanhf64x
|
||||
+CFLAGS-s_daddl.c += -fno-builtin-f64addf64x
|
||||
+CFLAGS-s_ddivl.c += -fno-builtin-f64divf64x
|
||||
+CFLAGS-s_dfmal.c += -fno-builtin-f64fmaf64x
|
||||
+CFLAGS-s_dmull.c += -fno-builtin-f64mulf64x
|
||||
+CFLAGS-s_dsqrtl.c += -fno-builtin-f64sqrtf64x
|
||||
+CFLAGS-s_dsubl.c += -fno-builtin-f64subf64x
|
||||
+CFLAGS-s_erfl.c += -fno-builtin-erff64x
|
||||
+CFLAGS-s_erfcl.c += -fno-builtin-erfcf64x
|
||||
+CFLAGS-e_expl.c += -fno-builtin-expf64x
|
||||
+CFLAGS-w_exp10l.c += -fno-builtin-exp10f64x
|
||||
+CFLAGS-e_exp2l.c += -fno-builtin-exp2f64x
|
||||
+CFLAGS-s_expm1l.c += -fno-builtin-expm1f64x
|
||||
+CFLAGS-s_fabsl.c += -fno-builtin-fabsf64x
|
||||
+CFLAGS-s_faddl.c += -fno-builtin-f32addf64x
|
||||
+CFLAGS-s_fdiml.c += -fno-builtin-fdimf64x
|
||||
+CFLAGS-s_fdivl.c += -fno-builtin-f32divf64x
|
||||
+CFLAGS-s_ffmal.c += -fno-builtin-f32fmaf64x
|
||||
+CFLAGS-s_floorl.c += -fno-builtin-floorf64x
|
||||
+CFLAGS-s_fmal.c += -fno-builtin-fmaf64x
|
||||
+CFLAGS-s_fmaxl.c += -fno-builtin-fmaxf64x
|
||||
+CFLAGS-s_fmaximuml.c += -fno-builtin-fmaximumf64x
|
||||
+CFLAGS-s_fmaximum_magl.c += -fno-builtin-fmaximum_magf64x
|
||||
+CFLAGS-s_fmaximum_mag_numl.c += -fno-builtin-fmaximum_mag_numf64x
|
||||
+CFLAGS-s_fmaximum_numl.c += -fno-builtin-fmaximum_numf64x
|
||||
+CFLAGS-s_fmaxmagl.c += -fno-builtin-fmaxmagf64x
|
||||
+CFLAGS-s_fminl.c += -fno-builtin-fminf64x
|
||||
+CFLAGS-s_fminimuml.c += -fno-builtin-fminimumf64x
|
||||
+CFLAGS-s_fminimum_magl.c += -fno-builtin-fminimum_magf64x
|
||||
+CFLAGS-s_fminimum_mag_numl.c += -fno-builtin-fminimum_mag_numf64x
|
||||
+CFLAGS-s_fminimum_numl.c += -fno-builtin-fminimum_numf64x
|
||||
+CFLAGS-s_fminmagl.c += -fno-builtin-fminmagf64x
|
||||
+CFLAGS-w_fmodl.c += -fno-builtin-fmodf64x
|
||||
+CFLAGS-s_fmull.c += -fno-builtin-f32mulf64x
|
||||
+CFLAGS-s_frexpl.c += -fno-builtin-frexpf64x
|
||||
+CFLAGS-s_fromfpl.c += -fno-builtin-fromfpf64x
|
||||
+CFLAGS-s_fromfpxl.c += -fno-builtin-fromfpxf64x
|
||||
+CFLAGS-s_fsqrtl.c += -fno-builtin-f32sqrtf64x
|
||||
+CFLAGS-s_fsubl.c += -fno-builtin-f32subf64x
|
||||
+CFLAGS-s_getpayloadl.c += -fno-builtin-getpayloadf64x
|
||||
+CFLAGS-w_hypotl.c += -fno-builtin-hypotf64x
|
||||
+CFLAGS-w_ilogbl.c += -fno-builtin-ilogbf64x
|
||||
+CFLAGS-w_j0l.c += -fno-builtin-j0f64x
|
||||
+CFLAGS-w_j1l.c += -fno-builtin-j1f64x
|
||||
+CFLAGS-w_jnl.c += -fno-builtin-jnf64x
|
||||
+CFLAGS-s_ldexpl.c += -fno-builtin-ldexpf64x
|
||||
+CFLAGS-w_lgammal.c += -fno-builtin-lgammaf64x
|
||||
+CFLAGS-w_lgammal_r.c += -fno-builtin-lgammaf64x_r
|
||||
+CFLAGS-w_llogbl.c += -fno-builtin-llogbf64x
|
||||
+CFLAGS-s_llrintl.c += -fno-builtin-llrintf64x
|
||||
+CFLAGS-s_llroundl.c += -fno-builtin-llroundf64x
|
||||
+CFLAGS-e_logl.c += -fno-builtin-logf64x
|
||||
+CFLAGS-w_log10l.c += -fno-builtin-log10f64x
|
||||
+CFLAGS-w_log1pl.c += -fno-builtin-log1pf64x
|
||||
+CFLAGS-e_log2l.c += -fno-builtin-log2f64x
|
||||
+CFLAGS-s_logbl.c += -fno-builtin-logbf64x
|
||||
+CFLAGS-s_lrintl.c += -fno-builtin-lrintf64x
|
||||
+CFLAGS-s_lroundl.c += -fno-builtin-lroundf64x
|
||||
+CFLAGS-s_modfl.c += -fno-builtin-modff64x
|
||||
+CFLAGS-s_nanl.c += -fno-builtin-nanf64x
|
||||
+CFLAGS-s_nearbyintl.c += -fno-builtin-nearbyintf64x
|
||||
+CFLAGS-s_nextafterl.c += -fno-builtin-nextafterf64x
|
||||
+CFLAGS-s_nextdownl.c += -fno-builtin-nextdownf64x
|
||||
+CFLAGS-s_nextupl.c += -fno-builtin-nextupf64x
|
||||
+CFLAGS-e_powl.c += -fno-builtin-powf64x
|
||||
+CFLAGS-w_remainderl.c += -fno-builtin-remainderf64x
|
||||
+CFLAGS-s_remquol.c += -fno-builtin-remquof64x
|
||||
+CFLAGS-s_rintl.c += -fno-builtin-rintf64x
|
||||
+CFLAGS-s_roundl.c += -fno-builtin-roundf64x
|
||||
+CFLAGS-s_roundevenl.c += -fno-builtin-roundevenf64x
|
||||
+CFLAGS-w_scalblnl.c += -fno-builtin-scalblnf64x
|
||||
+CFLAGS-s_scalbnl.c += -fno-builtin-scalbnf64x
|
||||
+CFLAGS-s_setpayloadl.c += -fno-builtin-setpayloadf64x
|
||||
+CFLAGS-s_setpayloadsigl.c += -fno-builtin-setpayloadsigf64x
|
||||
+CFLAGS-s_sinl.c += -fno-builtin-sinf64x
|
||||
+CFLAGS-s_sincosl.c += -fno-builtin-sincosf64x
|
||||
+CFLAGS-w_sinhl.c += -fno-builtin-sinhf64x
|
||||
+CFLAGS-w_sqrtl.c += -fno-builtin-sqrtf64x
|
||||
+CFLAGS-s_tanl.c += -fno-builtin-tanf64x
|
||||
+CFLAGS-s_tanhl.c += -fno-builtin-tanhf64x
|
||||
+CFLAGS-w_tgammal.c += -fno-builtin-tgammaf64x
|
||||
+CFLAGS-s_totalorderl.c += -fno-builtin-totalorderf64x
|
||||
+CFLAGS-s_totalordermagl.c += -fno-builtin-totalordermagf64x
|
||||
+CFLAGS-s_truncl.c += -fno-builtin-truncf64x
|
||||
+CFLAGS-s_ufromfpl.c += -fno-builtin-ufromfpf64x
|
||||
+CFLAGS-s_ufromfpxl.c += -fno-builtin-ufromfpxf64x
|
||||
+CFLAGS-s_y0l.c += -fno-builtin-y0f64x
|
||||
+CFLAGS-s_y1l.c += -fno-builtin-y1f64x
|
||||
+CFLAGS-s_ynl.c += -fno-builtin-ynf64x
|
||||
+
|
||||
endif # $(subdir) == math
|
||||
diff --git a/sysdeps/powerpc/powerpc32/fpu/Makefile b/sysdeps/powerpc/powerpc32/fpu/Makefile
|
||||
index b8b6bb0fa2efcf8c..4c0c65c18a5daea8 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/fpu/Makefile
|
||||
+++ b/sysdeps/powerpc/powerpc32/fpu/Makefile
|
||||
@@ -1,8 +1,8 @@
|
||||
ifeq ($(subdir),math)
|
||||
# lrint is aliased to lrintf, so suppress compiler builtins to
|
||||
# avoid mismatched signatures.
|
||||
-CFLAGS-s_lrint.c += -fno-builtin-lrintf
|
||||
-CFLAGS-s_lround.c += -fno-builtin-lroundf
|
||||
+CFLAGS-s_lrint.c += -fno-builtin-lrintf -fno-builtin-lrintf32
|
||||
+CFLAGS-s_lround.c += -fno-builtin-lroundf -fno-builtin-lroundf32
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),misc)
|
||||
diff --git a/sysdeps/powerpc/powerpc64/fpu/Makefile b/sysdeps/powerpc/powerpc64/fpu/Makefile
|
||||
index 05075c2a75c294c3..9359049b555d4457 100644
|
||||
--- a/sysdeps/powerpc/powerpc64/fpu/Makefile
|
||||
+++ b/sysdeps/powerpc/powerpc64/fpu/Makefile
|
||||
@@ -1,7 +1,9 @@
|
||||
ifeq ($(subdir),math)
|
||||
# lrintf and llrintf are aliased to llrint, so suppress compiler builtins to
|
||||
# avoid mismatched signatures.
|
||||
-CFLAGS-s_llrint.c += -fno-builtin-lrintf -fno-builtin-llrintf
|
||||
+CFLAGS-s_llrint.c += -fno-builtin-lrintf -fno-builtin-llrintf \
|
||||
+ -fno-builtin-lrintf32 -fno-builtin-llrintf32
|
||||
# Same as before but for lroundf and llroundf
|
||||
-CFLAGS-s_llround.c += -fno-builtin-lroundf -fno-builtin-llroundf
|
||||
+CFLAGS-s_llround.c += -fno-builtin-lroundf -fno-builtin-llroundf \
|
||||
+ -fno-builtin-lroundf32 -fno-builtin-llroundf32
|
||||
endif
|
||||
diff --git a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile
|
||||
index cc073b53d3292ff8..858061484e1ab419 100644
|
||||
--- a/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile
|
||||
+++ b/sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile
|
||||
@@ -207,6 +207,131 @@ endef
|
||||
object-suffixes-left := $(all-object-suffixes)
|
||||
include $(o-iterator)
|
||||
|
||||
+CFLAGS-w_acosf128-ifunc.c += -fno-builtin-acosf64x
|
||||
+CFLAGS-w_acoshf128-ifunc.c += -fno-builtin-acoshf64x
|
||||
+CFLAGS-w_asinf128-ifunc.c += -fno-builtin-asinf64x
|
||||
+CFLAGS-s_asinhf128-ifunc.c += -fno-builtin-asinhf64x
|
||||
+CFLAGS-s_atanf128-ifunc.c += -fno-builtin-atanf64x
|
||||
+CFLAGS-w_atan2f128-ifunc.c += -fno-builtin-atan2f64x
|
||||
+CFLAGS-w_atanhf128-ifunc.c += -fno-builtin-atanhf64x
|
||||
+CFLAGS-s_cabsf128-ifunc.c += -fno-builtin-cabsf64x
|
||||
+CFLAGS-s_cacosf128-ifunc.c += -fno-builtin-cacosf64x
|
||||
+CFLAGS-s_cacoshf128-ifunc.c += -fno-builtin-cacoshf64x
|
||||
+CFLAGS-s_canonicalizef128-ifunc.c += -fno-builtin-canonicalizef64x
|
||||
+CFLAGS-s_cargf128-ifunc.c += -fno-builtin-cargf64x
|
||||
+CFLAGS-s_casinf128-ifunc.c += -fno-builtin-casinf64x
|
||||
+CFLAGS-s_casinhf128-ifunc.c += -fno-builtin-casinhf64x
|
||||
+CFLAGS-s_catanf128-ifunc.c += -fno-builtin-catanf64x
|
||||
+CFLAGS-s_catanhf128-ifunc.c += -fno-builtin-catanhf64x
|
||||
+CFLAGS-s_cbrtf128-ifunc.c += -fno-builtin-cbrtf64x
|
||||
+CFLAGS-s_ccosf128-ifunc.c += -fno-builtin-ccosf64x
|
||||
+CFLAGS-s_ccoshf128-ifunc.c += -fno-builtin-ccoshf64x
|
||||
+CFLAGS-s_ceilf128-ifunc.c += -fno-builtin-ceilf64x
|
||||
+CFLAGS-s_cexpf128-ifunc.c += -fno-builtin-cexpf64x
|
||||
+CFLAGS-s_cimagf128-ifunc.c += -fno-builtin-cimagf64x
|
||||
+CFLAGS-s_clogf128-ifunc.c += -fno-builtin-clogf64x
|
||||
+CFLAGS-s_clog10f128-ifunc.c += -fno-builtin-clog10f64x
|
||||
+CFLAGS-s_conjf128-ifunc.c += -fno-builtin-conjf64x
|
||||
+CFLAGS-s_copysignf128-ifunc.c += -fno-builtin-copysignf64x
|
||||
+CFLAGS-s_cosf128-ifunc.c += -fno-builtin-cosf64x
|
||||
+CFLAGS-w_coshf128-ifunc.c += -fno-builtin-coshf64x
|
||||
+CFLAGS-s_cpowf128-ifunc.c += -fno-builtin-cpowf64x
|
||||
+CFLAGS-s_cprojf128-ifunc.c += -fno-builtin-cprojf64x
|
||||
+CFLAGS-s_crealf128-ifunc.c += -fno-builtin-crealf64x
|
||||
+CFLAGS-s_csinf128-ifunc.c += -fno-builtin-csinf64x
|
||||
+CFLAGS-s_csinhf128-ifunc.c += -fno-builtin-csinhf64x
|
||||
+CFLAGS-s_csqrtf128-ifunc.c += -fno-builtin-csqrtf64x
|
||||
+CFLAGS-s_ctanf128-ifunc.c += -fno-builtin-ctanf64x
|
||||
+CFLAGS-s_ctanhf128-ifunc.c += -fno-builtin-ctanhf64x
|
||||
+CFLAGS-s_daddf128-ifunc.c += -fno-builtin-f64addf64x
|
||||
+CFLAGS-s_ddivf128-ifunc.c += -fno-builtin-f64divf64x
|
||||
+CFLAGS-s_dfmaf128-ifunc.c += -fno-builtin-f64fmaf64x
|
||||
+CFLAGS-s_dmulf128-ifunc.c += -fno-builtin-f64mulf64x
|
||||
+CFLAGS-s_dsqrtf128-ifunc.c += -fno-builtin-f64sqrtf64x
|
||||
+CFLAGS-s_dsubf128-ifunc.c += -fno-builtin-f64subf64x
|
||||
+CFLAGS-s_erff128-ifunc.c += -fno-builtin-erff64x
|
||||
+CFLAGS-s_erfcf128-ifunc.c += -fno-builtin-erfcf64x
|
||||
+CFLAGS-e_expf128-ifunc.c += -fno-builtin-expf64x
|
||||
+CFLAGS-w_exp10f128-ifunc.c += -fno-builtin-exp10f64x
|
||||
+CFLAGS-e_exp2f128-ifunc.c += -fno-builtin-exp2f64x
|
||||
+CFLAGS-s_expm1f128-ifunc.c += -fno-builtin-expm1f64x
|
||||
+CFLAGS-s_fabsf128-ifunc.c += -fno-builtin-fabsf64x
|
||||
+CFLAGS-s_faddf128-ifunc.c += -fno-builtin-f32addf64x
|
||||
+CFLAGS-s_fdimf128-ifunc.c += -fno-builtin-fdimf64x
|
||||
+CFLAGS-s_fdivf128-ifunc.c += -fno-builtin-f32divf64x
|
||||
+CFLAGS-s_ffmaf128-ifunc.c += -fno-builtin-f32fmaf64x
|
||||
+CFLAGS-s_floorf128-ifunc.c += -fno-builtin-floorf64x
|
||||
+CFLAGS-s_fmaf128-ifunc.c += -fno-builtin-fmaf64x
|
||||
+CFLAGS-s_fmaxf128-ifunc.c += -fno-builtin-fmaxf64x
|
||||
+CFLAGS-s_fmaximumf128-ifunc.c += -fno-builtin-fmaximumf64x
|
||||
+CFLAGS-s_fmaximum_magf128-ifunc.c += -fno-builtin-fmaximum_magf64x
|
||||
+CFLAGS-s_fmaximum_mag_numf128-ifunc.c += -fno-builtin-fmaximum_mag_numf64x
|
||||
+CFLAGS-s_fmaximum_numf128-ifunc.c += -fno-builtin-fmaximum_numf64x
|
||||
+CFLAGS-s_fmaxmagf128-ifunc.c += -fno-builtin-fmaxmagf64x
|
||||
+CFLAGS-s_fminf128-ifunc.c += -fno-builtin-fminf64x
|
||||
+CFLAGS-s_fminimumf128-ifunc.c += -fno-builtin-fminimumf64x
|
||||
+CFLAGS-s_fminimum_magf128-ifunc.c += -fno-builtin-fminimum_magf64x
|
||||
+CFLAGS-s_fminimum_mag_numf128-ifunc.c += -fno-builtin-fminimum_mag_numf64x
|
||||
+CFLAGS-s_fminimum_numf128-ifunc.c += -fno-builtin-fminimum_numf64x
|
||||
+CFLAGS-s_fminmagf128-ifunc.c += -fno-builtin-fminmagf64x
|
||||
+CFLAGS-w_fmodf128-ifunc.c += -fno-builtin-fmodf64x
|
||||
+CFLAGS-s_fmulf128-ifunc.c += -fno-builtin-f32mulf64x
|
||||
+CFLAGS-s_frexpf128-ifunc.c += -fno-builtin-frexpf64x
|
||||
+CFLAGS-s_fromfpf128-ifunc.c += -fno-builtin-fromfpf64x
|
||||
+CFLAGS-s_fromfpxf128-ifunc.c += -fno-builtin-fromfpxf64x
|
||||
+CFLAGS-s_fsqrtf128-ifunc.c += -fno-builtin-f32sqrtf64x
|
||||
+CFLAGS-s_fsubf128-ifunc.c += -fno-builtin-f32subf64x
|
||||
+CFLAGS-s_getpayloadf128-ifunc.c += -fno-builtin-getpayloadf64x
|
||||
+CFLAGS-w_hypotf128-ifunc.c += -fno-builtin-hypotf64x
|
||||
+CFLAGS-w_ilogbf128-ifunc.c += -fno-builtin-ilogbf64x
|
||||
+CFLAGS-w_j0f128-ifunc.c += -fno-builtin-j0f64x
|
||||
+CFLAGS-w_j1f128-ifunc.c += -fno-builtin-j1f64x
|
||||
+CFLAGS-w_jnf128-ifunc.c += -fno-builtin-jnf64x
|
||||
+CFLAGS-s_ldexpf128-ifunc.c += -fno-builtin-ldexpf64x
|
||||
+CFLAGS-w_lgammaf128-ifunc.c += -fno-builtin-lgammaf64x
|
||||
+CFLAGS-w_lgammaf128_r-ifunc.c += -fno-builtin-lgammaf64x_r
|
||||
+CFLAGS-w_llogbf128-ifunc.c += -fno-builtin-llogbf64x
|
||||
+CFLAGS-s_llrintf128-ifunc.c += -fno-builtin-llrintf64x
|
||||
+CFLAGS-s_llroundf128-ifunc.c += -fno-builtin-llroundf64x
|
||||
+CFLAGS-e_logf128-ifunc.c += -fno-builtin-logf64x
|
||||
+CFLAGS-w_log10f128-ifunc.c += -fno-builtin-log10f64x
|
||||
+CFLAGS-w_log1pf128-ifunc.c += -fno-builtin-log1pf64x
|
||||
+CFLAGS-e_log2f128-ifunc.c += -fno-builtin-log2f64x
|
||||
+CFLAGS-s_logbf128-ifunc.c += -fno-builtin-logbf64x
|
||||
+CFLAGS-s_lrintf128-ifunc.c += -fno-builtin-lrintf64x
|
||||
+CFLAGS-s_lroundf128-ifunc.c += -fno-builtin-lroundf64x
|
||||
+CFLAGS-s_modff128-ifunc.c += -fno-builtin-modff64x
|
||||
+CFLAGS-s_nanf128-ifunc.c += -fno-builtin-nanf64x
|
||||
+CFLAGS-s_nearbyintf128-ifunc.c += -fno-builtin-nearbyintf64x
|
||||
+CFLAGS-s_nextafterf128-ifunc.c += -fno-builtin-nextafterf64x
|
||||
+CFLAGS-s_nextdownf128-ifunc.c += -fno-builtin-nextdownf64x
|
||||
+CFLAGS-s_nextupf128-ifunc.c += -fno-builtin-nextupf64x
|
||||
+CFLAGS-e_powf128-ifunc.c += -fno-builtin-powf64x
|
||||
+CFLAGS-w_remainderf128-ifunc.c += -fno-builtin-remainderf64x
|
||||
+CFLAGS-s_remquof128-ifunc.c += -fno-builtin-remquof64x
|
||||
+CFLAGS-s_rintf128-ifunc.c += -fno-builtin-rintf64x
|
||||
+CFLAGS-s_roundf128-ifunc.c += -fno-builtin-roundf64x
|
||||
+CFLAGS-s_roundevenf128-ifunc.c += -fno-builtin-roundevenf64x
|
||||
+CFLAGS-w_scalblnf128-ifunc.c += -fno-builtin-scalblnf64x
|
||||
+CFLAGS-s_scalbnf128-ifunc.c += -fno-builtin-scalbnf64x
|
||||
+CFLAGS-s_setpayloadf128-ifunc.c += -fno-builtin-setpayloadf64x
|
||||
+CFLAGS-s_setpayloadsigf128-ifunc.c += -fno-builtin-setpayloadsigf64x
|
||||
+CFLAGS-s_sinf128-ifunc.c += -fno-builtin-sinf64x
|
||||
+CFLAGS-s_sincosf128-ifunc.c += -fno-builtin-sincosf64x
|
||||
+CFLAGS-w_sinhf128-ifunc.c += -fno-builtin-sinhf64x
|
||||
+CFLAGS-w_sqrtf128-ifunc.c += -fno-builtin-sqrtf64x
|
||||
+CFLAGS-s_tanf128-ifunc.c += -fno-builtin-tanf64x
|
||||
+CFLAGS-s_tanhf128-ifunc.c += -fno-builtin-tanhf64x
|
||||
+CFLAGS-w_tgammaf128-ifunc.c += -fno-builtin-tgammaf64x
|
||||
+CFLAGS-s_totalorderf128-ifunc.c += -fno-builtin-totalorderf64x
|
||||
+CFLAGS-s_totalordermagf128-ifunc.c += -fno-builtin-totalordermagf64x
|
||||
+CFLAGS-s_truncf128-ifunc.c += -fno-builtin-truncf64x
|
||||
+CFLAGS-s_ufromfpf128-ifunc.c += -fno-builtin-ufromfpf64x
|
||||
+CFLAGS-s_ufromfpxf128-ifunc.c += -fno-builtin-ufromfpxf64x
|
||||
+CFLAGS-s_y0f128-ifunc.c += -fno-builtin-y0f64x
|
||||
+CFLAGS-s_y1f128-ifunc.c += -fno-builtin-y1f64x
|
||||
+CFLAGS-s_ynf128-ifunc.c += -fno-builtin-ynf64x
|
||||
+
|
||||
endif # do_f128_multiarch
|
||||
|
||||
libm-sysdep_routines += e_log-ppc64
|
||||
diff --git a/sysdeps/x86_64/x32/Makefile b/sysdeps/x86_64/x32/Makefile
|
||||
index 8748956563babf8f..31732aa248fe62cf 100644
|
||||
--- a/sysdeps/x86_64/x32/Makefile
|
||||
+++ b/sysdeps/x86_64/x32/Makefile
|
||||
@@ -2,7 +2,8 @@ ifeq ($(subdir),math)
|
||||
# Since x32 returns 32-bit long int and 64-bit long long int in the
|
||||
# same 64-bit register, we make the 32b-bit lround an alias of the
|
||||
# 64-bit llround. Add -fno-builtin-lround to silence the compiler.
|
||||
-CFLAGS-s_llround.c += -fno-builtin-lround
|
||||
+CFLAGS-s_llround.c += -fno-builtin-lround -fno-builtin-lroundf32x \
|
||||
+ -fno-builtin-lroundf64
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),string)
|
89
glibc-rh2222188-4.patch
Normal file
89
glibc-rh2222188-4.patch
Normal file
@ -0,0 +1,89 @@
|
||||
commit 9cc9d61ee12f2f8620d8e0ea3c42af02bf07fe1e
|
||||
Author: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Fri Nov 4 18:37:16 2022 +0100
|
||||
|
||||
elf: Disable some subtests of ifuncmain1, ifuncmain5 for !PIE
|
||||
|
||||
diff --git a/elf/ifuncmain1.c b/elf/ifuncmain1.c
|
||||
index 747fc02648a5493e..6effce3d77b1f706 100644
|
||||
--- a/elf/ifuncmain1.c
|
||||
+++ b/elf/ifuncmain1.c
|
||||
@@ -19,7 +19,14 @@ typedef int (*foo_p) (void);
|
||||
#endif
|
||||
|
||||
foo_p foo_ptr = foo;
|
||||
+
|
||||
+/* Address-significant access to protected symbols is not supported in
|
||||
+ position-dependent mode on several architectures because GCC
|
||||
+ generates relocations that assume that the address is local to the
|
||||
+ main program. */
|
||||
+#ifdef __PIE__
|
||||
foo_p foo_procted_ptr = foo_protected;
|
||||
+#endif
|
||||
|
||||
extern foo_p get_foo_p (void);
|
||||
extern foo_p get_foo_hidden_p (void);
|
||||
@@ -37,12 +44,16 @@ main (void)
|
||||
if ((*foo_ptr) () != -1)
|
||||
abort ();
|
||||
|
||||
+#ifdef __PIE__
|
||||
if (foo_procted_ptr != foo_protected)
|
||||
abort ();
|
||||
+#endif
|
||||
if (foo_protected () != 0)
|
||||
abort ();
|
||||
+#ifdef __PIE__
|
||||
if ((*foo_procted_ptr) () != 0)
|
||||
abort ();
|
||||
+#endif
|
||||
|
||||
p = get_foo_p ();
|
||||
if (p != foo)
|
||||
@@ -55,8 +66,10 @@ main (void)
|
||||
abort ();
|
||||
|
||||
p = get_foo_protected_p ();
|
||||
+#ifdef __PIE__
|
||||
if (p != foo_protected)
|
||||
abort ();
|
||||
+#endif
|
||||
if (ret_foo_protected != 0 || (*p) () != ret_foo_protected)
|
||||
abort ();
|
||||
|
||||
diff --git a/elf/ifuncmain5.c b/elf/ifuncmain5.c
|
||||
index f398085cb46719d1..6fda768fb6908aed 100644
|
||||
--- a/elf/ifuncmain5.c
|
||||
+++ b/elf/ifuncmain5.c
|
||||
@@ -14,12 +14,19 @@ get_foo (void)
|
||||
return foo;
|
||||
}
|
||||
|
||||
+
|
||||
+/* Address-significant access to protected symbols is not supported in
|
||||
+ position-dependent mode on several architectures because GCC
|
||||
+ generates relocations that assume that the address is local to the
|
||||
+ main program. */
|
||||
+#ifdef __PIE__
|
||||
foo_p
|
||||
__attribute__ ((noinline))
|
||||
get_foo_protected (void)
|
||||
{
|
||||
return foo_protected;
|
||||
}
|
||||
+#endif
|
||||
|
||||
int
|
||||
main (void)
|
||||
@@ -30,9 +37,11 @@ main (void)
|
||||
if ((*p) () != -1)
|
||||
abort ();
|
||||
|
||||
+#ifdef __PIE__
|
||||
p = get_foo_protected ();
|
||||
if ((*p) () != 0)
|
||||
abort ();
|
||||
+#endif
|
||||
|
||||
return 0;
|
||||
}
|
938
glibc-rh2222188-5.patch
Normal file
938
glibc-rh2222188-5.patch
Normal file
@ -0,0 +1,938 @@
|
||||
commit 8a78f833d670f86302f2d0c32eb1e4357d9166ff
|
||||
Author: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Fri Jan 6 19:33:29 2023 +0000
|
||||
|
||||
C2x semantics for <tgmath.h>
|
||||
|
||||
<tgmath.h> implements semantics for integer generic arguments that
|
||||
handle cases involving _FloatN / _FloatNx types as specified in TS
|
||||
18661-3 plus some defect fixes.
|
||||
|
||||
C2x has further changes to the semantics for <tgmath.h> macros with
|
||||
such types, which should also be considered defect fixes (although
|
||||
handled through the integration of TS 18661-3 in C2x rather than
|
||||
through an issue tracking process). Specifically, the rules were
|
||||
changed because of problems raised with using the macros with the
|
||||
evaluation format types such as float_t and _Float32_t: the older
|
||||
version of the rules didn't allow passing _FloatN / _FloatNx types to
|
||||
the narrowing macros returning float or double, or passing float /
|
||||
double / long double to the narrowing macros returning _FloatN /
|
||||
_FloatNx, which was a problem with the evaluation format types which
|
||||
could be either kind of type depending on the value of
|
||||
FLT_EVAL_METHOD.
|
||||
|
||||
Thus the new rules allow cases of mixing types which were not allowed
|
||||
before, and, as part of the changes, the handling of integer arguments
|
||||
was also changed: if there is any _FloatNx generic argument, integer
|
||||
generic arguments are treated as _Float32x (not double), while the
|
||||
rule about treating integer arguments to narrowing macros returning
|
||||
_FloatN or _FloatNx as _Float64 not double was removed (no longer
|
||||
needed now double is a valid argument to such macros).
|
||||
|
||||
I've implemented the changes in GCC's __builtin_tgmath, which thus
|
||||
requires updates to glibc's test expectations so that the tests
|
||||
continue to build with GCC 13 (the test is also updated to test the
|
||||
argument types that weren't allowed before but are now valid under C2x
|
||||
rules).
|
||||
|
||||
Given those test changes, it's then also necessary to fix the
|
||||
implementations in <tgmath.h> to have appropriate semantics with older
|
||||
GCC so that the tests pass with GCC versions before GCC 13 as well.
|
||||
For some cases (non-narrowing macros with two or three generic
|
||||
arguments; narrowing macros returning _Float32x), the older version of
|
||||
__builtin_tgmath doesn't correspond sufficiently well to C2x
|
||||
semantics, so in those cases <tgmath.h> is adjusted to use the older
|
||||
macro implementation instead of __builtin_tgmath. The older macro
|
||||
implementation is itself adjusted to give the desired semantics, with
|
||||
GCC 7 and later. (It's not possible to get the right semantics in all
|
||||
cases for the narrowing macros with GCC 6 and before when the _FloatN
|
||||
/ _FloatNx names are typedefs rather than distinct types.)
|
||||
|
||||
Tested as follows: with the full glibc testsuite for x86_64, GCC 6, 7,
|
||||
11, 13; with execution of the math/tests for aarch64, arm, powerpc and
|
||||
powerpc64le, GCC 6, 7, 12 and 13 (powerpc64le only with GCC 12 and
|
||||
13); with build-many-glibcs.py with GCC 6, 7, 12 and 13.
|
||||
|
||||
Conflicts:
|
||||
math/tgmath.h
|
||||
(missing support for narrowing fma/sqrt downstream
|
||||
means that the definitions for __TGMATH_1_NARROW_*
|
||||
and __TGMATH_3_NARROW_* are not needed)
|
||||
|
||||
diff --git a/math/gen-tgmath-tests.py b/math/gen-tgmath-tests.py
|
||||
index 364963da6525e08d..be5e8cd9a07ef071 100755
|
||||
--- a/math/gen-tgmath-tests.py
|
||||
+++ b/math/gen-tgmath-tests.py
|
||||
@@ -19,14 +19,13 @@
|
||||
|
||||
# As glibc does not support decimal floating point, the types to
|
||||
# consider for generic parameters are standard and binary
|
||||
-# floating-point types, and integer types which are treated as double.
|
||||
-# The corresponding complex types may also be used (including complex
|
||||
-# integer types, which are a GNU extension, but are currently disabled
|
||||
-# here because they do not work properly with tgmath.h).
|
||||
-
|
||||
-# The proposed resolution to TS 18661-1 DR#9
|
||||
-# <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2149.htm#dr_9>
|
||||
-# makes the <tgmath.h> rules for selecting a function to call
|
||||
+# floating-point types, and integer types which are treated as
|
||||
+# _Float32x if any argument has a _FloatNx type and otherwise as
|
||||
+# double. The corresponding complex types may also be used (including
|
||||
+# complex integer types, which are a GNU extension, but are currently
|
||||
+# disabled here because they do not work properly with tgmath.h).
|
||||
+
|
||||
+# C2x makes the <tgmath.h> rules for selecting a function to call
|
||||
# correspond to the usual arithmetic conversions (applied successively
|
||||
# to the arguments for generic parameters in order), which choose the
|
||||
# type whose set of values contains that of the other type (undefined
|
||||
@@ -69,10 +68,6 @@ class Type(object):
|
||||
# Real argument types that correspond to a standard floating type
|
||||
# (float, double or long double; not _FloatN or _FloatNx).
|
||||
standard_real_argument_types_list = []
|
||||
- # Real argument types other than float, double and long double
|
||||
- # (i.e., those that are valid as arguments to narrowing macros
|
||||
- # returning _FloatN or _FloatNx).
|
||||
- non_standard_real_argument_types_list = []
|
||||
# The real floating types by their order properties (which are
|
||||
# tuples giving the positions in both the possible orders above).
|
||||
real_types_order = {}
|
||||
@@ -86,13 +81,16 @@ class Type(object):
|
||||
float64_type = None
|
||||
# The type _Complex _Float64.
|
||||
complex_float64_type = None
|
||||
+ # The type _Float32x.
|
||||
+ float32x_type = None
|
||||
+ # The type _Complex _Float32x.
|
||||
+ complex_float32x_type = None
|
||||
# The type _Float64x.
|
||||
float64x_type = None
|
||||
- # The type _Float64x if available, otherwise _Float64.
|
||||
- float32x_ext_type = None
|
||||
|
||||
def __init__(self, name, suffix=None, mant_dig=None, condition='1',
|
||||
- order=None, integer=False, complex=False, real_type=None):
|
||||
+ order=None, integer=False, complex=False, real_type=None,
|
||||
+ floatnx=False):
|
||||
"""Initialize a Type object, creating any corresponding complex type
|
||||
in the process."""
|
||||
self.name = name
|
||||
@@ -102,6 +100,7 @@ class Type(object):
|
||||
self.order = order
|
||||
self.integer = integer
|
||||
self.complex = complex
|
||||
+ self.floatnx = floatnx
|
||||
if complex:
|
||||
self.complex_type = self
|
||||
self.real_type = real_type
|
||||
@@ -119,8 +118,6 @@ class Type(object):
|
||||
Type.real_argument_types_list.append(self)
|
||||
if not self.name.startswith('_Float'):
|
||||
Type.standard_real_argument_types_list.append(self)
|
||||
- if self.name not in ('float', 'double', 'long double'):
|
||||
- Type.non_standard_real_argument_types_list.append(self)
|
||||
if self.order is not None:
|
||||
Type.real_types_order[self.order] = self
|
||||
if self.name == 'double':
|
||||
@@ -133,26 +130,28 @@ class Type(object):
|
||||
Type.float64_type = self
|
||||
if self.name == '_Complex _Float64':
|
||||
Type.complex_float64_type = self
|
||||
+ if self.name == '_Float32x':
|
||||
+ Type.float32x_type = self
|
||||
+ if self.name == '_Complex _Float32x':
|
||||
+ Type.complex_float32x_type = self
|
||||
if self.name == '_Float64x':
|
||||
Type.float64x_type = self
|
||||
- if self.name == 'Float32x_ext':
|
||||
- Type.float32x_ext_type = self
|
||||
|
||||
@staticmethod
|
||||
def create_type(name, suffix=None, mant_dig=None, condition='1', order=None,
|
||||
integer=False, complex_name=None, complex_ok=True,
|
||||
- internal=False):
|
||||
+ floatnx=False, internal=False):
|
||||
"""Create and register a Type object for a real type, creating any
|
||||
corresponding complex type in the process."""
|
||||
real_type = Type(name, suffix=suffix, mant_dig=mant_dig,
|
||||
condition=condition, order=order, integer=integer,
|
||||
- complex=False)
|
||||
+ complex=False, floatnx=floatnx)
|
||||
if complex_ok:
|
||||
if complex_name is None:
|
||||
complex_name = '_Complex %s' % name
|
||||
complex_type = Type(complex_name, condition=condition,
|
||||
integer=integer, complex=True,
|
||||
- real_type=real_type)
|
||||
+ real_type=real_type, floatnx=floatnx)
|
||||
else:
|
||||
complex_type = None
|
||||
real_type.complex_type = complex_type
|
||||
@@ -160,13 +159,13 @@ class Type(object):
|
||||
if complex_type is not None:
|
||||
complex_type.register_type(internal)
|
||||
|
||||
- def floating_type(self, floatn):
|
||||
+ def floating_type(self, integer_float32x):
|
||||
"""Return the corresponding floating type."""
|
||||
if self.integer:
|
||||
- if floatn:
|
||||
- return (Type.complex_float64_type
|
||||
+ if integer_float32x:
|
||||
+ return (Type.complex_float32x_type
|
||||
if self.complex
|
||||
- else Type.float64_type)
|
||||
+ else Type.float32x_type)
|
||||
else:
|
||||
return (Type.complex_double_type
|
||||
if self.complex
|
||||
@@ -174,9 +173,9 @@ class Type(object):
|
||||
else:
|
||||
return self
|
||||
|
||||
- def real_floating_type(self, floatn):
|
||||
+ def real_floating_type(self, integer_float32x):
|
||||
"""Return the corresponding real floating type."""
|
||||
- return self.real_type.floating_type(floatn)
|
||||
+ return self.real_type.floating_type(integer_float32x)
|
||||
|
||||
def __str__(self):
|
||||
"""Return string representation of a type."""
|
||||
@@ -194,7 +193,8 @@ class Type(object):
|
||||
condition='defined HUGE_VAL_F32', order=(2, 2))
|
||||
Type.create_type('_Float32x', 'f32x', 'FLT32X_MANT_DIG',
|
||||
complex_name='__CFLOAT32X',
|
||||
- condition='defined HUGE_VAL_F32X', order=(3, 3))
|
||||
+ condition='defined HUGE_VAL_F32X', order=(3, 3),
|
||||
+ floatnx=True)
|
||||
Type.create_type('double', '', 'DBL_MANT_DIG', order=(4, 4))
|
||||
Type.create_type('long double', 'l', 'LDBL_MANT_DIG', order=(5, 7))
|
||||
Type.create_type('_Float64', 'f64', 'FLT64_MANT_DIG',
|
||||
@@ -202,7 +202,8 @@ class Type(object):
|
||||
condition='defined HUGE_VAL_F64', order=(6, 5))
|
||||
Type.create_type('_Float64x', 'f64x', 'FLT64X_MANT_DIG',
|
||||
complex_name='__CFLOAT64X',
|
||||
- condition='defined HUGE_VAL_F64X', order=(7, 6))
|
||||
+ condition='defined HUGE_VAL_F64X', order=(7, 6),
|
||||
+ floatnx=True)
|
||||
Type.create_type('_Float128', 'f128', 'FLT128_MANT_DIG',
|
||||
complex_name='__CFLOAT128',
|
||||
condition='defined HUGE_VAL_F128', order=(8, 8))
|
||||
@@ -235,21 +236,16 @@ class Type(object):
|
||||
complex_name='complex_long_double_Float64x',
|
||||
condition='defined HUGE_VAL_F64X', order=(7, 7),
|
||||
internal=True)
|
||||
- # An internal type for the argument type used by f32x*
|
||||
- # narrowing macros (_Float64x if available, otherwise
|
||||
- # _Float64).
|
||||
- Type.create_type('Float32x_ext', None, 'FLT32X_EXT_MANT_DIG',
|
||||
- complex_name='complex_Float32x_ext',
|
||||
- condition='1', internal=True)
|
||||
|
||||
@staticmethod
|
||||
- def can_combine_types(types, floatn):
|
||||
+ def can_combine_types(types):
|
||||
"""Return a C preprocessor conditional for whether the given list of
|
||||
types can be used together as type-generic macro arguments."""
|
||||
have_long_double = False
|
||||
have_float128 = False
|
||||
+ integer_float32x = any(t.floatnx for t in types)
|
||||
for t in types:
|
||||
- t = t.real_floating_type(floatn)
|
||||
+ t = t.real_floating_type(integer_float32x)
|
||||
if t.name == 'long double':
|
||||
have_long_double = True
|
||||
if t.name == '_Float128' or t.name == '_Float64x':
|
||||
@@ -262,14 +258,15 @@ class Type(object):
|
||||
return '1'
|
||||
|
||||
@staticmethod
|
||||
- def combine_types(types, floatn):
|
||||
+ def combine_types(types):
|
||||
"""Return the result of combining a set of types."""
|
||||
have_complex = False
|
||||
combined = None
|
||||
+ integer_float32x = any(t.floatnx for t in types)
|
||||
for t in types:
|
||||
if t.complex:
|
||||
have_complex = True
|
||||
- t = t.real_floating_type(floatn)
|
||||
+ t = t.real_floating_type(integer_float32x)
|
||||
if combined is None:
|
||||
combined = t
|
||||
else:
|
||||
@@ -375,18 +372,8 @@ class Tests(object):
|
||||
'# endif\n')
|
||||
float64x_text = if_cond_text([Type.float64x_type.condition],
|
||||
float64x_text)
|
||||
- float32x_ext_text = ('#ifdef HUGE_VAL_F64X\n'
|
||||
- 'typedef _Float64x Float32x_ext;\n'
|
||||
- 'typedef __CFLOAT64X complex_Float32x_ext;\n'
|
||||
- '# define FLT32X_EXT_MANT_DIG FLT64X_MANT_DIG\n'
|
||||
- '#else\n'
|
||||
- 'typedef _Float64 Float32x_ext;\n'
|
||||
- 'typedef __CFLOAT64 complex_Float32x_ext;\n'
|
||||
- '# define FLT32X_EXT_MANT_DIG FLT64_MANT_DIG\n'
|
||||
- '#endif\n')
|
||||
self.header_list.append(float64_text)
|
||||
self.header_list.append(float64x_text)
|
||||
- self.header_list.append(float32x_ext_text)
|
||||
self.types_seen = set()
|
||||
for t in Type.all_types_list:
|
||||
self.add_type_var(t.name, t.condition)
|
||||
@@ -439,39 +426,33 @@ class Tests(object):
|
||||
narrowing_std = True
|
||||
narrow_cond = '1'
|
||||
narrow_args = [Type.double_type, Type.long_double_type]
|
||||
- narrow_fallback = Type.double_type
|
||||
elif ret == 'double':
|
||||
narrowing = True
|
||||
narrowing_std = True
|
||||
narrow_cond = '1'
|
||||
narrow_args = [Type.long_double_type]
|
||||
- narrow_fallback = Type.long_double_type
|
||||
elif ret.startswith('_Float'):
|
||||
narrowing = True
|
||||
- narrow_args = []
|
||||
+ narrow_args_1 = []
|
||||
+ narrow_args_2 = []
|
||||
nret_type = None
|
||||
- narrow_fallback = None
|
||||
for order, real_type in sorted(Type.real_types_order.items()):
|
||||
if real_type.name == ret:
|
||||
nret_type = real_type
|
||||
elif nret_type and real_type.name.startswith('_Float'):
|
||||
- narrow_args.append(real_type)
|
||||
- if (narrow_fallback is None
|
||||
- and ret.endswith('x') == real_type.name.endswith('x')):
|
||||
- narrow_fallback = real_type
|
||||
+ if ret.endswith('x') == real_type.name.endswith('x'):
|
||||
+ narrow_args_1.append(real_type)
|
||||
+ else:
|
||||
+ narrow_args_2.append(real_type)
|
||||
+ narrow_args = narrow_args_1 + narrow_args_2
|
||||
if narrow_args:
|
||||
narrow_cond = ('(%s && (%s))'
|
||||
% (nret_type.condition,
|
||||
' || '.join(t.condition
|
||||
for t in narrow_args)))
|
||||
- if narrow_fallback is None:
|
||||
- narrow_fallback = narrow_args[0]
|
||||
- if ret == '_Float32x':
|
||||
- narrow_fallback = Type.float32x_ext_type
|
||||
else:
|
||||
# No possible argument types, even conditionally.
|
||||
narrow_cond = '0'
|
||||
- narrowing_nonstd = narrowing and not narrowing_std
|
||||
types = [ret] + args
|
||||
for t in types:
|
||||
if t != 'c' and t != 'g' and t != 'r' and t != 's':
|
||||
@@ -530,19 +511,13 @@ class Tests(object):
|
||||
if t == 'g' or t == 'c':
|
||||
arg_types.append(Type.argument_types_list)
|
||||
elif t == 'r':
|
||||
- if narrowing_std:
|
||||
- arg_types.append(Type.standard_real_argument_types_list)
|
||||
- elif narrowing:
|
||||
- arg_types.append(
|
||||
- Type.non_standard_real_argument_types_list)
|
||||
- else:
|
||||
- arg_types.append(Type.real_argument_types_list)
|
||||
+ arg_types.append(Type.real_argument_types_list)
|
||||
elif t == 's':
|
||||
arg_types.append(Type.standard_real_argument_types_list)
|
||||
arg_types_product = list_product(arg_types)
|
||||
test_num = 0
|
||||
for this_args in arg_types_product:
|
||||
- comb_type = Type.combine_types(this_args, narrowing_nonstd)
|
||||
+ comb_type = Type.combine_types(this_args)
|
||||
if narrowing:
|
||||
# As long as there are no integer arguments, and as
|
||||
# long as the chosen argument type is as wide as all
|
||||
@@ -550,22 +525,22 @@ class Tests(object):
|
||||
# of the macro call do not depend on the exact
|
||||
# function chosen. In particular, for f32x functions
|
||||
# when _Float64x exists, the chosen type should differ
|
||||
- # for _Float32x and _Float64 arguments, but it is not
|
||||
- # always possible to distinguish those types before
|
||||
- # GCC 7 and the implementation does not attempt to do
|
||||
- # so before GCC 8.
|
||||
+ # for double / _Float32x and _Float64 arguments, but
|
||||
+ # it is not always possible to distinguish those types
|
||||
+ # before GCC 7 (resulting in some cases - only real
|
||||
+ # arguments - where a wider argument type is used,
|
||||
+ # which is semantically OK, and others - integer
|
||||
+ # arguments present - where it may not be OK, but is
|
||||
+ # unavoidable).
|
||||
narrow_mant_dig = comb_type.real_type.mant_dig
|
||||
for arg_type in this_args:
|
||||
if arg_type.integer:
|
||||
narrow_mant_dig = 0
|
||||
else:
|
||||
narrow_mant_dig = 0
|
||||
- if (narrowing
|
||||
- and comb_type not in narrow_args
|
||||
- and narrow_fallback is not None):
|
||||
- comb_type = narrow_fallback
|
||||
- can_comb = Type.can_combine_types(this_args, narrowing_nonstd)
|
||||
+ can_comb = Type.can_combine_types(this_args)
|
||||
all_conds = [t.condition for t in this_args]
|
||||
+ narrow_args_cond = '(%s)' % ' && '.join(sorted(set(all_conds)))
|
||||
all_conds.append(can_comb)
|
||||
if narrowing:
|
||||
all_conds.append(narrow_cond)
|
||||
@@ -579,10 +554,69 @@ class Tests(object):
|
||||
test_func_name = 'test_%s_%d' % (macro, test_num)
|
||||
test_num += 1
|
||||
mant_dig = comb_type.real_type.mant_dig
|
||||
+ test_mant_dig_comp = ''
|
||||
+ if (narrowing
|
||||
+ and comb_type not in narrow_args):
|
||||
+ # The expected argument type is the first in
|
||||
+ # narrow_args that can represent all the values of
|
||||
+ # comb_type (which, for the supported cases, means the
|
||||
+ # first with mant_dig at least as large as that for
|
||||
+ # comb_type, provided this isn't the case of an IBM
|
||||
+ # long double argument with binary128 type from
|
||||
+ # narrow_args).
|
||||
+ narrow_extra_conds = []
|
||||
+ test_mant_dig_list = ['#undef NARROW_MANT_DIG\n#if 0\n']
|
||||
+ for t in narrow_args:
|
||||
+ t_cond = '(%s && %s && %s <= %s && %s)' % (
|
||||
+ narrow_args_cond, t.condition, mant_dig, t.mant_dig,
|
||||
+ Type.can_combine_types(this_args + [t]))
|
||||
+ narrow_extra_conds.append(t_cond)
|
||||
+ test_mant_dig_list.append('#elif %s\n'
|
||||
+ '#define NARROW_MANT_DIG %s\n'
|
||||
+ % (t_cond, t.mant_dig))
|
||||
+ test_mant_dig_list.append('#endif\n')
|
||||
+ test_mant_dig_comp = ''.join(test_mant_dig_list)
|
||||
+ all_conds.append('(%s)' % ' || '.join(narrow_extra_conds))
|
||||
+ # A special case where this logic isn't correct is
|
||||
+ # where comb_type is the internal long_double_Float64
|
||||
+ # or long_double_Float64x, which will be detected as
|
||||
+ # not in narrow_args even if the actual type chosen in
|
||||
+ # a particular configuration would have been in
|
||||
+ # narrow_args, so check for that case and handle it
|
||||
+ # appropriately. In particular, if long double has
|
||||
+ # the same format as double and there are long double
|
||||
+ # and _Float64 arguments, and the macro returns
|
||||
+ # _Float32x, the function called should be one for
|
||||
+ # _Float64 arguments, not one for _Float64x arguments
|
||||
+ # that would arise from this logic.
|
||||
+ if comb_type.real_type.name == 'long_double_Float64':
|
||||
+ comb_type_1 = Type.long_double_type
|
||||
+ comb_type_2 = Type.float64_type
|
||||
+ comb_type_is_2_cond = 'LDBL_MANT_DIG <= FLT64_MANT_DIG'
|
||||
+ elif comb_type.real_type.name == 'long_double_Float64x':
|
||||
+ comb_type_1 = Type.long_double_type
|
||||
+ comb_type_2 = Type.float64x_type
|
||||
+ comb_type_is_2_cond = 'LDBL_MANT_DIG < FLT64X_MANT_DIG'
|
||||
+ else:
|
||||
+ comb_type_1 = None
|
||||
+ comb_type_2 = None
|
||||
+ if comb_type_1 is None:
|
||||
+ mant_dig = 'NARROW_MANT_DIG'
|
||||
+ else:
|
||||
+ mant_dig = ''
|
||||
+ if comb_type_1 in narrow_args:
|
||||
+ mant_dig += '!(%s) ? %s : ' % (comb_type_is_2_cond,
|
||||
+ comb_type_1.mant_dig)
|
||||
+ if comb_type_2 in narrow_args:
|
||||
+ mant_dig += '%s ? %s : ' % (comb_type_is_2_cond,
|
||||
+ comb_type_2.mant_dig)
|
||||
+ mant_dig += 'NARROW_MANT_DIG'
|
||||
+ if narrow_mant_dig != 0:
|
||||
+ narrow_mant_dig = mant_dig
|
||||
test_text = '%s, "%s", "%s", %s, %s' % (test_func_name, func_name,
|
||||
test_name, mant_dig,
|
||||
narrow_mant_dig)
|
||||
- test_text = ' { %s },\n' % test_text
|
||||
+ test_text = '%s { %s },\n' % (test_mant_dig_comp, test_text)
|
||||
test_text = if_cond_text(all_conds, test_text)
|
||||
self.test_array_list.append(test_text)
|
||||
call_args = []
|
||||
@@ -730,7 +764,7 @@ class Tests(object):
|
||||
' && strcmp (called_func_name,\n'
|
||||
' tests[i].func_name) == 0)\n'
|
||||
' num_pass++;\n'
|
||||
- '#if !__GNUC_PREREQ (8, 0)\n'
|
||||
+ '#if !__GNUC_PREREQ (7, 0)\n'
|
||||
' else if (tests[i].narrow_mant_dig > 0\n'
|
||||
' && (called_mant_dig\n'
|
||||
' >= tests[i].narrow_mant_dig)\n'
|
||||
@@ -747,6 +781,21 @@ class Tests(object):
|
||||
' tests[i].mant_dig,\n'
|
||||
' called_func_name, called_mant_dig);\n'
|
||||
' }\n'
|
||||
+ ' else if (tests[i].narrow_mant_dig == 0\n'
|
||||
+ ' && strcmp (called_func_name,\n'
|
||||
+ ' tests[i].func_name) == 0)\n'
|
||||
+ ' {\n'
|
||||
+ ' num_pass++;\n'
|
||||
+ ' printf ("Test %zu (%s):\\n"\n'
|
||||
+ ' " Expected: %s precision %d\\n"\n'
|
||||
+ ' " Actual: %s precision %d\\n"\n'
|
||||
+ ' " (unavoidable with old GCC)'
|
||||
+ '\\n\\n",\n'
|
||||
+ ' i, tests[i].test_name,\n'
|
||||
+ ' tests[i].func_name,\n'
|
||||
+ ' tests[i].mant_dig,\n'
|
||||
+ ' called_func_name, called_mant_dig);\n'
|
||||
+ ' }\n'
|
||||
'#endif\n'
|
||||
' else\n'
|
||||
' {\n'
|
||||
diff --git a/math/tgmath.h b/math/tgmath.h
|
||||
index b55cb39c93575ddc..dbd165dd1882dcc4 100644
|
||||
--- a/math/tgmath.h
|
||||
+++ b/math/tgmath.h
|
||||
@@ -37,9 +37,17 @@
|
||||
for older GCC, using other compiler extensions but with macros
|
||||
expanding their arguments many times (so resulting in exponential
|
||||
blowup of the size of expansions when calls to such macros are
|
||||
- nested inside arguments to such macros). */
|
||||
+ nested inside arguments to such macros). Because of a long series
|
||||
+ of defect fixes made after the initial release of TS 18661-1, GCC
|
||||
+ versions before GCC 13 have __builtin_tgmath semantics that, when
|
||||
+ integer arguments are passed to narrowing macros returning
|
||||
+ _Float32x, or non-narrowing macros with at least two generic
|
||||
+ arguments, do not always correspond to the C2X semantics, so more
|
||||
+ complicated macro definitions are also used in some cases for
|
||||
+ versions from GCC 8 to GCC 12. */
|
||||
|
||||
#define __HAVE_BUILTIN_TGMATH __GNUC_PREREQ (8, 0)
|
||||
+#define __HAVE_BUILTIN_TGMATH_C2X __GNUC_PREREQ (13, 0)
|
||||
|
||||
#if __GNUC_PREREQ (2, 7)
|
||||
|
||||
@@ -135,13 +143,14 @@
|
||||
__builtin_tgmath (__TGMATH_NARROW_FUNCS_F32 (F) (X), (Y))
|
||||
# define __TGMATH_2_NARROW_F64(F, X, Y) \
|
||||
__builtin_tgmath (__TGMATH_NARROW_FUNCS_F64 (F) (X), (Y))
|
||||
-# if __HAVE_FLOAT128
|
||||
+# if __HAVE_FLOAT128 && __HAVE_BUILTIN_TGMATH_C2X
|
||||
# define __TGMATH_2_NARROW_F32X(F, X, Y) \
|
||||
__builtin_tgmath (__TGMATH_NARROW_FUNCS_F32X (F) (X), (Y))
|
||||
# endif
|
||||
|
||||
-# else /* !__HAVE_BUILTIN_TGMATH. */
|
||||
+# endif
|
||||
|
||||
+# if !__HAVE_BUILTIN_TGMATH_C2X
|
||||
# ifdef __NO_LONG_DOUBLE_MATH
|
||||
# define __tgml(fct) fct
|
||||
# else
|
||||
@@ -181,13 +190,17 @@
|
||||
/* Whether an expression (of arithmetic type) has a real type. */
|
||||
# define __expr_is_real(E) (__builtin_classify_type (E) != 9)
|
||||
|
||||
+/* Type T1 if E is 1, type T2 is E is 0. */
|
||||
+# define __tgmath_type_if(T1, T2, E) \
|
||||
+ __typeof__ (*(0 ? (__typeof__ (0 ? (T2 *) 0 : (void *) (E))) 0 \
|
||||
+ : (__typeof__ (0 ? (T1 *) 0 : (void *) (!(E)))) 0))
|
||||
+
|
||||
/* The tgmath real type for T, where E is 0 if T is an integer type
|
||||
and 1 for a floating type. If T has a complex type, it is
|
||||
unspecified whether the return type is real or complex (but it has
|
||||
the correct corresponding real type). */
|
||||
# define __tgmath_real_type_sub(T, E) \
|
||||
- __typeof__ (*(0 ? (__typeof__ (0 ? (double *) 0 : (void *) (E))) 0 \
|
||||
- : (__typeof__ (0 ? (T *) 0 : (void *) (!(E)))) 0))
|
||||
+ __tgmath_type_if (T, double, E)
|
||||
|
||||
/* The tgmath real type of EXPR. */
|
||||
# define __tgmath_real_type(expr) \
|
||||
@@ -215,6 +228,56 @@
|
||||
__real_integer_type (__typeof__ (+(expr))), \
|
||||
__complex_integer_type (__typeof__ (+(expr))))
|
||||
|
||||
+/* The tgmath real type of EXPR1 combined with EXPR2, without handling
|
||||
+ the C2X rule of interpreting integer arguments as _Float32x if any
|
||||
+ argument is _FloatNx. */
|
||||
+# define __tgmath_real_type2_base(expr1, expr2) \
|
||||
+ __typeof ((__tgmath_real_type (expr1)) 0 + (__tgmath_real_type (expr2)) 0)
|
||||
+
|
||||
+/* The tgmath complex type of EXPR1 combined with EXPR2, without
|
||||
+ handling the C2X rule of interpreting integer arguments as
|
||||
+ _Float32x if any argument is _FloatNx. */
|
||||
+# define __tgmath_complex_type2_base(expr1, expr2) \
|
||||
+ __typeof ((__tgmath_complex_type (expr1)) 0 \
|
||||
+ + (__tgmath_complex_type (expr2)) 0)
|
||||
+
|
||||
+/* The tgmath real type of EXPR1 combined with EXPR2 and EXPR3,
|
||||
+ without handling the C2X rule of interpreting integer arguments as
|
||||
+ _Float32x if any argument is _FloatNx. */
|
||||
+# define __tgmath_real_type3_base(expr1, expr2, expr3) \
|
||||
+ __typeof ((__tgmath_real_type (expr1)) 0 \
|
||||
+ + (__tgmath_real_type (expr2)) 0 \
|
||||
+ + (__tgmath_real_type (expr3)) 0)
|
||||
+
|
||||
+/* The tgmath real or complex type of EXPR1 combined with EXPR2 (and
|
||||
+ EXPR3 if applicable). */
|
||||
+# if __HAVE_FLOATN_NOT_TYPEDEF
|
||||
+# define __tgmath_real_type2(expr1, expr2) \
|
||||
+ __tgmath_type_if (_Float32x, __tgmath_real_type2_base (expr1, expr2), \
|
||||
+ _Generic ((expr1) + (expr2), _Float32x: 1, default: 0))
|
||||
+# define __tgmath_complex_type2(expr1, expr2) \
|
||||
+ __tgmath_type_if (_Float32x, \
|
||||
+ __tgmath_type_if (_Complex _Float32x, \
|
||||
+ __tgmath_complex_type2_base (expr1, \
|
||||
+ expr2), \
|
||||
+ _Generic ((expr1) + (expr2), \
|
||||
+ _Complex _Float32x: 1, \
|
||||
+ default: 0)), \
|
||||
+ _Generic ((expr1) + (expr2), _Float32x: 1, default: 0))
|
||||
+# define __tgmath_real_type3(expr1, expr2, expr3) \
|
||||
+ __tgmath_type_if (_Float32x, \
|
||||
+ __tgmath_real_type3_base (expr1, expr2, expr3), \
|
||||
+ _Generic ((expr1) + (expr2) + (expr3), \
|
||||
+ _Float32x: 1, default: 0))
|
||||
+# else
|
||||
+# define __tgmath_real_type2(expr1, expr2) \
|
||||
+ __tgmath_real_type2_base (expr1, expr2)
|
||||
+# define __tgmath_complex_type2(expr1, expr2) \
|
||||
+ __tgmath_complex_type2_base (expr1, expr2)
|
||||
+# define __tgmath_real_type3(expr1, expr2, expr3) \
|
||||
+ __tgmath_real_type3_base (expr1, expr2, expr3)
|
||||
+# endif
|
||||
+
|
||||
# if (__HAVE_DISTINCT_FLOAT16 \
|
||||
|| __HAVE_DISTINCT_FLOAT32 \
|
||||
|| __HAVE_DISTINCT_FLOAT64 \
|
||||
@@ -226,7 +289,10 @@
|
||||
|
||||
/* Expand to text that checks if ARG_COMB has type _Float128, and if
|
||||
so calls the appropriately suffixed FCT (which may include a cast),
|
||||
- or FCT and CFCT for complex functions, with arguments ARG_CALL. */
|
||||
+ or FCT and CFCT for complex functions, with arguments ARG_CALL.
|
||||
+ __TGMATH_F128LD (only used in the __HAVE_FLOAT64X_LONG_DOUBLE case,
|
||||
+ for narrowing macros) handles long double the same as
|
||||
+ _Float128. */
|
||||
# if __HAVE_DISTINCT_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
|
||||
# if (!__HAVE_FLOAT64X \
|
||||
|| __HAVE_FLOAT64X_LONG_DOUBLE \
|
||||
@@ -234,6 +300,10 @@
|
||||
# define __TGMATH_F128(arg_comb, fct, arg_call) \
|
||||
__builtin_types_compatible_p (__typeof (+(arg_comb)), _Float128) \
|
||||
? fct ## f128 arg_call :
|
||||
+# define __TGMATH_F128LD(arg_comb, fct, arg_call) \
|
||||
+ (__builtin_types_compatible_p (__typeof (+(arg_comb)), _Float128) \
|
||||
+ || __builtin_types_compatible_p (__typeof (+(arg_comb)), long double)) \
|
||||
+ ? fct ## f128 arg_call :
|
||||
# define __TGMATH_CF128(arg_comb, fct, cfct, arg_call) \
|
||||
__builtin_types_compatible_p (__typeof (+__real__ (arg_comb)), _Float128) \
|
||||
? (__expr_is_real (arg_comb) \
|
||||
@@ -259,7 +329,7 @@
|
||||
# define __TGMATH_CF128(arg_comb, fct, cfct, arg_call) /* Nothing. */
|
||||
# endif
|
||||
|
||||
-# endif /* !__HAVE_BUILTIN_TGMATH. */
|
||||
+# endif /* !__HAVE_BUILTIN_TGMATH_C2X. */
|
||||
|
||||
/* We have two kinds of generic macros: to support functions which are
|
||||
only defined on real valued parameters and those which are defined
|
||||
@@ -272,14 +342,18 @@
|
||||
__TGMATH_2 (Fct, (Val1), (Val2))
|
||||
# define __TGMATH_BINARY_FIRST_REAL_STD_ONLY(Val1, Val2, Fct) \
|
||||
__TGMATH_2STD (Fct, (Val1), (Val2))
|
||||
-# define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \
|
||||
+# if __HAVE_BUILTIN_TGMATH_C2X
|
||||
+# define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \
|
||||
__TGMATH_2 (Fct, (Val1), (Val2))
|
||||
+# endif
|
||||
# define __TGMATH_BINARY_REAL_STD_ONLY(Val1, Val2, Fct) \
|
||||
__TGMATH_2STD (Fct, (Val1), (Val2))
|
||||
-# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
|
||||
+# if __HAVE_BUILTIN_TGMATH_C2X
|
||||
+# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
|
||||
__TGMATH_3 (Fct, (Val1), (Val2), (Val3))
|
||||
-# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \
|
||||
+# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \
|
||||
__TGMATH_3 (Fct, (Val1), (Val2), (Val3))
|
||||
+# endif
|
||||
# define __TGMATH_TERNARY_FIRST_REAL_RET_ONLY(Val1, Val2, Val3, Fct) \
|
||||
__TGMATH_3 (Fct, (Val1), (Val2), (Val3))
|
||||
# define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \
|
||||
@@ -289,11 +363,14 @@
|
||||
__TGMATH_1C (Fct, Cfct, (Val))
|
||||
# define __TGMATH_UNARY_REAL_IMAG_RET_REAL_SAME(Val, Cfct) \
|
||||
__TGMATH_1 (Cfct, (Val))
|
||||
-# define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \
|
||||
+# if __HAVE_BUILTIN_TGMATH_C2X
|
||||
+# define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \
|
||||
__TGMATH_2C (Fct, Cfct, (Val1), (Val2))
|
||||
+# endif
|
||||
|
||||
-# else /* !__HAVE_BUILTIN_TGMATH. */
|
||||
+# endif
|
||||
|
||||
+# if !__HAVE_BUILTIN_TGMATH
|
||||
# define __TGMATH_UNARY_REAL_ONLY(Val, Fct) \
|
||||
(__extension__ ((sizeof (+(Val)) == sizeof (double) \
|
||||
|| __builtin_classify_type (Val) != 8) \
|
||||
@@ -330,29 +407,28 @@
|
||||
: (sizeof (+(Val1)) == sizeof (float)) \
|
||||
? (__tgmath_real_type (Val1)) Fct##f (Val1, Val2) \
|
||||
: (__tgmath_real_type (Val1)) __tgml(Fct) (Val1, Val2)))
|
||||
+# endif
|
||||
|
||||
+# if !__HAVE_BUILTIN_TGMATH_C2X
|
||||
# define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \
|
||||
(__extension__ ((sizeof ((Val1) + (Val2)) > sizeof (double) \
|
||||
&& __builtin_classify_type ((Val1) + (Val2)) == 8) \
|
||||
? __TGMATH_F128 ((Val1) + (Val2), \
|
||||
- (__typeof \
|
||||
- ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0)) Fct, \
|
||||
+ (__tgmath_real_type2 (Val1, Val2)) Fct, \
|
||||
(Val1, Val2)) \
|
||||
- (__typeof ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0)) \
|
||||
+ (__tgmath_real_type2 (Val1, Val2)) \
|
||||
__tgml(Fct) (Val1, Val2) \
|
||||
: (sizeof (+(Val1)) == sizeof (double) \
|
||||
|| sizeof (+(Val2)) == sizeof (double) \
|
||||
|| __builtin_classify_type (Val1) != 8 \
|
||||
|| __builtin_classify_type (Val2) != 8) \
|
||||
- ? (__typeof ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0)) \
|
||||
+ ? (__tgmath_real_type2 (Val1, Val2)) \
|
||||
Fct (Val1, Val2) \
|
||||
- : (__typeof ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0)) \
|
||||
+ : (__tgmath_real_type2 (Val1, Val2)) \
|
||||
Fct##f (Val1, Val2)))
|
||||
+# endif
|
||||
|
||||
+# if !__HAVE_BUILTIN_TGMATH
|
||||
# define __TGMATH_BINARY_REAL_STD_ONLY(Val1, Val2, Fct) \
|
||||
(__extension__ ((sizeof ((Val1) + (Val2)) > sizeof (double) \
|
||||
&& __builtin_classify_type ((Val1) + (Val2)) == 8) \
|
||||
@@ -369,27 +445,24 @@
|
||||
: (__typeof ((__tgmath_real_type (Val1)) 0 \
|
||||
+ (__tgmath_real_type (Val2)) 0)) \
|
||||
Fct##f (Val1, Val2)))
|
||||
+# endif
|
||||
|
||||
+# if !__HAVE_BUILTIN_TGMATH_C2X
|
||||
# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
|
||||
(__extension__ ((sizeof ((Val1) + (Val2)) > sizeof (double) \
|
||||
&& __builtin_classify_type ((Val1) + (Val2)) == 8) \
|
||||
? __TGMATH_F128 ((Val1) + (Val2), \
|
||||
- (__typeof \
|
||||
- ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0)) Fct, \
|
||||
+ (__tgmath_real_type2 (Val1, Val2)) Fct, \
|
||||
(Val1, Val2, Val3)) \
|
||||
- (__typeof ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0)) \
|
||||
+ (__tgmath_real_type2 (Val1, Val2)) \
|
||||
__tgml(Fct) (Val1, Val2, Val3) \
|
||||
: (sizeof (+(Val1)) == sizeof (double) \
|
||||
|| sizeof (+(Val2)) == sizeof (double) \
|
||||
|| __builtin_classify_type (Val1) != 8 \
|
||||
|| __builtin_classify_type (Val2) != 8) \
|
||||
- ? (__typeof ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0)) \
|
||||
+ ? (__tgmath_real_type2 (Val1, Val2)) \
|
||||
Fct (Val1, Val2, Val3) \
|
||||
- : (__typeof ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0)) \
|
||||
+ : (__tgmath_real_type2 (Val1, Val2)) \
|
||||
Fct##f (Val1, Val2, Val3)))
|
||||
|
||||
# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \
|
||||
@@ -397,14 +470,10 @@
|
||||
&& __builtin_classify_type ((Val1) + (Val2) + (Val3)) \
|
||||
== 8) \
|
||||
? __TGMATH_F128 ((Val1) + (Val2) + (Val3), \
|
||||
- (__typeof \
|
||||
- ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0 \
|
||||
- + (__tgmath_real_type (Val3)) 0)) Fct, \
|
||||
+ (__tgmath_real_type3 (Val1, Val2, \
|
||||
+ Val3)) Fct, \
|
||||
(Val1, Val2, Val3)) \
|
||||
- (__typeof ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0 \
|
||||
- + (__tgmath_real_type (Val3)) 0)) \
|
||||
+ (__tgmath_real_type3 (Val1, Val2, Val3)) \
|
||||
__tgml(Fct) (Val1, Val2, Val3) \
|
||||
: (sizeof (+(Val1)) == sizeof (double) \
|
||||
|| sizeof (+(Val2)) == sizeof (double) \
|
||||
@@ -412,15 +481,13 @@
|
||||
|| __builtin_classify_type (Val1) != 8 \
|
||||
|| __builtin_classify_type (Val2) != 8 \
|
||||
|| __builtin_classify_type (Val3) != 8) \
|
||||
- ? (__typeof ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0 \
|
||||
- + (__tgmath_real_type (Val3)) 0)) \
|
||||
+ ? (__tgmath_real_type3 (Val1, Val2, Val3)) \
|
||||
Fct (Val1, Val2, Val3) \
|
||||
- : (__typeof ((__tgmath_real_type (Val1)) 0 \
|
||||
- + (__tgmath_real_type (Val2)) 0 \
|
||||
- + (__tgmath_real_type (Val3)) 0)) \
|
||||
+ : (__tgmath_real_type3 (Val1, Val2, Val3)) \
|
||||
Fct##f (Val1, Val2, Val3)))
|
||||
+# endif
|
||||
|
||||
+# if !__HAVE_BUILTIN_TGMATH
|
||||
# define __TGMATH_TERNARY_FIRST_REAL_RET_ONLY(Val1, Val2, Val3, Fct) \
|
||||
(__extension__ ((sizeof (+(Val1)) == sizeof (double) \
|
||||
|| __builtin_classify_type (Val1) != 8) \
|
||||
@@ -496,7 +563,9 @@
|
||||
__tgml(Cfct) (Val))))
|
||||
# define __TGMATH_UNARY_REAL_IMAG_RET_REAL_SAME(Val, Cfct) \
|
||||
__TGMATH_UNARY_REAL_IMAG_RET_REAL ((Val), Cfct, Cfct)
|
||||
+# endif
|
||||
|
||||
+# if !__HAVE_BUILTIN_TGMATH_C2X
|
||||
/* XXX This definition has to be changed as soon as the compiler understands
|
||||
the imaginary keyword. */
|
||||
# define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \
|
||||
@@ -505,46 +574,39 @@
|
||||
&& __builtin_classify_type (__real__ (Val1) \
|
||||
+ __real__ (Val2)) == 8) \
|
||||
? __TGMATH_CF128 ((Val1) + (Val2), \
|
||||
- (__typeof \
|
||||
- ((__tgmath_complex_type (Val1)) 0 \
|
||||
- + (__tgmath_complex_type (Val2)) 0)) \
|
||||
+ (__tgmath_complex_type2 (Val1, Val2)) \
|
||||
Fct, \
|
||||
- (__typeof \
|
||||
- ((__tgmath_complex_type (Val1)) 0 \
|
||||
- + (__tgmath_complex_type (Val2)) 0)) \
|
||||
+ (__tgmath_complex_type2 (Val1, Val2)) \
|
||||
Cfct, \
|
||||
(Val1, Val2)) \
|
||||
(__expr_is_real ((Val1) + (Val2)) \
|
||||
- ? (__typeof ((__tgmath_complex_type (Val1)) 0 \
|
||||
- + (__tgmath_complex_type (Val2)) 0)) \
|
||||
+ ? (__tgmath_complex_type2 (Val1, Val2)) \
|
||||
__tgml(Fct) (Val1, Val2) \
|
||||
- : (__typeof ((__tgmath_complex_type (Val1)) 0 \
|
||||
- + (__tgmath_complex_type (Val2)) 0)) \
|
||||
+ : (__tgmath_complex_type2 (Val1, Val2)) \
|
||||
__tgml(Cfct) (Val1, Val2)) \
|
||||
: (sizeof (+__real__ (Val1)) == sizeof (double) \
|
||||
|| sizeof (+__real__ (Val2)) == sizeof (double) \
|
||||
|| __builtin_classify_type (__real__ (Val1)) != 8 \
|
||||
|| __builtin_classify_type (__real__ (Val2)) != 8) \
|
||||
? (__expr_is_real ((Val1) + (Val2)) \
|
||||
- ? (__typeof ((__tgmath_complex_type (Val1)) 0 \
|
||||
- + (__tgmath_complex_type (Val2)) 0)) \
|
||||
+ ? (__tgmath_complex_type2 (Val1, Val2)) \
|
||||
Fct (Val1, Val2) \
|
||||
- : (__typeof ((__tgmath_complex_type (Val1)) 0 \
|
||||
- + (__tgmath_complex_type (Val2)) 0)) \
|
||||
+ : (__tgmath_complex_type2 (Val1, Val2)) \
|
||||
Cfct (Val1, Val2)) \
|
||||
: (__expr_is_real ((Val1) + (Val2)) \
|
||||
- ? (__typeof ((__tgmath_complex_type (Val1)) 0 \
|
||||
- + (__tgmath_complex_type (Val2)) 0)) \
|
||||
+ ? (__tgmath_complex_type2 (Val1, Val2)) \
|
||||
Fct##f (Val1, Val2) \
|
||||
- : (__typeof ((__tgmath_complex_type (Val1)) 0 \
|
||||
- + (__tgmath_complex_type (Val2)) 0)) \
|
||||
+ : (__tgmath_complex_type2 (Val1, Val2)) \
|
||||
Cfct##f (Val1, Val2))))
|
||||
+# endif
|
||||
|
||||
+# if !__HAVE_BUILTIN_TGMATH
|
||||
# define __TGMATH_2_NARROW_F(F, X, Y) \
|
||||
(__extension__ (sizeof ((__tgmath_real_type (X)) 0 \
|
||||
+ (__tgmath_real_type (Y)) 0) > sizeof (double) \
|
||||
? F ## l (X, Y) \
|
||||
: F (X, Y)))
|
||||
+# endif
|
||||
/* In most cases, these narrowing macro definitions based on sizeof
|
||||
ensure that the function called has the right argument format, as
|
||||
for other <tgmath.h> macros for compilers before GCC 8, but may not
|
||||
@@ -553,35 +615,50 @@
|
||||
|
||||
In the case of macros for _Float32x return type, when _Float64x
|
||||
exists, _Float64 arguments should result in the *f64 function being
|
||||
- called while _Float32x arguments should result in the *f64x
|
||||
- function being called. These cases cannot be distinguished using
|
||||
- sizeof (or at all if the types are typedefs rather than different
|
||||
- types). However, for these functions it is OK (does not affect the
|
||||
- final result) to call a function with any argument format at least
|
||||
- as wide as all the floating-point arguments, unless that affects
|
||||
- rounding of integer arguments. Integer arguments are considered to
|
||||
- have type _Float64, so the *f64 functions are preferred for f32x*
|
||||
- macros when no argument has a wider floating-point type. */
|
||||
-# if __HAVE_FLOAT64X_LONG_DOUBLE && __HAVE_DISTINCT_FLOAT128
|
||||
+ called while _Float32x, float and double arguments should result in
|
||||
+ the *f64x function being called (and integer arguments are
|
||||
+ considered to have type _Float32x if any argument has type
|
||||
+ _FloatNx, or double otherwise). These cases cannot be
|
||||
+ distinguished using sizeof (or at all if the types are typedefs
|
||||
+ rather than different types, in which case we err on the side of
|
||||
+ using the wider type if unsure). */
|
||||
+# if !__HAVE_BUILTIN_TGMATH_C2X
|
||||
+# if __HAVE_FLOATN_NOT_TYPEDEF
|
||||
+# define __TGMATH_NARROW_F32X_USE_F64X(X) \
|
||||
+ !__builtin_types_compatible_p (__typeof (+(X)), _Float64)
|
||||
+# else
|
||||
+# define __TGMATH_NARROW_F32X_USE_F64X(X) \
|
||||
+ (__builtin_types_compatible_p (__typeof (+(X)), double) \
|
||||
+ || __builtin_types_compatible_p (__typeof (+(X)), float) \
|
||||
+ || !__floating_type (__typeof (+(X))))
|
||||
+# endif
|
||||
+# endif
|
||||
+# if __HAVE_FLOAT64X_LONG_DOUBLE && __HAVE_DISTINCT_FLOAT128
|
||||
+# if !__HAVE_BUILTIN_TGMATH
|
||||
# define __TGMATH_2_NARROW_F32(F, X, Y) \
|
||||
(__extension__ (sizeof ((__tgmath_real_type (X)) 0 \
|
||||
+ (__tgmath_real_type (Y)) 0) > sizeof (_Float64) \
|
||||
- ? __TGMATH_F128 ((X) + (Y), F, (X, Y)) \
|
||||
+ ? __TGMATH_F128LD ((X) + (Y), F, (X, Y)) \
|
||||
F ## f64x (X, Y) \
|
||||
: F ## f64 (X, Y)))
|
||||
# define __TGMATH_2_NARROW_F64(F, X, Y) \
|
||||
(__extension__ (sizeof ((__tgmath_real_type (X)) 0 \
|
||||
+ (__tgmath_real_type (Y)) 0) > sizeof (_Float64) \
|
||||
- ? __TGMATH_F128 ((X) + (Y), F, (X, Y)) \
|
||||
+ ? __TGMATH_F128LD ((X) + (Y), F, (X, Y)) \
|
||||
F ## f64x (X, Y) \
|
||||
: F ## f128 (X, Y)))
|
||||
+# endif
|
||||
+# if !__HAVE_BUILTIN_TGMATH_C2X
|
||||
# define __TGMATH_2_NARROW_F32X(F, X, Y) \
|
||||
(__extension__ (sizeof ((__tgmath_real_type (X)) 0 \
|
||||
+ (__tgmath_real_type (Y)) 0) > sizeof (_Float64) \
|
||||
+ || __TGMATH_NARROW_F32X_USE_F64X ((X) + (Y)) \
|
||||
? __TGMATH_F128 ((X) + (Y), F, (X, Y)) \
|
||||
F ## f64x (X, Y) \
|
||||
: F ## f64 (X, Y)))
|
||||
-# elif __HAVE_FLOAT128
|
||||
+# endif
|
||||
+# elif __HAVE_FLOAT128
|
||||
+# if !__HAVE_BUILTIN_TGMATH
|
||||
# define __TGMATH_2_NARROW_F32(F, X, Y) \
|
||||
(__extension__ (sizeof ((__tgmath_real_type (X)) 0 \
|
||||
+ (__tgmath_real_type (Y)) 0) > sizeof (_Float64) \
|
||||
@@ -589,16 +666,21 @@
|
||||
: F ## f64 (X, Y)))
|
||||
# define __TGMATH_2_NARROW_F64(F, X, Y) \
|
||||
(F ## f128 (X, Y))
|
||||
+# endif
|
||||
+# if !__HAVE_BUILTIN_TGMATH_C2X
|
||||
# define __TGMATH_2_NARROW_F32X(F, X, Y) \
|
||||
(__extension__ (sizeof ((__tgmath_real_type (X)) 0 \
|
||||
+ (__tgmath_real_type (Y)) 0) > sizeof (_Float32x) \
|
||||
+ || __TGMATH_NARROW_F32X_USE_F64X ((X) + (Y)) \
|
||||
? F ## f64x (X, Y) \
|
||||
: F ## f64 (X, Y)))
|
||||
-# else
|
||||
+# endif
|
||||
+# else
|
||||
+# if !__HAVE_BUILTIN_TGMATH
|
||||
# define __TGMATH_2_NARROW_F32(F, X, Y) \
|
||||
(F ## f64 (X, Y))
|
||||
# endif
|
||||
-# endif /* !__HAVE_BUILTIN_TGMATH. */
|
||||
+# endif
|
||||
#else
|
||||
# error "Unsupported compiler; you cannot use <tgmath.h>"
|
||||
#endif
|
10
glibc.spec
10
glibc.spec
@ -155,7 +155,7 @@ end \
|
||||
Summary: The GNU libc libraries
|
||||
Name: glibc
|
||||
Version: %{glibcversion}
|
||||
Release: 72%{?dist}
|
||||
Release: 73%{?dist}
|
||||
|
||||
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
||||
# libraries.
|
||||
@ -726,6 +726,11 @@ Patch485: glibc-rh2215368.patch
|
||||
Patch486: glibc-rh2213908.patch
|
||||
Patch487: glibc-rh2189923.patch
|
||||
Patch488: glibc-RHEL-729.patch
|
||||
Patch489: glibc-rh2222188-1.patch
|
||||
Patch490: glibc-rh2222188-2.patch
|
||||
Patch491: glibc-rh2222188-3.patch
|
||||
Patch492: glibc-rh2222188-4.patch
|
||||
Patch493: glibc-rh2222188-5.patch
|
||||
|
||||
##############################################################################
|
||||
# Continued list of core "glibc" package information:
|
||||
@ -2883,6 +2888,9 @@ update_gconv_modules_cache ()
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Thu Jul 20 2023 Florian Weimer <fweimer@redhat.com> - 2.34-73
|
||||
- GCC Toolset 13 C++ compatibility for <math.h> iseqsig (#2222188)
|
||||
|
||||
* Fri Jul 07 2023 Carlos O'Donell <carlos@redhat.com> - 2.34-72
|
||||
- Update ESTALE error message translations (RHEL-729)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user