From 0e1a1178ee22a25ff4568f51a2fec85451b17b04 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Fri, 31 Oct 2025 13:08:51 -0300 Subject: [PATCH] math: Remove the SVID error handling from remainder The optimized i386 version is faster than the generic one, and gcc implements it through the builtin. This optimization enables us to migrate the implementation to a C version. The performance on a Zen3 chip is similar to the SVID one. The m68k provided an optimized version through __m81_u(remainderf) (mathimpl.h), and gcc does not implement it through a builtin (different than i386). Performance improves a bit on x86_64 (Zen3, gcc 15.2.1): reciprocal-throughput input master NO-SVID improvement x86_64 subnormals 18.8522 16.2506 13.80% x86_64 normal 421.8260 403.9270 4.24% x86_64 close-exponent 21.0579 18.7642 10.89% i686 subnormals 21.3443 21.4229 -0.37% i686 normal 525.8380 538.807 -2.47% i686 close-exponent 21.6589 21.7983 -0.64% Tested on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Wilco Dijkstra --- math/Versions | 1 + math/w_remainder_compat.c | 21 +++++++--- sysdeps/i386/fpu/e_remainder.S | 18 -------- sysdeps/i386/fpu/e_remainder.c | 41 +++++++++++++++++++ sysdeps/ieee754/dbl-64/e_remainder.c | 30 +++++++++----- sysdeps/ieee754/dbl-64/w_remainder.c | 1 + sysdeps/ieee754/ldbl-opt/w_remainder_compat.c | 2 +- sysdeps/m68k/m680x0/fpu/e_remainder.c | 16 +++++++- sysdeps/mach/hurd/i386/libm.abilist | 1 + sysdeps/unix/sysv/linux/aarch64/libm.abilist | 1 + sysdeps/unix/sysv/linux/alpha/libm.abilist | 1 + sysdeps/unix/sysv/linux/arm/be/libm.abilist | 1 + sysdeps/unix/sysv/linux/arm/le/libm.abilist | 1 + sysdeps/unix/sysv/linux/hppa/libm.abilist | 1 + sysdeps/unix/sysv/linux/i386/libm.abilist | 1 + .../sysv/linux/m68k/coldfire/libm.abilist | 1 + .../unix/sysv/linux/m68k/m680x0/libm.abilist | 1 + .../sysv/linux/microblaze/be/libm.abilist | 1 + .../sysv/linux/microblaze/le/libm.abilist | 1 + .../unix/sysv/linux/mips/mips32/libm.abilist | 1 + .../unix/sysv/linux/mips/mips64/libm.abilist | 1 + .../linux/powerpc/powerpc32/fpu/libm.abilist | 1 + .../powerpc/powerpc32/nofpu/libm.abilist | 1 + .../linux/powerpc/powerpc64/be/libm.abilist | 1 + .../linux/powerpc/powerpc64/le/libm.abilist | 1 + .../unix/sysv/linux/s390/s390-32/libm.abilist | 1 + .../unix/sysv/linux/s390/s390-64/libm.abilist | 1 + sysdeps/unix/sysv/linux/sh/be/libm.abilist | 1 + sysdeps/unix/sysv/linux/sh/le/libm.abilist | 1 + .../sysv/linux/sparc/sparc32/libm.abilist | 1 + .../sysv/linux/sparc/sparc64/libm.abilist | 1 + .../unix/sysv/linux/x86_64/64/libm.abilist | 1 + .../unix/sysv/linux/x86_64/x32/libm.abilist | 1 + 33 files changed, 118 insertions(+), 37 deletions(-) delete mode 100644 sysdeps/i386/fpu/e_remainder.S create mode 100644 sysdeps/i386/fpu/e_remainder.c create mode 100644 sysdeps/ieee754/dbl-64/w_remainder.c diff --git a/math/Versions b/math/Versions index 18cbce4ef20..3b16796453f 100644 --- a/math/Versions +++ b/math/Versions @@ -697,6 +697,7 @@ libm { j1f; jnf; log10f; + remainder; remainderf; y0f; y1f; diff --git a/math/w_remainder_compat.c b/math/w_remainder_compat.c index 6410fa4d2b0..f3d10d3b207 100644 --- a/math/w_remainder_compat.c +++ b/math/w_remainder_compat.c @@ -19,23 +19,32 @@ #include #include #include +#include -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && (SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_43) \ + || defined NO_LONG_DOUBLE \ + || defined LONG_DOUBLE_COMPAT) /* wrapper remainder */ double -__remainder (double x, double y) +__remainder_compat (double x, double y) { if (((__builtin_expect (y == 0.0, 0) && ! isnan (x)) || (__builtin_expect (isinf (x), 0) && ! isnan (y))) && _LIB_VERSION != _IEEE_) return __kernel_standard (x, y, 28); /* remainder domain */ - return __ieee754_remainder (x, y); + return __remainder (x, y); } -libm_alias_double (__remainder, remainder) -weak_alias (__remainder, drem) +compat_symbol (libm, __remainder_compat, remainder, GLIBC_2_0); +weak_alias (__remainder_compat, drem) # ifdef NO_LONG_DOUBLE -weak_alias (__remainder, dreml) +weak_alias (__remainder_compat, dreml) +weak_alias (__remainder_compat, remainderl) +# endif +# ifdef LONG_DOUBLE_COMPAT +LONG_DOUBLE_COMPAT_CHOOSE_libm_remainderl ( + compat_symbol (libm, __remainder_compat, remainderl, \ + FIRST_VERSION_libm_remainderl), ); # endif #endif diff --git a/sysdeps/i386/fpu/e_remainder.S b/sysdeps/i386/fpu/e_remainder.S deleted file mode 100644 index 5c10a4673ea..00000000000 --- a/sysdeps/i386/fpu/e_remainder.S +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Public domain. - */ - -#include -#include - -ENTRY(__ieee754_remainder) - fldl 12(%esp) - fldl 4(%esp) -1: fprem1 - fstsw %ax - sahf - jp 1b - fstp %st(1) - ret -END (__ieee754_remainder) -libm_alias_finite (__ieee754_remainder, __remainder) diff --git a/sysdeps/i386/fpu/e_remainder.c b/sysdeps/i386/fpu/e_remainder.c new file mode 100644 index 00000000000..ec907ecaf98 --- /dev/null +++ b/sysdeps/i386/fpu/e_remainder.c @@ -0,0 +1,41 @@ +/* Floating-point remainder function. + Copyright (C) 2025 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 + . */ + +#include +#include +#include +#include "math_config.h" + +double +__remainder (double x, double y) +{ + uint64_t hx = asuint64 (x); + uint64_t hy = asuint64 (y); + + /* fmod(+-Inf,y) or fmod(x,0) */ + if (__glibc_unlikely ((is_inf (hx) || y == 0.0) + && !is_nan (hy) + && !is_nan (hx))) + return __math_invalid (x); + + return __builtin_remainder (x, y); +} +strong_alias (__remainder, __ieee754_remainder) +versioned_symbol (libm, __remainder, remainder, GLIBC_2_43); +libm_alias_double_other (__remainder, remainder) +libm_alias_finite (__ieee754_remainder, __remainder) diff --git a/sysdeps/ieee754/dbl-64/e_remainder.c b/sysdeps/ieee754/dbl-64/e_remainder.c index dbae3aab81e..99c6a754f00 100644 --- a/sysdeps/ieee754/dbl-64/e_remainder.c +++ b/sysdeps/ieee754/dbl-64/e_remainder.c @@ -18,10 +18,12 @@ #include #include +#include +#include #include "math_config.h" double -__ieee754_remainder (double x, double y) +__remainder (double x, double y) { uint64_t hx = asuint64 (x); uint64_t hy = asuint64 (y); @@ -34,12 +36,8 @@ __ieee754_remainder (double x, double y) y = fabs (y); if (__glibc_likely (hy < UINT64_C (0x7fe0000000000000))) { - /* |x| not finite, |y| equal 0 is handled by fmod. */ - if (__glibc_unlikely (hx >= EXPONENT_MASK)) - return (x * y) / (x * y); - - x = fabs (__ieee754_fmod (x, y + y)); - if (x + x > y) + x = fabs (__fmod (x, y + y)); + if (isgreater (x + x, y)) { x -= y; if (x + x >= y) @@ -52,9 +50,9 @@ __ieee754_remainder (double x, double y) } else { - /* |x| not finite or |y| is NaN or 0 */ - if ((hx >= EXPONENT_MASK || (hy - 1) >= EXPONENT_MASK)) - return (x * y) / (x * y); + /* |x| not finite or |y| is NaN */ + if (__glibc_unlikely (hx >= EXPONENT_MASK || hy > EXPONENT_MASK)) + return __math_invalid (x * y); x = fabs (x); double y_half = y * 0.5; @@ -70,4 +68,14 @@ __ieee754_remainder (double x, double y) return sx ? -x : x; } -libm_alias_finite (__ieee754_remainder, __remainder) +libm_alias_finite (__remainder, __remainder) +#if LIBM_SVID_COMPAT +versioned_symbol (libm, __remainder, remainder, GLIBC_2_43); +libm_alias_double_other (__remainder, remainder) +#else +libm_alias_double (__remainder, remainder) +weak_alias (__remainder, drem) +# ifdef NO_LONG_DOUBLE +weak_alias (__remainder, dreml) +# endif +#endif diff --git a/sysdeps/ieee754/dbl-64/w_remainder.c b/sysdeps/ieee754/dbl-64/w_remainder.c new file mode 100644 index 00000000000..db3355f5988 --- /dev/null +++ b/sysdeps/ieee754/dbl-64/w_remainder.c @@ -0,0 +1 @@ +/* Not needed */ diff --git a/sysdeps/ieee754/ldbl-opt/w_remainder_compat.c b/sysdeps/ieee754/ldbl-opt/w_remainder_compat.c index 8bdea32c02c..ed87fbf7eca 100644 --- a/sysdeps/ieee754/ldbl-opt/w_remainder_compat.c +++ b/sysdeps/ieee754/ldbl-opt/w_remainder_compat.c @@ -1,6 +1,6 @@ #include #include #if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0) -strong_alias (__remainder, __drem) +strong_alias (__remainder_compat, __drem) compat_symbol (libm, __drem, dreml, GLIBC_2_0); #endif diff --git a/sysdeps/m68k/m680x0/fpu/e_remainder.c b/sysdeps/m68k/m680x0/fpu/e_remainder.c index d9d383840f5..b173876dd2a 100644 --- a/sysdeps/m68k/m680x0/fpu/e_remainder.c +++ b/sysdeps/m68k/m680x0/fpu/e_remainder.c @@ -17,12 +17,26 @@ . */ #include +#include #include #include "mathimpl.h" +#include "math_config.h" double -__ieee754_remainder (double x, double y) +__remainder (double x, double y) { + uint64_t hx = asuint64 (x); + uint64_t hy = asuint64 (y); + + /* fmod(+-Inf,y) or fmod(x,0) */ + if (__glibc_unlikely ((is_inf (hx) || y == 0.0f) + && !is_nan (hy) + && !is_nan (hx))) + return __math_invalid (x); + return __m81_u(__ieee754_remainder)(x, y); } +strong_alias (__remainder, __ieee754_remainder) +versioned_symbol (libm, __remainder, remainder, GLIBC_2_43); +libm_alias_double_other (__remainder, remainder) libm_alias_finite (__ieee754_remainder, __remainder) diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist index 97a955f103c..1dc8f572d0e 100644 --- a/sysdeps/mach/hurd/i386/libm.abilist +++ b/sysdeps/mach/hurd/i386/libm.abilist @@ -1328,6 +1328,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index b3ef9288c84..d799f204faf 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1294,6 +1294,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist index e05ee8fc091..0d608533c92 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1453,6 +1453,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist index ccbc8488414..d60a11026cd 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist index ccbc8488414..d60a11026cd 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist index 268d1589438..60ce950d8af 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist index cb043bc5980..b4164516f6b 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1335,6 +1335,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist index ccbc8488414..d60a11026cd 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist index b4927dbb2e8..5875a5c80cd 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist @@ -992,6 +992,7 @@ GLIBC_2.43 fmodf F GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist index 90089d14280..e24b8ef83aa 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist index 90089d14280..e24b8ef83aa 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist index 666d67867d2..42afecec7c8 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist index ee49433203a..2850dacf7f3 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1294,6 +1294,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist index fa7d38edc6a..71f1e74f75e 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -1106,6 +1106,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist index cb79ecc5d70..2cab971c102 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -1105,6 +1105,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist index e7d13a48e98..6574ba9908b 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist @@ -1099,6 +1099,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist index 8362b4eb68f..e4888b6cf2b 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist @@ -1483,6 +1483,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist index 56a38af71b2..ccc0de5b988 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1397,6 +1397,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist index 457a2856d91..871c473efa6 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1397,6 +1397,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist index 8a026ba740a..7a0edfe5c37 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist index 8a026ba740a..7a0edfe5c37 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist index af62388c055..acfe74ef6ff 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1404,6 +1404,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist index 61dc56a8943..dc28560fdcb 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1294,6 +1294,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist index cea77965ca0..36900001753 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1327,6 +1327,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist index c4d83222502..c41a781b5c9 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1327,6 +1327,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F -- 2.47.3