Add _Float128 function aliases [committed]

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Add _Float128 function aliases [committed]

Joseph Myers
This patch adds support for *f128 function aliases on platforms where
long double has the binary128 format (and thus GCC 7 provides the
_Float128 type with the same ABI as long double but as a distinct type
in terms of C type compatibility).  This is the same API as provided
in glibc 2.26 for powerpc64le / x86_64 / x86 / ia64 where _Float128
has a different format from long double, with the bulk of the API
coming from TS 18661-3.  All the functions alias the corresponding
long double functions, and __* function names are not provided since
those are only needed once for each floating-point format, not more
than once for different types with the same format (so for example,
-ffinite-math-only maps foof128 to __fool_finite, while type-generic
macros end up calling e.g. __issignalingl for _Float128 arguments on
such platforms).

The preparation for this feature was done in previous patches, so this
one just needs to add the relevant makefile and header definitions,
and update macro definitions of libm_alias_ldouble_other_r, to turn on
the feature, and update documentation and ABI baselines.

Tested (a) for x86_64, (b) for aarch64, (c) with build-many-glibcs.py
with both GCC 6 and GCC 7.  Committed.

2017-10-18  Joseph Myers  <[hidden email]>

        * sysdeps/ieee754/ldbl-128/Makeconfig: New file.
        * sysdeps/ieee754/ldbl-128/bits/floatn.h: Likewise.
        * sysdeps/ieee754/ldbl-128/float128-abi.h: Likewise.
        * sysdeps/generic/libm-alias-ldouble.h: Include <bits/floatn.h>.
        [__HAVE_FLOAT128 && !__HAVE_DISTINCT_FLOAT128]
        (libm_alias_ldouble_other_r): Also create _Float128 alias.
        * sysdeps/ieee754/ldbl-opt/libm-alias-ldouble.h: Include
        <bits/floatn.h>.
        [__HAVE_FLOAT128 && !__HAVE_DISTINCT_FLOAT128]
        (libm_alias_ldouble_other_r): Also create _Float128 alias.
        * manual/math.texi (Mathematics): Document additional architecture
        support for _Float128.
        * sysdeps/unix/sysv/linux/aarch64/libc.abilist: Update.
        * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
        * sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
        * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
        * sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
        * sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
        * sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
        * sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise.
        * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.

diff --git a/NEWS b/NEWS
index 464d1ce..ad680db 100644
--- a/NEWS
+++ b/NEWS
@@ -29,6 +29,12 @@ Major new features:
   in deadlocks and further data corruption.  This change also affects
   process aborts as the result of assertion failures.
 
+* On platforms where long double has the IEEE binary128 format (aarch64,
+  alpha, mips64, s390 and sparc), the math library now implements _Float128
+  interfaces for that type, as defined by ISO/IEC TS 18661-3:2015.  These
+  are the same interfaces added in version 2.26 for some platforms where
+  this format is supported but is not the format of long double.
+
 Deprecated and removed features, and other changes affecting compatibility:
 
 * On GNU/Linux, the obsolete Linux constant PTRACE_SEIZE_DEVEL is no longer
diff --git a/manual/math.texi b/manual/math.texi
index f5602c9..e6aa342 100644
--- a/manual/math.texi
+++ b/manual/math.texi
@@ -67,7 +67,8 @@ these functions are described along with the @code{double},
 
 Currently, support for @code{_Float@var{N}} or @code{_Float@var{N}x}
 types is only provided for @code{_Float128} on powerpc64le (PowerPC
-64-bits little-endian), x86_64, x86 and ia64.
+64-bits little-endian), x86_64, x86, ia64, aarch64, alpha, mips64,
+s390 and sparc.
 
 @menu
 * Mathematical Constants::      Precise numeric values for often-used
diff --git a/sysdeps/generic/libm-alias-ldouble.h b/sysdeps/generic/libm-alias-ldouble.h
index 82dafd5..7b9bf9a 100644
--- a/sysdeps/generic/libm-alias-ldouble.h
+++ b/sysdeps/generic/libm-alias-ldouble.h
@@ -19,11 +19,18 @@
 #ifndef _LIBM_ALIAS_LDOUBLE_H
 #define _LIBM_ALIAS_LDOUBLE_H
 
+#include <bits/floatn.h>
+
 /* Define _FloatN / _FloatNx aliases for a long double libm function
    that has internal name FROM ## l ## R and public names TO ## suffix
    ## R for each suffix of a supported _FloatN / _FloatNx
    floating-point type with the same format as long double.  */
