]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
math: Remove the error handling wrapper from fmod and fmodf
authorAdhemerval Zanella Netto <adhemerval.zanella@linaro.org>
Mon, 20 Mar 2023 16:01:18 +0000 (13:01 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 3 Apr 2023 19:45:27 +0000 (16:45 -0300)
The error handling is moved to sysdeps/ieee754 version with no SVID
support.  The compatibility symbol versions still use the wrapper
with SVID error handling around the new code.  There is no new symbol
version nor compatibility code on !LIBM_SVID_COMPAT targets
(e.g. riscv).

The ia64 is unchanged, since it still uses the arch specific
__libm_error_region on its implementation.  For both i686 and m68k,
which provive arch specific implementation, wrappers are added so
no new symbol are added (which would require to change the
implementations).

It shows an small improvement, the results for fmod:

  Architecture     | Input           | master   | patch
  -----------------|-----------------|----------|--------
  x86_64 (Ryzen 9) | subnormals      | 12.5049  | 9.40992
  x86_64 (Ryzen 9) | normal          | 296.939  | 296.738
  x86_64 (Ryzen 9) | close-exponents | 16.0244  | 13.119
  aarch64 (N1)     | subnormal       | 6.81778  | 4.33313
  aarch64 (N1)     | normal          | 155.620  | 152.915
  aarch64 (N1)     | close-exponents | 8.21306  | 5.76138
  armhf (N1)       | subnormal       | 15.1083  | 14.5746
  armhf (N1)       | normal          | 244.833  | 241.738
  armhf (N1)       | close-exponents | 21.8182  | 22.457

Checked on x86_64-linux-gnu, i686-linux-gnu, and aarch64-linux-gnu.
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
38 files changed:
math/Versions
math/w_fmod_compat.c
math/w_fmodf_compat.c
sysdeps/i386/fpu/w_fmod_compat.c [new file with mode: 0644]
sysdeps/i386/fpu/w_fmodf_compat.c [new file with mode: 0644]
sysdeps/ieee754/dbl-64/e_fmod.c
sysdeps/ieee754/dbl-64/math_config.h
sysdeps/ieee754/dbl-64/math_err.c
sysdeps/ieee754/dbl-64/w_fmod.c [new file with mode: 0644]
sysdeps/ieee754/flt-32/e_fmodf.c
sysdeps/ieee754/flt-32/math_config.h
sysdeps/ieee754/flt-32/math_errf.c
sysdeps/ieee754/flt-32/w_fmodf.c [new file with mode: 0644]
sysdeps/m68k/m680x0/fpu/w_fmod_compat.c [new file with mode: 0644]
sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/aarch64/libm.abilist
sysdeps/unix/sysv/linux/alpha/libm.abilist
sysdeps/unix/sysv/linux/arm/be/libm.abilist
sysdeps/unix/sysv/linux/arm/le/libm.abilist
sysdeps/unix/sysv/linux/hppa/libm.abilist
sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
sysdeps/unix/sysv/linux/nios2/libm.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
sysdeps/unix/sysv/linux/sh/be/libm.abilist
sysdeps/unix/sysv/linux/sh/le/libm.abilist
sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist

index fef7a08c3b89b71aae904a98a4c4443541e9294c..759b5fac7f43739de9bf63fcb5d41fae071ee86b 100644 (file)
@@ -631,4 +631,8 @@ libm {
     # No SVID compatible error handling.
     hypotf; hypot;
   }
+  GLIBC_2.38 {
+    # No SVID compatible error handling.
+    fmod; fmodf;
+  }
 }
index c6947f30420361f001a2a1d26c6eea267a594839..aef98885a370be2901a53ec271002743c2c204a6 100644 (file)
 #include <math-svid-compat.h>
 #include <libm-alias-double.h>
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_38)
 /* wrapper fmod */
 double
-__fmod (double x, double y)
+__fmod_compat (double x, double y)
 {
   if (__builtin_expect (isinf (x) || y == 0.0, 0)
       && _LIB_VERSION != _IEEE_ && !isnan (y) && !isnan (x))
@@ -32,5 +32,12 @@ __fmod (double x, double y)
 
   return __ieee754_fmod (x, y);
 }
