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 18cbce4ef2..3b16796453 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 6410fa4d2b..f3d10d3b20 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 5c10a4673e..0000000000 --- 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 0000000000..ec907ecaf9 --- /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 dbae3aab81..99c6a754f0 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 0000000000..db3355f598 --- /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 8bdea32c02..ed87fbf7ec 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 d9d383840f..b173876dd2 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 97a955f103..1dc8f572d0 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 b3ef9288c8..d799f204fa 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 e05ee8fc09..0d608533c9 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 ccbc848841..d60a11026c 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 ccbc848841..d60a11026c 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 268d158943..60ce950d8a 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 cb043bc598..b4164516f6 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 ccbc848841..d60a11026c 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 b4927dbb2e..5875a5c80c 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 90089d1428..e24b8ef83a 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 90089d1428..e24b8ef83a 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 666d67867d..42afecec7c 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 ee49433203..2850dacf7f 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 fa7d38edc6..71f1e74f75 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 cb79ecc5d7..2cab971c10 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 e7d13a48e9..6574ba9908 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 8362b4eb68..e4888b6cf2 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 56a38af71b..ccc0de5b98 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 457a2856d9..871c473efa 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 8a026ba740..7a0edfe5c3 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 8a026ba740..7a0edfe5c3 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 af62388c05..acfe74ef6f 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 61dc56a894..dc28560fdc 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 cea77965ca..3690000175 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 c4d8322250..c41a781b5c 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