[glibc/azanella/clang] math: Do not use __builtin_isnan on clang

Adhemerval Zanella azanella@sourceware.org
Wed Aug 30 12:41:53 GMT 2023


https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=5b60fb027ddc62d4e0c891396a0f16c2a8d48897

commit 5b60fb027ddc62d4e0c891396a0f16c2a8d48897
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Fri Apr 1 17:01:22 2022 -0300

    math: Do not use __builtin_isnan on clang
    
    It does not handle pseudo normal numbers.

Diff:
---
 math/math.h                                 | 3 +--
 sysdeps/ieee754/float128/float128_private.h | 2 +-
 sysdeps/ieee754/float128/s_isnanf128.c      | 4 ++++
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/math/math.h b/math/math.h
index 7a08a775ad..be1518cd4a 100644
--- a/math/math.h
+++ b/math/math.h
@@ -1004,8 +1004,7 @@ enum
 
 /* Return nonzero value if X is a NaN.  We could use `fpclassify' but
    we already have this functions `__isnan' and it is faster.  */
-# if (__GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__) \
-     || __glibc_clang_prereq (2,8)
+# if (__GNUC_PREREQ (4,4) && !defined __SUPPORT_SNAN__)
 #  define isnan(x) __builtin_isnan (x)
 # else
 #  define isnan(x) __MATH_TG ((x), __isnan, (x))
diff --git a/sysdeps/ieee754/float128/float128_private.h b/sysdeps/ieee754/float128/float128_private.h
index 1fbc9dae0a..aedb0d844a 100644
--- a/sysdeps/ieee754/float128/float128_private.h
+++ b/sysdeps/ieee754/float128/float128_private.h
@@ -352,7 +352,7 @@
 #define frexpl frexpf128
 #define getpayloadl getpayloadf128
 #define isinfl isinff128_do_not_use
-#define isnanl isnanf128_do_not_use
+#define isnanl isnanf128
 #define ldexpl ldexpf128
 #define llrintl llrintf128
 #define llroundl llroundf128
diff --git a/sysdeps/ieee754/float128/s_isnanf128.c b/sysdeps/ieee754/float128/s_isnanf128.c
index 59f71533ce..b73a4e80d7 100644
--- a/sysdeps/ieee754/float128/s_isnanf128.c
+++ b/sysdeps/ieee754/float128/s_isnanf128.c
@@ -11,7 +11,11 @@
 #include "../ldbl-128/s_isnanl.c"
 #if !IS_IN (libm)
 #include <float128-abi.h>
+#ifdef SHARED
 hidden_ver (__isnanf128_impl, __isnanf128)
+#else
+strong_alias (__isnanf128_impl, __isnanf128)
+#endif
 _weak_alias (__isnanf128_impl, isnanl)
 versioned_symbol (libc, __isnanf128_impl, __isnanf128, GLIBC_2_34);
 #if (SHLIB_COMPAT (libc, FLOAT128_VERSION_M, GLIBC_2_34))


More information about the Glibc-cvs mailing list