-libm_alias_double (__fmod, fmod)
+compat_symbol (libm, __fmod_compat, fmod, GLIBC_2_0);
+# ifdef NO_LONG_DOUBLE
+weak_alias (__fmod_compat, fmodl)
+# endif
+# ifdef LONG_DOUBLE_COMPAT
+LONG_DOUBLE_COMPAT_CHOOSE_libm_fmodl (
+  compat_symbol (libm, __fmod_compat, fmodl, FIRST_VERSION_libm_fmodl), );
+# endif
 #endif
index 5025b06684674a05c8a1197be1cf0432ae23918e..55823961f4f9f5a9f4b2d0a4d76eabc90a5e2323 100644 (file)
 #include <math-svid-compat.h>
 #include <libm-alias-float.h>
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_38)
 /* wrapper fmodf */
 float
-__fmodf (float x, float y)
+__fmod_compatf (float x, float y)
 {
   if (__builtin_expect (isinf (x) || y == 0.0f, 0)
       && _LIB_VERSION != _IEEE_ && !isnan (y) && !isnan (x))
@@ -32,5 +32,5 @@ __fmodf (float x, float y)
 
   return __ieee754_fmodf (x, y);
 }
-libm_alias_float (__fmod, fmod)
+compat_symbol (libm, __fmod_compatf, fmodf, GLIBC_2_0);
 #endif
diff --git a/sysdeps/i386/fpu/w_fmod_compat.c b/sysdeps/i386/fpu/w_fmod_compat.c
new file mode 100644 (file)
index 0000000..5ac9995
--- /dev/null
@@ -0,0 +1,14 @@
+/* i386 provides an optimized __ieee752_fmod.  */
+#include <math-svid-compat.h>
+#ifdef SHARED
+# undef SHLIB_COMPAT
+# define SHLIB_COMPAT(a, b, c) 1
+# undef LIBM_SVID_COMPAT
+# define LIBM_SVID_COMPAT 1
+# undef compat_symbol
+# define compat_symbol(a, b, c, d)
+#endif
+#include <math/w_fmod_compat.c>
+#ifdef SHARED
+libm_alias_double (__fmod_compat, fmod)
+#endif
diff --git a/sysdeps/i386/fpu/w_fmodf_compat.c b/sysdeps/i386/fpu/w_fmodf_compat.c
new file mode 100644 (file)
index 0000000..cc417e0
--- /dev/null
@@ -0,0 +1,14 @@
+/* i386 provides an optimized __ieee752_fmodf.  */
+#include <math-svid-compat.h>
+#ifdef SHARED
+# undef SHLIB_COMPAT
+# define SHLIB_COMPAT(a, b, c) 1
+# undef LIBM_SVID_COMPAT
+# define LIBM_SVID_COMPAT 1
+# undef compat_symbol
+# define compat_symbol(a, b, c, d)
+#endif
+#include <math/w_fmodf_compat.c>
+#ifdef SHARED
+libm_alias_float (__fmod_compat, fmod)
+#endif
index e661ca1ff8dcd1d8d8b8c66a3aa92c40e966c362..caae4e47e2358daced51a22342ec6e34a04f6fce 100644 (file)
@@ -16,7 +16,9 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
+#include <libm-alias-double.h>
 #include <libm-alias-finite.h>
+#include <math-svid-compat.h>
 #include <math.h>
 #include "math_config.h"
 
@@ -55,7 +57,7 @@
      }  */
 
 double