-#define libm_alias_ldouble_other_r(from, to, r)
+#if __HAVE_FLOAT128 && !__HAVE_DISTINCT_FLOAT128
+# define libm_alias_ldouble_other_r(from, to, r) \
+  weak_alias (from ## l ## r, to ## f128 ## r)
+#else
+# define libm_alias_ldouble_other_r(from, to, r)
+#endif
 
 /* Likewise, but without the R suffix.  */
 #define libm_alias_ldouble_other(from, to) \
diff --git a/sysdeps/ieee754/ldbl-128/Makeconfig b/sysdeps/ieee754/ldbl-128/Makeconfig
new file mode 100644
index 0000000..1f8e256
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-128/Makeconfig
@@ -0,0 +1,3 @@
+# Include this earlier so it can be used earlier in Makefiles,
+# and sysdep/ makefiles.
+float128-alias-fcts = yes
diff --git a/sysdeps/ieee754/ldbl-128/bits/floatn.h b/sysdeps/ieee754/ldbl-128/bits/floatn.h
new file mode 100644
index 0000000..5c87366
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-128/bits/floatn.h
@@ -0,0 +1,80 @@
+/* Macros to control TS 18661-3 glibc features on ldbl-128 platforms.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_FLOATN_H
+#define _BITS_FLOATN_H
+
+#include <features.h>
+#include <bits/long-double.h>
+
+/* Defined to 1 if the current compiler invocation provides a
+   floating-point type with the IEEE 754 binary128 format, and this
+   glibc includes corresponding *f128 interfaces for it.  */
+#ifndef __NO_LONG_DOUBLE_MATH
+# define __HAVE_FLOAT128 1
+#else
+/* glibc does not support _Float128 for platforms where long double is
+   normally binary128 when building with long double as binary64.
+   GCC's default for supported scalar modes does not support it either
+   in that case.  */
+# define __HAVE_FLOAT128 0
+#endif
+
+/* Defined to 1 if __HAVE_FLOAT128 is 1 and the type is ABI-distinct
+   from the default float, double and long double types in this glibc.  */
+#define __HAVE_DISTINCT_FLOAT128 0
+
+/* 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
+/* The literal suffix f128 exists only since GCC 7.0.  */
+#  define __f128(x) x##l
+# else
+#  define __f128(x) x##f128
+# endif
+#endif
+
+/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1.  */
+#if __HAVE_FLOAT128
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+#  define __CFLOAT128 _Complex long double
+# else
+#  define __CFLOAT128 _Complex _Float128
+# endif
+#endif
+
+/* The remaining of this file provides support for older compilers.  */
+#if __HAVE_FLOAT128
+
+/* The type _Float128 exists only since GCC 7.0.  */
+# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
+typedef long double _Float128;
+# endif
+
+/* Various built-in functions do not exist before GCC 7.0.  */
+# if !__GNUC_PREREQ (7, 0)
+#  define __builtin_huge_valf128() (__builtin_huge_vall ())
+#  define __builtin_inff128() (__builtin_infl ())
+#  define __builtin_nanf128(x) (__builtin_nanl (x))
+#  define __builtin_nansf128(x) (__builtin_nansl (x))
+# endif
+
+#endif
+
+#endif /* _BITS_FLOATN_H */
diff --git a/sysdeps/ieee754/ldbl-128/float128-abi.h b/sysdeps/ieee754/ldbl-128/float128-abi.h
new file mode 100644
index 0000000..3077ffc
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-128/float128-abi.h
@@ -0,0 +1,2 @@
+/* ABI version for _Float128 ABI introduction.  */
+#define FLOAT128_VERSION GLIBC_2.27
diff --git a/sysdeps/ieee754/ldbl-opt/libm-alias-ldouble.h b/sysdeps/ieee754/ldbl-opt/libm-alias-ldouble.h
index 291a5f5..ad31f69 100644
--- a/sysdeps/ieee754/ldbl-opt/libm-alias-ldouble.h
+++ b/sysdeps/ieee754/ldbl-opt/libm-alias-ldouble.h
@@ -19,6 +19,7 @@
 #ifndef _LIBM_ALIAS_LDOUBLE_H
 #define _LIBM_ALIAS_LDOUBLE_H
 
+#include <bits/floatn.h>
 #include <math_ldbl_opt.h>
 #include <ldbl-compat-choose.h>
 
@@ -26,7 +27,12 @@
    that has internal name FROM ## l ## R and public names TO ## suffix
    ## R for each suffix of a supported _FloatN / _FloatNx
    floating-point type with the same format as long double.  */
-#define libm_alias_ldouble_other_r(from, to, r)
+#if __HAVE_FLOAT128 && !__HAVE_DISTINCT_FLOAT128
+# define libm_alias_ldouble_other_r(from, to, r) \
+  weak_alias (from ## l ## r, to ## f128 ## r)
+#else
+# define libm_alias_ldouble_other_r(from, to, r)
+#endif
 
 /* Likewise, but without the R suffix.  */
 #define libm_alias_ldouble_other(from, to) \
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index e7438c5..ed598ae 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2106,3 +2106,8 @@ GLIBC_2.26 reallocarray F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 glob F
 GLIBC_2.27 glob64 F
+GLIBC_2.27 strfromf128 F
+GLIBC_2.27 strtof128 F
+GLIBC_2.27 strtof128_l F
+GLIBC_2.27 wcstof128 F
+GLIBC_2.27 wcstof128_l F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index 3f0190a..b21d136 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -461,8 +461,112 @@ GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 acosf128 F
+GLIBC_2.27 acoshf128 F
+GLIBC_2.27 asinf128 F
+GLIBC_2.27 asinhf128 F
+GLIBC_2.27 atan2f128 F
+GLIBC_2.27 atanf128 F
+GLIBC_2.27 atanhf128 F
+GLIBC_2.27 cabsf128 F
+GLIBC_2.27 cacosf128 F
+GLIBC_2.27 cacoshf128 F
+GLIBC_2.27 canonicalizef128 F
+GLIBC_2.27 cargf128 F
+GLIBC_2.27 casinf128 F
+GLIBC_2.27 casinhf128 F
+GLIBC_2.27 catanf128 F
+GLIBC_2.27 catanhf128 F
+GLIBC_2.27 cbrtf128 F
+GLIBC_2.27 ccosf128 F
+GLIBC_2.27 ccoshf128 F
+GLIBC_2.27 ceilf128 F
+GLIBC_2.27 cexpf128 F
+GLIBC_2.27 cimagf128 F
+GLIBC_2.27 clog10f128 F
+GLIBC_2.27 clogf128 F
+GLIBC_2.27 conjf128 F
+GLIBC_2.27 copysignf128 F
+GLIBC_2.27 cosf128 F
+GLIBC_2.27 coshf128 F
+GLIBC_2.27 cpowf128 F
+GLIBC_2.27 cprojf128 F
+GLIBC_2.27 crealf128 F
+GLIBC_2.27 csinf128 F
+GLIBC_2.27 csinhf128 F
+GLIBC_2.27 csqrtf128 F
+GLIBC_2.27 ctanf128 F
+GLIBC_2.27 ctanhf128 F
+GLIBC_2.27 erfcf128 F
+GLIBC_2.27 erff128 F
+GLIBC_2.27 exp10f128 F
 GLIBC_2.27 exp2f F
+GLIBC_2.27 exp2f128 F
 GLIBC_2.27 expf F
+GLIBC_2.27 expf128 F
+GLIBC_2.27 expm1f128 F
+GLIBC_2.27 fabsf128 F
+GLIBC_2.27 fdimf128 F
+GLIBC_2.27 floorf128 F
+GLIBC_2.27 fmaf128 F
+GLIBC_2.27 fmaxf128 F
+GLIBC_2.27 fmaxmagf128 F
+GLIBC_2.27 fminf128 F
+GLIBC_2.27 fminmagf128 F
+GLIBC_2.27 fmodf128 F
+GLIBC_2.27 frexpf128 F
+GLIBC_2.27 fromfpf128 F
+GLIBC_2.27 fromfpxf128 F
+GLIBC_2.27 getpayloadf128 F
+GLIBC_2.27 hypotf128 F
+GLIBC_2.27 ilogbf128 F
+GLIBC_2.27 j0f128 F
+GLIBC_2.27 j1f128 F
+GLIBC_2.27 jnf128 F
+GLIBC_2.27 ldexpf128 F
+GLIBC_2.27 lgammaf128 F
+GLIBC_2.27 lgammaf128_r F
+GLIBC_2.27 llogbf128 F
+GLIBC_2.27 llrintf128 F
+GLIBC_2.27 llroundf128 F
+GLIBC_2.27 log10f128 F
+GLIBC_2.27 log1pf128 F
 GLIBC_2.27 log2f F
+GLIBC_2.27 log2f128 F
+GLIBC_2.27 logbf128 F
 GLIBC_2.27 logf F
+GLIBC_2.27 logf128 F
+GLIBC_2.27 lrintf128 F
+GLIBC_2.27 lroundf128 F
+GLIBC_2.27 modff128 F
+GLIBC_2.27 nanf128 F
+GLIBC_2.27 nearbyintf128 F
+GLIBC_2.27 nextafterf128 F
+GLIBC_2.27 nextdownf128 F
+GLIBC_2.27 nextupf128 F
 GLIBC_2.27 powf F
+GLIBC_2.27 powf128 F
+GLIBC_2.27 remainderf128 F
+GLIBC_2.27 remquof128 F
+GLIBC_2.27 rintf128 F
+GLIBC_2.27 roundevenf128 F
+GLIBC_2.27 roundf128 F
+GLIBC_2.27 scalblnf128 F
+GLIBC_2.27 scalbnf128 F
+GLIBC_2.27 setpayloadf128 F
+GLIBC_2.27 setpayloadsigf128 F
+GLIBC_2.27 sincosf128 F
+GLIBC_2.27 sinf128 F
+GLIBC_2.27 sinhf128 F
+GLIBC_2.27 sqrtf128 F
+GLIBC_2.27 tanf128 F
+GLIBC_2.27 tanhf128 F
+GLIBC_2.27 tgammaf128 F
+GLIBC_2.27 totalorderf128 F
+GLIBC_2.27 totalordermagf128 F
+GLIBC_2.27 truncf128 F
+GLIBC_2.27 ufromfpf128 F
+GLIBC_2.27 ufromfpxf128 F
+GLIBC_2.27 y0f128 F
+GLIBC_2.27 y1f128 F
+GLIBC_2.27 ynf128 F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 4836ea0..4e57f36 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2017,6 +2017,11 @@ GLIBC_2.26 reallocarray F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 glob F
 GLIBC_2.27 glob64 F
+GLIBC_2.27 strfromf128 F
+GLIBC_2.27 strtof128 F
+GLIBC_2.27 strtof128_l F
+GLIBC_2.27 wcstof128 F
+GLIBC_2.27 wcstof128_l F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index 78edc5e..3ba02a1 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -471,11 +471,115 @@ GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 acosf128 F
+GLIBC_2.27 acoshf128 F
+GLIBC_2.27 asinf128 F
+GLIBC_2.27 asinhf128 F
+GLIBC_2.27 atan2f128 F
+GLIBC_2.27 atanf128 F
+GLIBC_2.27 atanhf128 F
+GLIBC_2.27 cabsf128 F
+GLIBC_2.27 cacosf128 F
+GLIBC_2.27 cacoshf128 F
+GLIBC_2.27 canonicalizef128 F
+GLIBC_2.27 cargf128 F
+GLIBC_2.27 casinf128 F
+GLIBC_2.27 casinhf128 F
+GLIBC_2.27 catanf128 F
+GLIBC_2.27 catanhf128 F
+GLIBC_2.27 cbrtf128 F
+GLIBC_2.27 ccosf128 F
+GLIBC_2.27 ccoshf128 F
+GLIBC_2.27 ceilf128 F
+GLIBC_2.27 cexpf128 F
+GLIBC_2.27 cimagf128 F
+GLIBC_2.27 clog10f128 F
+GLIBC_2.27 clogf128 F
+GLIBC_2.27 conjf128 F
+GLIBC_2.27 copysignf128 F
+GLIBC_2.27 cosf128 F
+GLIBC_2.27 coshf128 F
+GLIBC_2.27 cpowf128 F
+GLIBC_2.27 cprojf128 F
+GLIBC_2.27 crealf128 F
+GLIBC_2.27 csinf128 F
+GLIBC_2.27 csinhf128 F
+GLIBC_2.27 csqrtf128 F
+GLIBC_2.27 ctanf128 F
+GLIBC_2.27 ctanhf128 F
+GLIBC_2.27 erfcf128 F
+GLIBC_2.27 erff128 F
+GLIBC_2.27 exp10f128 F
 GLIBC_2.27 exp2f F
+GLIBC_2.27 exp2f128 F
 GLIBC_2.27 expf F
+GLIBC_2.27 expf128 F
+GLIBC_2.27 expm1f128 F
+GLIBC_2.27 fabsf128 F
+GLIBC_2.27 fdimf128 F
+GLIBC_2.27 floorf128 F
+GLIBC_2.27 fmaf128 F
+GLIBC_2.27 fmaxf128 F
+GLIBC_2.27 fmaxmagf128 F
+GLIBC_2.27 fminf128 F
+GLIBC_2.27 fminmagf128 F
+GLIBC_2.27 fmodf128 F
+GLIBC_2.27 frexpf128 F
+GLIBC_2.27 fromfpf128 F
+GLIBC_2.27 fromfpxf128 F
+GLIBC_2.27 getpayloadf128 F
+GLIBC_2.27 hypotf128 F
+GLIBC_2.27 ilogbf128 F
+GLIBC_2.27 j0f128 F
+GLIBC_2.27 j1f128 F
+GLIBC_2.27 jnf128 F
+GLIBC_2.27 ldexpf128 F
+GLIBC_2.27 lgammaf128 F
+GLIBC_2.27 lgammaf128_r F
+GLIBC_2.27 llogbf128 F
+GLIBC_2.27 llrintf128 F
+GLIBC_2.27 llroundf128 F
+GLIBC_2.27 log10f128 F
+GLIBC_2.27 log1pf128 F
 GLIBC_2.27 log2f F
+GLIBC_2.27 log2f128 F
+GLIBC_2.27 logbf128 F
 GLIBC_2.27 logf F
+GLIBC_2.27 logf128 F
+GLIBC_2.27 lrintf128 F
+GLIBC_2.27 lroundf128 F
+GLIBC_2.27 modff128 F
+GLIBC_2.27 nanf128 F
+GLIBC_2.27 nearbyintf128 F
+GLIBC_2.27 nextafterf128 F
+GLIBC_2.27 nextdownf128 F
+GLIBC_2.27 nextupf128 F
 GLIBC_2.27 powf F
+GLIBC_2.27 powf128 F
+GLIBC_2.27 remainderf128 F
+GLIBC_2.27 remquof128 F
+GLIBC_2.27 rintf128 F
+GLIBC_2.27 roundevenf128 F
+GLIBC_2.27 roundf128 F
+GLIBC_2.27 scalblnf128 F
+GLIBC_2.27 scalbnf128 F
+GLIBC_2.27 setpayloadf128 F
+GLIBC_2.27 setpayloadsigf128 F
+GLIBC_2.27 sincosf128 F
+GLIBC_2.27 sinf128 F
+GLIBC_2.27 sinhf128 F
+GLIBC_2.27 sqrtf128 F
+GLIBC_2.27 tanf128 F
+GLIBC_2.27 tanhf128 F
+GLIBC_2.27 tgammaf128 F
+GLIBC_2.27 totalorderf128 F
+GLIBC_2.27 totalordermagf128 F
+GLIBC_2.27 truncf128 F
+GLIBC_2.27 ufromfpf128 F
+GLIBC_2.27 ufromfpxf128 F
+GLIBC_2.27 y0f128 F
+GLIBC_2.27 y1f128 F
+GLIBC_2.27 ynf128 F
 GLIBC_2.3.4 GLIBC_2.3.4 A
 GLIBC_2.3.4 __c1_cabsf F
 GLIBC_2.3.4 __c1_cacosf F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
index f33ba05..92a46b6 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -463,9 +463,113 @@ GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 acosf128 F
+GLIBC_2.27 acoshf128 F
+GLIBC_2.27 asinf128 F
+GLIBC_2.27 asinhf128 F
+GLIBC_2.27 atan2f128 F
+GLIBC_2.27 atanf128 F
+GLIBC_2.27 atanhf128 F
+GLIBC_2.27 cabsf128 F
+GLIBC_2.27 cacosf128 F
+GLIBC_2.27 cacoshf128 F
+GLIBC_2.27 canonicalizef128 F
+GLIBC_2.27 cargf128 F
+GLIBC_2.27 casinf128 F
+GLIBC_2.27 casinhf128 F
+GLIBC_2.27 catanf128 F
+GLIBC_2.27 catanhf128 F
+GLIBC_2.27 cbrtf128 F
+GLIBC_2.27 ccosf128 F
+GLIBC_2.27 ccoshf128 F
+GLIBC_2.27 ceilf128 F
+GLIBC_2.27 cexpf128 F
+GLIBC_2.27 cimagf128 F
+GLIBC_2.27 clog10f128 F
+GLIBC_2.27 clogf128 F
+GLIBC_2.27 conjf128 F
+GLIBC_2.27 copysignf128 F
+GLIBC_2.27 cosf128 F
+GLIBC_2.27 coshf128 F
+GLIBC_2.27 cpowf128 F
+GLIBC_2.27 cprojf128 F
+GLIBC_2.27 crealf128 F
+GLIBC_2.27 csinf128 F
+GLIBC_2.27 csinhf128 F
+GLIBC_2.27 csqrtf128 F
+GLIBC_2.27 ctanf128 F
+GLIBC_2.27 ctanhf128 F
+GLIBC_2.27 erfcf128 F
+GLIBC_2.27 erff128 F
+GLIBC_2.27 exp10f128 F
 GLIBC_2.27 exp2f F
+GLIBC_2.27 exp2f128 F
 GLIBC_2.27 expf F
+GLIBC_2.27 expf128 F
+GLIBC_2.27 expm1f128 F
+GLIBC_2.27 fabsf128 F
+GLIBC_2.27 fdimf128 F
+GLIBC_2.27 floorf128 F
+GLIBC_2.27 fmaf128 F
+GLIBC_2.27 fmaxf128 F
+GLIBC_2.27 fmaxmagf128 F
+GLIBC_2.27 fminf128 F
+GLIBC_2.27 fminmagf128 F
+GLIBC_2.27 fmodf128 F
+GLIBC_2.27 frexpf128 F
+GLIBC_2.27 fromfpf128 F
+GLIBC_2.27 fromfpxf128 F
+GLIBC_2.27 getpayloadf128 F
+GLIBC_2.27 hypotf128 F
+GLIBC_2.27 ilogbf128 F
+GLIBC_2.27 j0f128 F
+GLIBC_2.27 j1f128 F
+GLIBC_2.27 jnf128 F
+GLIBC_2.27 ldexpf128 F
+GLIBC_2.27 lgammaf128 F
+GLIBC_2.27 lgammaf128_r F
+GLIBC_2.27 llogbf128 F
+GLIBC_2.27 llrintf128 F
+GLIBC_2.27 llroundf128 F
+GLIBC_2.27 log10f128 F
+GLIBC_2.27 log1pf128 F
 GLIBC_2.27 log2f F
+GLIBC_2.27 log2f128 F
+GLIBC_2.27 logbf128 F
 GLIBC_2.27 logf F
+GLIBC_2.27 logf128 F
+GLIBC_2.27 lrintf128 F
+GLIBC_2.27 lroundf128 F
+GLIBC_2.27 modff128 F
+GLIBC_2.27 nanf128 F
+GLIBC_2.27 nearbyintf128 F
+GLIBC_2.27 nextafterf128 F
+GLIBC_2.27 nextdownf128 F
+GLIBC_2.27 nextupf128 F
 GLIBC_2.27 powf F
+GLIBC_2.27 powf128 F
+GLIBC_2.27 remainderf128 F
+GLIBC_2.27 remquof128 F
+GLIBC_2.27 rintf128 F
+GLIBC_2.27 roundevenf128 F
+GLIBC_2.27 roundf128 F
+GLIBC_2.27 scalblnf128 F
+GLIBC_2.27 scalbnf128 F
+GLIBC_2.27 setpayloadf128 F
+GLIBC_2.27 setpayloadsigf128 F
+GLIBC_2.27 sincosf128 F
+GLIBC_2.27 sinf128 F
+GLIBC_2.27 sinhf128 F
+GLIBC_2.27 sqrtf128 F
+GLIBC_2.27 tanf128 F
+GLIBC_2.27 tanhf128 F
+GLIBC_2.27 tgammaf128 F
+GLIBC_2.27 totalorderf128 F
+GLIBC_2.27 totalordermagf128 F
+GLIBC_2.27 truncf128 F
+GLIBC_2.27 ufromfpf128 F
+GLIBC_2.27 ufromfpxf128 F
+GLIBC_2.27 y0f128 F
+GLIBC_2.27 y1f128 F
+GLIBC_2.27 ynf128 F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index e119842..ade654d 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -1956,6 +1956,11 @@ GLIBC_2.26 reallocarray F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 glob F
 GLIBC_2.27 glob64 F
+GLIBC_2.27 strfromf128 F
+GLIBC_2.27 strtof128 F
+GLIBC_2.27 strtof128_l F
+GLIBC_2.27 wcstof128 F
+GLIBC_2.27 wcstof128_l F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 67f10f5..56032c3 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -1951,6 +1951,11 @@ GLIBC_2.26 reallocarray F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 glob F
 GLIBC_2.27 glob64 F
+GLIBC_2.27 strfromf128 F
+GLIBC_2.27 strtof128 F
+GLIBC_2.27 strtof128_l F
+GLIBC_2.27 wcstof128 F
+GLIBC_2.27 wcstof128_l F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 271eccc..dbd411c 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -1989,6 +1989,11 @@ GLIBC_2.26 reallocarray F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 glob F
 GLIBC_2.27 glob64 F
+GLIBC_2.27 strfromf128 F
+GLIBC_2.27 strtof128 F
+GLIBC_2.27 strtof128_l F
+GLIBC_2.27 wcstof128 F
+GLIBC_2.27 wcstof128_l F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index 2b758e8..f3c4f77 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -461,11 +461,115 @@ GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 acosf128 F
+GLIBC_2.27 acoshf128 F
+GLIBC_2.27 asinf128 F
+GLIBC_2.27 asinhf128 F
+GLIBC_2.27 atan2f128 F
+GLIBC_2.27 atanf128 F
+GLIBC_2.27 atanhf128 F
+GLIBC_2.27 cabsf128 F
+GLIBC_2.27 cacosf128 F
+GLIBC_2.27 cacoshf128 F
+GLIBC_2.27 canonicalizef128 F
+GLIBC_2.27 cargf128 F
+GLIBC_2.27 casinf128 F
+GLIBC_2.27 casinhf128 F
+GLIBC_2.27 catanf128 F
+GLIBC_2.27 catanhf128 F
+GLIBC_2.27 cbrtf128 F
+GLIBC_2.27 ccosf128 F
+GLIBC_2.27 ccoshf128 F
+GLIBC_2.27 ceilf128 F
+GLIBC_2.27 cexpf128 F
+GLIBC_2.27 cimagf128 F
+GLIBC_2.27 clog10f128 F
+GLIBC_2.27 clogf128 F
+GLIBC_2.27 conjf128 F
+GLIBC_2.27 copysignf128 F
+GLIBC_2.27 cosf128 F
+GLIBC_2.27 coshf128 F
+GLIBC_2.27 cpowf128 F
+GLIBC_2.27 cprojf128 F
+GLIBC_2.27 crealf128 F
+GLIBC_2.27 csinf128 F
+GLIBC_2.27 csinhf128 F
+GLIBC_2.27 csqrtf128 F
+GLIBC_2.27 ctanf128 F
+GLIBC_2.27 ctanhf128 F
+GLIBC_2.27 erfcf128 F
+GLIBC_2.27 erff128 F
+GLIBC_2.27 exp10f128 F
 GLIBC_2.27 exp2f F
+GLIBC_2.27 exp2f128 F
 GLIBC_2.27 expf F
+GLIBC_2.27 expf128 F
+GLIBC_2.27 expm1f128 F
+GLIBC_2.27 fabsf128 F
+GLIBC_2.27 fdimf128 F
+GLIBC_2.27 floorf128 F
+GLIBC_2.27 fmaf128 F
+GLIBC_2.27 fmaxf128 F
+GLIBC_2.27 fmaxmagf128 F
+GLIBC_2.27 fminf128 F
+GLIBC_2.27 fminmagf128 F
+GLIBC_2.27 fmodf128 F
+GLIBC_2.27 frexpf128 F
+GLIBC_2.27 fromfpf128 F
+GLIBC_2.27 fromfpxf128 F
+GLIBC_2.27 getpayloadf128 F
+GLIBC_2.27 hypotf128 F
+GLIBC_2.27 ilogbf128 F
+GLIBC_2.27 j0f128 F
+GLIBC_2.27 j1f128 F
+GLIBC_2.27 jnf128 F
+GLIBC_2.27 ldexpf128 F
+GLIBC_2.27 lgammaf128 F
+GLIBC_2.27 lgammaf128_r F
+GLIBC_2.27 llogbf128 F
+GLIBC_2.27 llrintf128 F
+GLIBC_2.27 llroundf128 F
+GLIBC_2.27 log10f128 F
+GLIBC_2.27 log1pf128 F
 GLIBC_2.27 log2f F
+GLIBC_2.27 log2f128 F
+GLIBC_2.27 logbf128 F
 GLIBC_2.27 logf F
+GLIBC_2.27 logf128 F
+GLIBC_2.27 lrintf128 F
+GLIBC_2.27 lroundf128 F
+GLIBC_2.27 modff128 F
+GLIBC_2.27 nanf128 F
+GLIBC_2.27 nearbyintf128 F
+GLIBC_2.27 nextafterf128 F
+GLIBC_2.27 nextdownf128 F
+GLIBC_2.27 nextupf128 F
 GLIBC_2.27 powf F
+GLIBC_2.27 powf128 F
+GLIBC_2.27 remainderf128 F
+GLIBC_2.27 remquof128 F
+GLIBC_2.27 rintf128 F
+GLIBC_2.27 roundevenf128 F
+GLIBC_2.27 roundf128 F
+GLIBC_2.27 scalblnf128 F
+GLIBC_2.27 scalbnf128 F
+GLIBC_2.27 setpayloadf128 F
+GLIBC_2.27 setpayloadsigf128 F
+GLIBC_2.27 sincosf128 F
+GLIBC_2.27 sinf128 F
+GLIBC_2.27 sinhf128 F
+GLIBC_2.27 sqrtf128 F
+GLIBC_2.27 tanf128 F
+GLIBC_2.27 tanhf128 F
+GLIBC_2.27 tgammaf128 F
+GLIBC_2.27 totalorderf128 F
+GLIBC_2.27 totalordermagf128 F
+GLIBC_2.27 truncf128 F
+GLIBC_2.27 ufromfpf128 F
+GLIBC_2.27 ufromfpxf128 F
+GLIBC_2.27 y0f128 F
+GLIBC_2.27 y1f128 F
+GLIBC_2.27 ynf128 F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 8b96e16..5617784 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -1890,6 +1890,11 @@ GLIBC_2.26 reallocarray F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 glob F
 GLIBC_2.27 glob64 F
+GLIBC_2.27 strfromf128 F
+GLIBC_2.27 strtof128 F
+GLIBC_2.27 strtof128_l F
+GLIBC_2.27 wcstof128 F
+GLIBC_2.27 wcstof128_l F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
index 62c9bb5..eb113fd 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -459,11 +459,115 @@ GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 acosf128 F
+GLIBC_2.27 acoshf128 F
+GLIBC_2.27 asinf128 F
+GLIBC_2.27 asinhf128 F
+GLIBC_2.27 atan2f128 F
+GLIBC_2.27 atanf128 F
+GLIBC_2.27 atanhf128 F
+GLIBC_2.27 cabsf128 F
+GLIBC_2.27 cacosf128 F
+GLIBC_2.27 cacoshf128 F
+GLIBC_2.27 canonicalizef128 F
+GLIBC_2.27 cargf128 F
+GLIBC_2.27 casinf128 F
+GLIBC_2.27 casinhf128 F
+GLIBC_2.27 catanf128 F
+GLIBC_2.27 catanhf128 F
+GLIBC_2.27 cbrtf128 F
+GLIBC_2.27 ccosf128 F
+GLIBC_2.27 ccoshf128 F
+GLIBC_2.27 ceilf128 F
+GLIBC_2.27 cexpf128 F
+GLIBC_2.27 cimagf128 F
+GLIBC_2.27 clog10f128 F
+GLIBC_2.27 clogf128 F
+GLIBC_2.27 conjf128 F
+GLIBC_2.27 copysignf128 F
+GLIBC_2.27 cosf128 F
+GLIBC_2.27 coshf128 F
+GLIBC_2.27 cpowf128 F
+GLIBC_2.27 cprojf128 F
+GLIBC_2.27 crealf128 F
+GLIBC_2.27 csinf128 F
+GLIBC_2.27 csinhf128 F
+GLIBC_2.27 csqrtf128 F
+GLIBC_2.27 ctanf128 F
+GLIBC_2.27 ctanhf128 F
+GLIBC_2.27 erfcf128 F
+GLIBC_2.27 erff128 F
+GLIBC_2.27 exp10f128 F
 GLIBC_2.27 exp2f F
+GLIBC_2.27 exp2f128 F
 GLIBC_2.27 expf F
+GLIBC_2.27 expf128 F
+GLIBC_2.27 expm1f128 F
+GLIBC_2.27 fabsf128 F
+GLIBC_2.27 fdimf128 F
+GLIBC_2.27 floorf128 F
+GLIBC_2.27 fmaf128 F
+GLIBC_2.27 fmaxf128 F
+GLIBC_2.27 fmaxmagf128 F
+GLIBC_2.27 fminf128 F
+GLIBC_2.27 fminmagf128 F
+GLIBC_2.27 fmodf128 F
+GLIBC_2.27 frexpf128 F
+GLIBC_2.27 fromfpf128 F
+GLIBC_2.27 fromfpxf128 F
+GLIBC_2.27 getpayloadf128 F
+GLIBC_2.27 hypotf128 F
+GLIBC_2.27 ilogbf128 F
+GLIBC_2.27 j0f128 F
+GLIBC_2.27 j1f128 F
+GLIBC_2.27 jnf128 F
+GLIBC_2.27 ldexpf128 F
+GLIBC_2.27 lgammaf128 F
+GLIBC_2.27 lgammaf128_r F
+GLIBC_2.27 llogbf128 F
+GLIBC_2.27 llrintf128 F
+GLIBC_2.27 llroundf128 F
+GLIBC_2.27 log10f128 F
+GLIBC_2.27 log1pf128 F
 GLIBC_2.27 log2f F
+GLIBC_2.27 log2f128 F
+GLIBC_2.27 logbf128 F
 GLIBC_2.27 logf F
+GLIBC_2.27 logf128 F
+GLIBC_2.27 lrintf128 F
+GLIBC_2.27 lroundf128 F
+GLIBC_2.27 modff128 F
+GLIBC_2.27 nanf128 F
+GLIBC_2.27 nearbyintf128 F
+GLIBC_2.27 nextafterf128 F
+GLIBC_2.27 nextdownf128 F
+GLIBC_2.27 nextupf128 F
 GLIBC_2.27 powf F
+GLIBC_2.27 powf128 F
+GLIBC_2.27 remainderf128 F
+GLIBC_2.27 remquof128 F
+GLIBC_2.27 rintf128 F
+GLIBC_2.27 roundevenf128 F
+GLIBC_2.27 roundf128 F
+GLIBC_2.27 scalblnf128 F
+GLIBC_2.27 scalbnf128 F
+GLIBC_2.27 setpayloadf128 F
+GLIBC_2.27 setpayloadsigf128 F
+GLIBC_2.27 sincosf128 F
+GLIBC_2.27 sinf128 F
+GLIBC_2.27 sinhf128 F
+GLIBC_2.27 sqrtf128 F
+GLIBC_2.27 tanf128 F
+GLIBC_2.27 tanhf128 F
+GLIBC_2.27 tgammaf128 F
+GLIBC_2.27 totalorderf128 F
+GLIBC_2.27 totalordermagf128 F
+GLIBC_2.27 truncf128 F
+GLIBC_2.27 ufromfpf128 F
+GLIBC_2.27 ufromfpxf128 F
+GLIBC_2.27 y0f128 F
+GLIBC_2.27 y1f128 F
+GLIBC_2.27 ynf128 F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index a62463b..bb7e104 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -1982,6 +1982,11 @@ GLIBC_2.26 reallocarray F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 glob F
 GLIBC_2.27 glob64 F
+GLIBC_2.27 strfromf128 F
+GLIBC_2.27 strtof128 F
+GLIBC_2.27 strtof128_l F
+GLIBC_2.27 wcstof128 F
+GLIBC_2.27 wcstof128_l F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
index 92de6ed..152a83a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -468,11 +468,115 @@ GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 acosf128 F
+GLIBC_2.27 acoshf128 F
+GLIBC_2.27 asinf128 F
+GLIBC_2.27 asinhf128 F
+GLIBC_2.27 atan2f128 F
+GLIBC_2.27 atanf128 F
+GLIBC_2.27 atanhf128 F
+GLIBC_2.27 cabsf128 F
+GLIBC_2.27 cacosf128 F
+GLIBC_2.27 cacoshf128 F
+GLIBC_2.27 canonicalizef128 F
+GLIBC_2.27 cargf128 F
+GLIBC_2.27 casinf128 F
+GLIBC_2.27 casinhf128 F
+GLIBC_2.27 catanf128 F
+GLIBC_2.27 catanhf128 F
+GLIBC_2.27 cbrtf128 F
+GLIBC_2.27 ccosf128 F
+GLIBC_2.27 ccoshf128 F
+GLIBC_2.27 ceilf128 F
+GLIBC_2.27 cexpf128 F
+GLIBC_2.27 cimagf128 F
+GLIBC_2.27 clog10f128 F
+GLIBC_2.27 clogf128 F
+GLIBC_2.27 conjf128 F
+GLIBC_2.27 copysignf128 F
+GLIBC_2.27 cosf128 F
+GLIBC_2.27 coshf128 F
+GLIBC_2.27 cpowf128 F
+GLIBC_2.27 cprojf128 F
+GLIBC_2.27 crealf128 F
+GLIBC_2.27 csinf128 F
+GLIBC_2.27 csinhf128 F
+GLIBC_2.27 csqrtf128 F
+GLIBC_2.27 ctanf128 F
+GLIBC_2.27 ctanhf128 F
+GLIBC_2.27 erfcf128 F
+GLIBC_2.27 erff128 F
+GLIBC_2.27 exp10f128 F
 GLIBC_2.27 exp2f F
+GLIBC_2.27 exp2f128 F
 GLIBC_2.27 expf F
+GLIBC_2.27 expf128 F
+GLIBC_2.27 expm1f128 F
+GLIBC_2.27 fabsf128 F
+GLIBC_2.27 fdimf128 F
+GLIBC_2.27 floorf128 F
+GLIBC_2.27 fmaf128 F
+GLIBC_2.27 fmaxf128 F
+GLIBC_2.27 fmaxmagf128 F
+GLIBC_2.27 fminf128 F
+GLIBC_2.27 fminmagf128 F
+GLIBC_2.27 fmodf128 F
+GLIBC_2.27 frexpf128 F
+GLIBC_2.27 fromfpf128 F
+GLIBC_2.27 fromfpxf128 F
+GLIBC_2.27 getpayloadf128 F
+GLIBC_2.27 hypotf128 F
+GLIBC_2.27 ilogbf128 F
+GLIBC_2.27 j0f128 F
+GLIBC_2.27 j1f128 F
+GLIBC_2.27 jnf128 F
+GLIBC_2.27 ldexpf128 F
+GLIBC_2.27 lgammaf128 F
+GLIBC_2.27 lgammaf128_r F
+GLIBC_2.27 llogbf128 F
+GLIBC_2.27 llrintf128 F
+GLIBC_2.27 llroundf128 F
+GLIBC_2.27 log10f128 F
+GLIBC_2.27 log1pf128 F
 GLIBC_2.27 log2f F
+GLIBC_2.27 log2f128 F
+GLIBC_2.27 logbf128 F
 GLIBC_2.27 logf F
+GLIBC_2.27 logf128 F
+GLIBC_2.27 lrintf128 F
+GLIBC_2.27 lroundf128 F
+GLIBC_2.27 modff128 F
+GLIBC_2.27 nanf128 F
+GLIBC_2.27 nearbyintf128 F
+GLIBC_2.27 nextafterf128 F
+GLIBC_2.27 nextdownf128 F
+GLIBC_2.27 nextupf128 F
 GLIBC_2.27 powf F
+GLIBC_2.27 powf128 F
+GLIBC_2.27 remainderf128 F
+GLIBC_2.27 remquof128 F
+GLIBC_2.27 rintf128 F
+GLIBC_2.27 roundevenf128 F
+GLIBC_2.27 roundf128 F
+GLIBC_2.27 scalblnf128 F
+GLIBC_2.27 scalbnf128 F
+GLIBC_2.27 setpayloadf128 F
+GLIBC_2.27 setpayloadsigf128 F
+GLIBC_2.27 sincosf128 F
+GLIBC_2.27 sinf128 F
+GLIBC_2.27 sinhf128 F
+GLIBC_2.27 sqrtf128 F
+GLIBC_2.27 tanf128 F
+GLIBC_2.27 tanhf128 F
+GLIBC_2.27 tgammaf128 F
+GLIBC_2.27 totalorderf128 F
+GLIBC_2.27 totalordermagf128 F
+GLIBC_2.27 truncf128 F
+GLIBC_2.27 ufromfpf128 F
+GLIBC_2.27 ufromfpxf128 F
+GLIBC_2.27 y0f128 F
+GLIBC_2.27 y1f128 F
+GLIBC_2.27 ynf128 F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index a50485e..4053b0a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -1919,6 +1919,11 @@ GLIBC_2.26 reallocarray F
 GLIBC_2.27 GLIBC_2.27 A
 GLIBC_2.27 glob F
 GLIBC_2.27 glob64 F
+GLIBC_2.27 strfromf128 F
+GLIBC_2.27 strtof128 F
+GLIBC_2.27 strtof128_l F
+GLIBC_2.27 wcstof128 F
+GLIBC_2.27 wcstof128_l F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
index b5412c9..ff6962d 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -462,9 +462,113 @@ GLIBC_2.25 ufromfpx F
 GLIBC_2.25 ufromfpxf F
 GLIBC_2.25 ufromfpxl F
 GLIBC_2.27 GLIBC_2.27 A
+GLIBC_2.27 acosf128 F
+GLIBC_2.27 acoshf128 F
+GLIBC_2.27 asinf128 F
+GLIBC_2.27 asinhf128 F
+GLIBC_2.27 atan2f128 F
+GLIBC_2.27 atanf128 F
+GLIBC_2.27 atanhf128 F
+GLIBC_2.27 cabsf128 F
+GLIBC_2.27 cacosf128 F
+GLIBC_2.27 cacoshf128 F
+GLIBC_2.27 canonicalizef128 F
+GLIBC_2.27 cargf128 F
+GLIBC_2.27 casinf128 F
+GLIBC_2.27 casinhf128 F
+GLIBC_2.27 catanf128 F
+GLIBC_2.27 catanhf128 F
+GLIBC_2.27 cbrtf128 F
+GLIBC_2.27 ccosf128 F
+GLIBC_2.27 ccoshf128 F
+GLIBC_2.27 ceilf128 F
+GLIBC_2.27 cexpf128 F
+GLIBC_2.27 cimagf128 F
+GLIBC_2.27 clog10f128 F
+GLIBC_2.27 clogf128 F
+GLIBC_2.27 conjf128 F
+GLIBC_2.27 copysignf128 F
+GLIBC_2.27 cosf128 F
+GLIBC_2.27 coshf128 F
+GLIBC_2.27 cpowf128 F
+GLIBC_2.27 cprojf128 F
+GLIBC_2.27 crealf128 F
+GLIBC_2.27 csinf128 F
+GLIBC_2.27 csinhf128 F
+GLIBC_2.27 csqrtf128 F
+GLIBC_2.27 ctanf128 F
+GLIBC_2.27 ctanhf128 F
+GLIBC_2.27 erfcf128 F
+GLIBC_2.27 erff128 F
+GLIBC_2.27 exp10f128 F
 GLIBC_2.27 exp2f F
+GLIBC_2.27 exp2f128 F
 GLIBC_2.27 expf F
+GLIBC_2.27 expf128 F
+GLIBC_2.27 expm1f128 F
+GLIBC_2.27 fabsf128 F
+GLIBC_2.27 fdimf128 F
+GLIBC_2.27 floorf128 F
+GLIBC_2.27 fmaf128 F
+GLIBC_2.27 fmaxf128 F
+GLIBC_2.27 fmaxmagf128 F
+GLIBC_2.27 fminf128 F
+GLIBC_2.27 fminmagf128 F
+GLIBC_2.27 fmodf128 F
+GLIBC_2.27 frexpf128 F
+GLIBC_2.27 fromfpf128 F
+GLIBC_2.27 fromfpxf128 F
+GLIBC_2.27 getpayloadf128 F
+GLIBC_2.27 hypotf128 F
+GLIBC_2.27 ilogbf128 F
+GLIBC_2.27 j0f128 F
+GLIBC_2.27 j1f128 F
+GLIBC_2.27 jnf128 F
+GLIBC_2.27 ldexpf128 F
+GLIBC_2.27 lgammaf128 F
+GLIBC_2.27 lgammaf128_r F
+GLIBC_2.27 llogbf128 F
+GLIBC_2.27 llrintf128 F
+GLIBC_2.27 llroundf128 F
+GLIBC_2.27 log10f128 F
+GLIBC_2.27 log1pf128 F
 GLIBC_2.27 log2f F
+GLIBC_2.27 log2f128 F
+GLIBC_2.27 logbf128 F
 GLIBC_2.27 logf F
+GLIBC_2.27 logf128 F
+GLIBC_2.27 lrintf128 F
+GLIBC_2.27 lroundf128 F
+GLIBC_2.27 modff128 F
+GLIBC_2.27 nanf128 F
+GLIBC_2.27 nearbyintf128 F
+GLIBC_2.27 nextafterf128 F
+GLIBC_2.27 nextdownf128 F
+GLIBC_2.27 nextupf128 F
 GLIBC_2.27 powf F
+GLIBC_2.27 powf128 F
+GLIBC_2.27 remainderf128 F
+GLIBC_2.27 remquof128 F
+GLIBC_2.27 rintf128 F
+GLIBC_2.27 roundevenf128 F
+GLIBC_2.27 roundf128 F
+GLIBC_2.27 scalblnf128 F
+GLIBC_2.27 scalbnf128 F
+GLIBC_2.27 setpayloadf128 F
+GLIBC_2.27 setpayloadsigf128 F
+GLIBC_2.27 sincosf128 F
+GLIBC_2.27 sinf128 F
+GLIBC_2.27 sinhf128 F
+GLIBC_2.27 sqrtf128 F
+GLIBC_2.27 tanf128 F
+GLIBC_2.27 tanhf128 F
+GLIBC_2.27 tgammaf128 F
+GLIBC_2.27 totalorderf128 F
+GLIBC_2.27 totalordermagf128 F
+GLIBC_2.27 truncf128 F
+GLIBC_2.27 ufromfpf128 F
+GLIBC_2.27 ufromfpxf128 F
+GLIBC_2.27 y0f128 F
+GLIBC_2.27 y1f128 F
+GLIBC_2.27 ynf128 F
 GLIBC_2.4 GLIBC_2.4 A

--
Joseph S. Myers
[hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: Add _Float128 function aliases [committed]

Szabolcs Nagy-2
On 18/10/17 18:38, Joseph Myers wrote:

> This patch adds support for *f128 function aliases on platforms where
> long double has the binary128 format (and thus GCC 7 provides the
> _Float128 type with the same ABI as long double but as a distinct type
> in terms of C type compatibility).  This is the same API as provided
> in glibc 2.26 for powerpc64le / x86_64 / x86 / ia64 where _Float128
> has a different format from long double, with the bulk of the API
> coming from TS 18661-3.  All the functions alias the corresponding
> long double functions, and __* function names are not provided since
> those are only needed once for each floating-point format, not more
> than once for different types with the same format (so for example,
> -ffinite-math-only maps foof128 to __fool_finite, while type-generic
> macros end up calling e.g. __issignalingl for _Float128 arguments on
> such platforms).
>
> The preparation for this feature was done in previous patches, so this
> one just needs to add the relevant makefile and header definitions,
> and update macro definitions of libm_alias_ldouble_other_r, to turn on
> the feature, and update documentation and ABI baselines.
>
> Tested (a) for x86_64, (b) for aarch64, (c) with build-many-glibcs.py
> with both GCC 6 and GCC 7.  Committed.
>
...
> +++ b/sysdeps/ieee754/ldbl-128/bits/floatn.h
...
> +/* The remaining of this file provides support for older compilers.  */
> +#if __HAVE_FLOAT128
> +
> +/* The type _Float128 exists only since GCC 7.0.  */
> +# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
> +typedef long double _Float128;
> +# endif

note that this typedef in a public header does not work
on compilers that support _Float128 but not >=gcc-7

https://reviews.llvm.org/D40673

(it seems clang added code to define _Float128 because
glibc headers started depending on it, but this is now
broken on targets where long double is ieee binary128
and thus both glibc and clang has a definition.)


Reply | Threaded
Open this post in threaded view
|

Re: Add _Float128 function aliases [committed]

Joseph Myers
On Tue, 9 Jan 2018, Szabolcs Nagy wrote:

> note that this typedef in a public header does not work
> on compilers that support _Float128 but not >=gcc-7

It's entirely appropriate to add support for other compilers in
bits/floatn.h headers (there are several bits/floatn.h variants in glibc -
if it's a matter of "clang version N supports _Float128 on this set of
configurations", the headers used by those configurations are the ones
appropriate to update), where those compilers have some form of _FloatN /
_FloatNx / __float128 support that could reasonably be used with installed
glibc headers.

To reiterate the reasoning for not supporting the _Float128 keyword for
C++ in GCC: standard C++ often tends to use class-based library approaches
for features that C puts in the language; in particular, C++ chose to use
std::decimal instead of _Decimal32, _Decimal64, _Decimal128 keywords.  
Thus, it seems plausible that a C++ binding for types corresponding to
IEEE binary floating-point formats and semantics would also be class-based
rather than involving new keywords.

--
Joseph S. Myers
[hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: Add _Float128 function aliases [committed]

Szabolcs Nagy-2
On 09/01/18 16:47, Joseph Myers wrote:

> On Tue, 9 Jan 2018, Szabolcs Nagy wrote:
>
>> note that this typedef in a public header does not work
>> on compilers that support _Float128 but not >=gcc-7
>
> It's entirely appropriate to add support for other compilers in
> bits/floatn.h headers (there are several bits/floatn.h variants in glibc -
> if it's a matter of "clang version N supports _Float128 on this set of
> configurations", the headers used by those configurations are the ones
> appropriate to update), where those compilers have some form of _FloatN /
> _FloatNx / __float128 support that could reasonably be used with installed
> glibc headers.
>

i can provide a workaround in aarch64 target specific
headers, but i think this is should be fixed in
sysdeps/ieee754/ldbl-128/bits/floatn.h

maybe check for __FLT128_MANT_DIG==113 instead of gcc-7?
clang defines this macro too.

Reply | Threaded
Open this post in threaded view
|

Re: Add _Float128 function aliases [committed]

Joseph Myers
On Tue, 9 Jan 2018, Szabolcs Nagy wrote:

> On 09/01/18 16:47, Joseph Myers wrote:
> > On Tue, 9 Jan 2018, Szabolcs Nagy wrote:
> >
> >> note that this typedef in a public header does not work
> >> on compilers that support _Float128 but not >=gcc-7
> >
> > It's entirely appropriate to add support for other compilers in
> > bits/floatn.h headers (there are several bits/floatn.h variants in glibc -
> > if it's a matter of "clang version N supports _Float128 on this set of
> > configurations", the headers used by those configurations are the ones
> > appropriate to update), where those compilers have some form of _FloatN /
> > _FloatNx / __float128 support that could reasonably be used with installed
> > glibc headers.
> >
>
> i can provide a workaround in aarch64 target specific
> headers, but i think this is should be fixed in
> sysdeps/ieee754/ldbl-128/bits/floatn.h
>
> maybe check for __FLT128_MANT_DIG==113 instead of gcc-7?
> clang defines this macro too.

Sure, that would be appropriate (in conjunction with the existing
__cplusplus tests - GCC defines __FLT128_MANT_DIG for C++ without
supporting the _Float128 type name or constant suffixes in that case), if
clang versions / configurations supporting _Float128 define
__FLT128_MANT_DIG while those not supporting _Float128 don't.

That would seem appropriate for all bits/floatn.h headers with any
_Float128 support (subject to being accurate for each thing being
conditioned - some __GNUC_PREREQ conditionals are for uses of f128
constant suffixes, or __builtin_*f128 built-in functions, so you should
make sure those features are supported by relevant clang versions), not
just the ldbl-128 version.

--
Joseph S. Myers
[hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: Add _Float128 function aliases [committed]

Joseph Myers
In reply to this post by Szabolcs Nagy-2
On Tue, 9 Jan 2018, Szabolcs Nagy wrote:

> maybe check for __FLT128_MANT_DIG==113 instead of gcc-7?

(Note it's __FLT128_MANT_DIG__ - and just testing that it's defined at all
should suffice.)

--
Joseph S. Myers
[hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: Add _Float128 function aliases [committed]

Szabolcs Nagy-2
In reply to this post by Joseph Myers
On 09/01/18 18:11, Joseph Myers wrote:

> On Tue, 9 Jan 2018, Szabolcs Nagy wrote:
>> maybe check for __FLT128_MANT_DIG==113 instead of gcc-7?
>> clang defines this macro too.
>
> Sure, that would be appropriate (in conjunction with the existing
> __cplusplus tests - GCC defines __FLT128_MANT_DIG for C++ without
> supporting the _Float128 type name or constant suffixes in that case), if
> clang versions / configurations supporting _Float128 define
> __FLT128_MANT_DIG while those not supporting _Float128 don't.
>
> That would seem appropriate for all bits/floatn.h headers with any
> _Float128 support (subject to being accurate for each thing being
> conditioned - some __GNUC_PREREQ conditionals are for uses of f128
> constant suffixes, or __builtin_*f128 built-in functions, so you should
> make sure those features are supported by relevant clang versions), not
> just the ldbl-128 version.
>

i opened https://sourceware.org/bugzilla/show_bug.cgi?id=22700
i might not have time to fix and test it.

Reply | Threaded
Open this post in threaded view
|

Re: Add _Float128 function aliases [committed]

Joseph Myers
On Thu, 11 Jan 2018, Szabolcs Nagy wrote:

> i opened https://sourceware.org/bugzilla/show_bug.cgi?id=22700

Thanks.  That should cover the ldbl-128 and mips versions.  Do you know if
there are similar issues for e.g. x86_64?  (I suppose for x86_64 things
are safe by default if clang still claims to be GCC 4.2, in that the
float128 support wouldn't be enabled there at all because it requires GCC
>= 4.3, so if some clang versions support __float128 or _Float128 for
x86_64, adding the corresponding bits/floatn.h support would be a feature
addition not needed to fix any current breakage.)

--
Joseph S. Myers
[hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: Add _Float128 function aliases [committed]

Szabolcs Nagy-2
On 11/01/18 13:54, Joseph Myers wrote:

> On Thu, 11 Jan 2018, Szabolcs Nagy wrote:
>
>> i opened https://sourceware.org/bugzilla/show_bug.cgi?id=22700
>
> Thanks.  That should cover the ldbl-128 and mips versions.  Do you know if
> there are similar issues for e.g. x86_64?  (I suppose for x86_64 things
> are safe by default if clang still claims to be GCC 4.2, in that the
> float128 support wouldn't be enabled there at all because it requires GCC
>> = 4.3, so if some clang versions support __float128 or _Float128 for
> x86_64, adding the corresponding bits/floatn.h support would be a feature
> addition not needed to fix any current breakage.)
>

i don't know what happens on x86_64

they claim it works with 2.26 headers (latest fedora) but only if they
provide _Float128.

if 2.27 headers need more _Float128 things to work (f128 suffix, builtins)
then i guess there may be a problem on x86_64 too.