-__ieee754_fmod (double x, double y)
+__fmod (double x, double y)
 {
   uint64_t hx = asuint64 (x);
   uint64_t hy = asuint64 (y);
@@ -67,11 +69,16 @@ __ieee754_fmod (double x, double y)
 
   /* Special cases:
      - If x or y is a Nan, NaN is returned.
-     - If x is an inifinity, a NaN is returned.
+     - If x is an inifinity, a NaN is returned and EDOM is set.
      - If y is zero, Nan is returned.
      - If x is +0/-0, and y is not zero, +0/-0 is returned.  */
-  if (__glibc_unlikely (hy == 0        || hx >= EXPONENT_MASK || hy > EXPONENT_MASK))
-    return (x * y) / (x * y);
+  if (__glibc_unlikely (hy == 0
+                       || hx >= EXPONENT_MASK || hy > EXPONENT_MASK))
+    {
+      if (is_nan (hx) || is_nan (hy))
+       return (x * y) / (x * y);
+      return __math_edom ((x * y) / (x * y));
+    }
 
   if (__glibc_unlikely (hx <= hy))
     {
@@ -153,4 +160,11 @@ __ieee754_fmod (double x, double y)
 
   return make_double (mx, ey, sx);
 }
+strong_alias (__fmod, __ieee754_fmod)
 libm_alias_finite (__ieee754_fmod, __fmod)
+#if LIBM_SVID_COMPAT
+versioned_symbol (libm, __fmod, fmod, GLIBC_2_38);
+libm_alias_double_other (__fmod, fmod)
+#else
+libm_alias_double (__fmod, fmod)
+#endif
index 2049cea3f79d7314204c061aef0efb6542a6665c..499ca7591b002a0c86a06cb10839edfb155d7e6f 100644 (file)
@@ -170,6 +170,9 @@ attribute_hidden double __math_invalid (double);
 
 /* Error handling using output checking, only for errno setting.  */
 
+/* Check if the result generated a demain error.  */
+attribute_hidden double __math_edom (double x);
+
 /* Check if the result overflowed to infinity.  */
 attribute_hidden double __math_check_oflow (double);
 /* Check if the result underflowed to 0.  */
index 5f5f965d3ed54227c859fe018e9bd4664f8eda7e..377a4caad2d16c203ad36024761501dfbdab131d 100644 (file)
@@ -33,6 +33,12 @@ with_errno (double y, int e)
 #define with_errno(x, e) (x)
 #endif
 
+attribute_hidden double
+__math_edom (double y)
+{
+  return with_errno (y, EDOM);
+}
+
 /* NOINLINE reduces code size.  */
 NOINLINE static double
 xflow (uint32_t sign, double y)
diff --git a/sysdeps/ieee754/dbl-64/w_fmod.c b/sysdeps/ieee754/dbl-64/w_fmod.c
new file mode 100644 (file)
index 0000000..1cc8931
--- /dev/null
@@ -0,0 +1 @@
+/* Not needed.  */
index 4482b8c0ac3b758bc076931b29d48bb518b4c8d2..763900efdaa8222431e189e50a7e62baf465a54d 100644 (file)
@@ -17,6 +17,8 @@
    <https://www.gnu.org/licenses/>.  */
 
 #include <libm-alias-finite.h>
+#include <libm-alias-float.h>
+#include <math-svid-compat.h>
 #include <math.h>
 #include "math_config.h"
 
@@ -55,7 +57,7 @@
      }  */
 
 float
-__ieee754_fmodf (float x, float y)
+__fmodf (float x, float y)
 {
   uint32_t hx = asuint (x);
   uint32_t hy = asuint (y);
@@ -70,8 +72,13 @@ __ieee754_fmodf (float x, float y)
      - If x is an inifinity, a NaN is returned.
      - If y is zero, Nan is returned.
      - If x is +0/-0, and y is not zero, +0/-0 is returned.  */
-  if (__glibc_unlikely (hy == 0        || hx >= EXPONENT_MASK || hy > EXPONENT_MASK))
-    return (x * y) / (x * y);
+  if (__glibc_unlikely (hy == 0
+                       || hx >= EXPONENT_MASK || hy > EXPONENT_MASK))
+    {
+      if (is_nan (hx) || is_nan (hy))
+       return (x * y) / (x * y);
+      return __math_edomf ((x * y) / (x * y));
+    }
 
   if (__glibc_unlikely (hx <= hy))
     {
@@ -152,4 +159,11 @@ __ieee754_fmodf (float x, float y)
 
   return make_float (mx, ey, sx);
 }
+strong_alias (__fmodf, __ieee754_fmodf)
+#if LIBM_SVID_COMPAT
+versioned_symbol (libm, __fmodf, fmodf, GLIBC_2_38);
+libm_alias_float_other (__fmod, fmod)
+#else
+libm_alias_float (__fmod, fmod)
+#endif
 libm_alias_finite (__ieee754_fmodf, __fmodf)
index 829430ea283ee05378810670adfc91ce5a748910..a7fb3327671960de3b476be271f706324c471db0 100644 (file)
@@ -158,6 +158,7 @@ attribute_hidden float __math_uflowf (uint32_t);
 attribute_hidden float __math_may_uflowf (uint32_t);
 attribute_hidden float __math_divzerof (uint32_t);
 attribute_hidden float __math_invalidf (float);
+attribute_hidden float __math_edomf (float x);
 
 /* Shared between expf, exp2f, exp10f, and powf.  */
 #define EXP2F_TABLE_BITS 5
index 0389ce0a8138dced014c1a0bf2bc6dfee0d43671..7245ab8d968516e8fe49dc177f3d14e29a362c96 100644 (file)
@@ -31,6 +31,12 @@ with_errnof (float y, int e)
 # define with_errnof(x, e) (x)
 #endif
 
+attribute_hidden float
+__math_edomf (float y)
+{
+  return with_errnof (y, EDOM);
+}
+
 /* NOINLINE prevents fenv semantics breaking optimizations.  */
 NOINLINE static float
 xflowf (uint32_t sign, float y)
diff --git a/sysdeps/ieee754/flt-32/w_fmodf.c b/sysdeps/ieee754/flt-32/w_fmodf.c
new file mode 100644 (file)
index 0000000..1cc8931
--- /dev/null
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/m68k/m680x0/fpu/w_fmod_compat.c b/sysdeps/m68k/m680x0/fpu/w_fmod_compat.c
new file mode 100644 (file)
index 0000000..527d4fb
--- /dev/null
@@ -0,0 +1,14 @@
+/* m68k provides an optimized __ieee752_fmod.  */
+#include <math-svid-compat.h>
+#ifdef SHARED
+# undef SHLIB_COMPAT
+# define SHLIB_COMPAT(a, b, c) 1
+# undef LIBM_SVID_COMPAT
+# define LIBM_SVID_COMPAT 1
+# undef compat_symbol
+# define compat_symbol(a, b, c, d)
+#endif
+#include <math/w_fmod_compat.c>
+#ifdef SHARED
+libm_alias_double (__fmod_compat, fmod)
+#endif
diff --git a/sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c b/sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c
new file mode 100644 (file)
index 0000000..5043586
--- /dev/null
@@ -0,0 +1,14 @@
+/* m68k provides an optimized __ieee752_fmodf.  */
+#include <math-svid-compat.h>
+#ifdef SHARED
+# undef SHLIB_COMPAT
+# define SHLIB_COMPAT(a, b, c) 1
+# undef LIBM_SVID_COMPAT
+# define LIBM_SVID_COMPAT 1
+# undef compat_symbol
+# define compat_symbol(a, b, c, d)
+#endif
+#include <math/w_fmodf_compat.c>
+#ifdef SHARED
+libm_alias_float (__fmod_compat, fmod)
+#endif
index c2e3c6453e2c1b7dad24a12602f95e0833a7aa0f..e3924c3499d290fc96e4e6919bc8a26da8f7777c 100644 (file)
@@ -1146,3 +1146,5 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
index 4f85b6180fb25c40a49df0259277a1c74fe2264d..066dd1a6b371d060eea4196f83fd86d8dacdf614 100644 (file)
@@ -1203,6 +1203,8 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index 36190add845590fc5cc8d1f8ea6e0a7f79d13e90..4adfed072b0239d5508559c2442cf30cb064d7b7 100644 (file)
@@ -533,6 +533,8 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
 GLIBC_2.4 __clog10f F
index 36190add845590fc5cc8d1f8ea6e0a7f79d13e90..4adfed072b0239d5508559c2442cf30cb064d7b7 100644 (file)
@@ -533,6 +533,8 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
 GLIBC_2.4 __clog10f F
index b5dd4e851f5cf7fe07196b546c7c75e27c230321..5c3f47caefe8d89a95d0fbd3663c623eaefa5778 100644 (file)
@@ -844,4 +844,6 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 exp2l F
index 36190add845590fc5cc8d1f8ea6e0a7f79d13e90..4adfed072b0239d5508559c2442cf30cb064d7b7 100644 (file)
@@ -533,6 +533,8 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
 GLIBC_2.4 __clog10f F
index 274ecff63054f3a41ecb327d0f2104ada6fe47ed..ea0dbd4b727a618bc9598a27ea2dd4a2bd1b8a30 100644 (file)
@@ -845,3 +845,5 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
index 274ecff63054f3a41ecb327d0f2104ada6fe47ed..ea0dbd4b727a618bc9598a27ea2dd4a2bd1b8a30 100644 (file)
@@ -845,3 +845,5 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
index 08b902118dd07a76cd22785a0616f342dc06d039..7c94a8db706e39147886da035e4a07fa12032bb7 100644 (file)
@@ -844,4 +844,6 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 exp2l F
index 09bb3bd75b10e1b47009b67e657bb657af8bd672..0d08245adf0e1e652aa0a6eb4707509208bc582b 100644 (file)
@@ -1146,3 +1146,5 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
index 11abbb5668ca447f74a97fc15753247f739e8509..a3b776fece3a4f5b50fb4c88500384027eea9e37 100644 (file)
@@ -845,3 +845,5 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
index 1688809c36d8767dde007f8308e670d6f63b4dc1..c696215739f408f4b16008a76d1007fa80d52f5a 100644 (file)
@@ -890,6 +890,8 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index e880cebd78f1be67f9bfda70f4aeb1e97481cfff..a5ce9b1997939909e3239fe5b694246a410aeb56 100644 (file)
@@ -889,6 +889,8 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index 033385dfc185bf31cee8f3fd6363cab59023f97a..8e41056d0d4a588b4f8346e4b8bab3742036cdd0 100644 (file)
@@ -883,6 +883,8 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index 7923d428bcce4e66e42e287c6f0ff62af093481a..939f29a0f28023d1307bb7e84c62be8161bfdd71 100644 (file)
@@ -1318,3 +1318,5 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
index 9a8416308967c175d6f0947c9867265cb30eb6bd..4baefb1217b27d42023c0f39cb5425fd5ac35ee6 100644 (file)
@@ -1147,6 +1147,8 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index 174bde4fa059bd139f69bbc29a430f293153fa88..debb767575907b5ff5e1a335aaf06b0ee8b41d18 100644 (file)
@@ -1147,6 +1147,8 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index 1e1324d667c70114a36d283582b1e006fa1c4228..fb94386fffdc81329031c0f26545ea22ddb4cc8e 100644 (file)
@@ -844,4 +844,6 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 exp2l F
index 1e1324d667c70114a36d283582b1e006fa1c4228..fb94386fffdc81329031c0f26545ea22ddb4cc8e 100644 (file)
@@ -844,4 +844,6 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 exp2l F
index 217e6eff7f0e56e52e42eb20b7c15a1c0d9c9a74..2fdb5ff14508606311e2a24595c5f46552bda578 100644 (file)
@@ -1154,6 +1154,8 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index 6b53b0c59f0fa63b7c6a5473d055a216e1c3aa4f..02d4c3a754862f8205267f6baf69a020df9dfa99 100644 (file)
@@ -1146,3 +1146,5 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
index dbefbc3a1ad7b8a8cc98f734f11ce3e20903ab9c..cc8be5b510d832d77d11b6e89e424492bc42dba1 100644 (file)
@@ -1179,3 +1179,5 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F
index 8001d0f2196bcdf6ca61ea0766890645f9a95429..fda4df265316c534102192201474b8b26c4e9a47 100644 (file)
@@ -1179,3 +1179,5 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.38 fmod F
+GLIBC_2.38 fmodf F