Message ID | 20230320160118.352206-6-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | Improve fmod and fmodf | expand |
Hi Adhemerval,
LGTM - one minor nit about the is_inf functions, are they actually needed?
I'm happy for this to go in either way.
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Cheers,
Wilco
diff --git a/sysdeps/ieee754/dbl-64/e_fmod.c b/sysdeps/ieee754/dbl-64/e_fmod.c
index d20466fd5d..ff506c40b4 100644
--- a/sysdeps/ieee754/dbl-64/e_fmod.c
+++ b/sysdeps/ieee754/dbl-64/e_fmod.c
@@ -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"
@@ -44,7 +46,7 @@
} */
double
-__ieee754_fmod (double x, double y)
+__fmod (double x, double y)
{
uint64_t hx = asuint64 (x);
uint64_t hy = asuint64 (y);
@@ -56,11 +58,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));
+ }
OK
if (__glibc_unlikely (hx <= hy))
{
@@ -142,4 +149,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
diff --git a/sysdeps/ieee754/dbl-64/math_config.h b/sysdeps/ieee754/dbl-64/math_config.h
index 2049cea3f7..5173b99e4a 100644
--- a/sysdeps/ieee754/dbl-64/math_config.h
+++ b/sysdeps/ieee754/dbl-64/math_config.h
@@ -121,6 +121,12 @@ is_nan (uint64_t x)
return (x & EXP_MANT_MASK) > EXPONENT_MASK;
}
+static inline bool
+is_inf (uint64_t x)
+{
+ return (x & EXP_MANT_MASK) == EXPONENT_MASK;
+}
Is this used?
static inline uint64_t
get_mantissa (uint64_t x)
{
@@ -170,6 +176,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. */
diff --git a/sysdeps/ieee754/dbl-64/math_err.c b/sysdeps/ieee754/dbl-64/math_err.c
index 5f5f965d3e..377a4caad2 100644
--- a/sysdeps/ieee754/dbl-64/math_err.c
+++ b/sysdeps/ieee754/dbl-64/math_err.c
@@ -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
index 0000000000..1cc8931700
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/w_fmod.c
@@ -0,0 +1 @@
+/* Not needed. */
diff --git a/sysdeps/ieee754/flt-32/e_fmodf.c b/sysdeps/ieee754/flt-32/e_fmodf.c
index 53db32cbe2..c0b5dccc23 100644
--- a/sysdeps/ieee754/flt-32/e_fmodf.c
+++ b/sysdeps/ieee754/flt-32/e_fmodf.c
@@ -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"
@@ -44,7 +46,7 @@
} */
float
-__ieee754_fmodf (float x, float y)
+__fmodf (float x, float y)
{
uint32_t hx = asuint (x);
uint32_t hy = asuint (y);
@@ -59,8 +61,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));
+ }
OK
if (__glibc_unlikely (hx <= hy))
{
@@ -141,4 +148,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)
diff --git a/sysdeps/ieee754/flt-32/math_config.h b/sysdeps/ieee754/flt-32/math_config.h
index 829430ea28..f97cd39df1 100644
--- a/sysdeps/ieee754/flt-32/math_config.h
+++ b/sysdeps/ieee754/flt-32/math_config.h
@@ -125,6 +125,12 @@ is_nan (uint32_t x)
return (x & EXP_MANT_MASK) > EXPONENT_MASK;
}
+static inline bool
+is_inf (uint32_t x)
+{
+ return (x & EXP_MANT_MASK) == EXPONENT_MASK;
+}
Used?
On 03/04/23 10:43, Wilco Dijkstra wrote: > Hi Adhemerval, > > LGTM - one minor nit about the is_inf functions, are they actually needed? > I'm happy for this to go in either way. > > Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com> > > Cheers, > Wilco > > diff --git a/sysdeps/ieee754/flt-32/math_config.h b/sysdeps/ieee754/flt-32/math_config.h > index 829430ea28..f97cd39df1 100644 > --- a/sysdeps/ieee754/flt-32/math_config.h > +++ b/sysdeps/ieee754/flt-32/math_config.h > @@ -125,6 +125,12 @@ is_nan (uint32_t x) > return (x & EXP_MANT_MASK) > EXPONENT_MASK; > } > > +static inline bool > +is_inf (uint32_t x) > +{ > + return (x & EXP_MANT_MASK) == EXPONENT_MASK; > +} > > Used? It is a left-over from previous version, I will remove it.
diff --git a/math/Versions b/math/Versions index fef7a08c3b..759b5fac7f 100644 --- a/math/Versions +++ b/math/Versions @@ -631,4 +631,8 @@ libm { # No SVID compatible error handling. hypotf; hypot; } + GLIBC_2.38 { + # No SVID compatible error handling. + fmod; fmodf; + } } diff --git a/math/w_fmod_compat.c b/math/w_fmod_compat.c index c6947f3042..aef98885a3 100644 --- a/math/w_fmod_compat.c +++ b/math/w_fmod_compat.c @@ -20,10 +20,10 @@ #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 diff --git a/math/w_fmodf_compat.c b/math/w_fmodf_compat.c index 5025b06684..55823961f4 100644 --- a/math/w_fmodf_compat.c +++ b/math/w_fmodf_compat.c @@ -20,10 +20,10 @@ #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 index 0000000000..5ac9995ffd --- /dev/null +++ b/sysdeps/i386/fpu/w_fmod_compat.c @@ -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 index 0000000000..cc417e07d3 --- /dev/null +++ b/sysdeps/i386/fpu/w_fmodf_compat.c @@ -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 diff --git a/sysdeps/ieee754/dbl-64/e_fmod.c b/sysdeps/ieee754/dbl-64/e_fmod.c index d20466fd5d..ff506c40b4 100644 --- a/sysdeps/ieee754/dbl-64/e_fmod.c +++ b/sysdeps/ieee754/dbl-64/e_fmod.c @@ -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" @@ -44,7 +46,7 @@ } */ double -__ieee754_fmod (double x, double y) +__fmod (double x, double y) { uint64_t hx = asuint64 (x); uint64_t hy = asuint64 (y); @@ -56,11 +58,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)) { @@ -142,4 +149,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 diff --git a/sysdeps/ieee754/dbl-64/math_config.h b/sysdeps/ieee754/dbl-64/math_config.h index 2049cea3f7..5173b99e4a 100644 --- a/sysdeps/ieee754/dbl-64/math_config.h +++ b/sysdeps/ieee754/dbl-64/math_config.h @@ -121,6 +121,12 @@ is_nan (uint64_t x) return (x & EXP_MANT_MASK) > EXPONENT_MASK; } +static inline bool +is_inf (uint64_t x) +{ + return (x & EXP_MANT_MASK) == EXPONENT_MASK; +} + static inline uint64_t get_mantissa (uint64_t x) { @@ -170,6 +176,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. */ diff --git a/sysdeps/ieee754/dbl-64/math_err.c b/sysdeps/ieee754/dbl-64/math_err.c index 5f5f965d3e..377a4caad2 100644 --- a/sysdeps/ieee754/dbl-64/math_err.c +++ b/sysdeps/ieee754/dbl-64/math_err.c @@ -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 index 0000000000..1cc8931700 --- /dev/null +++ b/sysdeps/ieee754/dbl-64/w_fmod.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/ieee754/flt-32/e_fmodf.c b/sysdeps/ieee754/flt-32/e_fmodf.c index 53db32cbe2..c0b5dccc23 100644 --- a/sysdeps/ieee754/flt-32/e_fmodf.c +++ b/sysdeps/ieee754/flt-32/e_fmodf.c @@ -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" @@ -44,7 +46,7 @@ } */ float -__ieee754_fmodf (float x, float y) +__fmodf (float x, float y) { uint32_t hx = asuint (x); uint32_t hy = asuint (y); @@ -59,8 +61,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)) { @@ -141,4 +148,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) diff --git a/sysdeps/ieee754/flt-32/math_config.h b/sysdeps/ieee754/flt-32/math_config.h index 829430ea28..f97cd39df1 100644 --- a/sysdeps/ieee754/flt-32/math_config.h +++ b/sysdeps/ieee754/flt-32/math_config.h @@ -125,6 +125,12 @@ is_nan (uint32_t x) return (x & EXP_MANT_MASK) > EXPONENT_MASK; } +static inline bool +is_inf (uint32_t x) +{ + return (x & EXP_MANT_MASK) == EXPONENT_MASK; +} + static inline uint32_t get_mantissa (uint32_t x) { @@ -158,6 +164,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 diff --git a/sysdeps/ieee754/flt-32/math_errf.c b/sysdeps/ieee754/flt-32/math_errf.c index 0389ce0a81..7245ab8d96 100644 --- a/sysdeps/ieee754/flt-32/math_errf.c +++ b/sysdeps/ieee754/flt-32/math_errf.c @@ -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 index 0000000000..1cc8931700 --- /dev/null +++ b/sysdeps/ieee754/flt-32/w_fmodf.c @@ -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 index 0000000000..527d4fbed2 --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_fmod_compat.c @@ -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 index 0000000000..5043586b91 --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c @@ -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 diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index c2e3c6453e..e3924c3499 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist index 4f85b6180f..066dd1a6b3 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist index 36190add84..4adfed072b 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist index 36190add84..4adfed072b 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist index b5dd4e851f..5c3f47caef 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist index 36190add84..4adfed072b 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist index 274ecff630..ea0dbd4b72 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist index 274ecff630..ea0dbd4b72 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist index 08b902118d..7c94a8db70 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist index 09bb3bd75b..0d08245adf 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist index 11abbb5668..a3b776fece 100644 --- a/sysdeps/unix/sysv/linux/nios2/libm.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist index 1688809c36..c696215739 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist index e880cebd78..a5ce9b1997 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist index 033385dfc1..8e41056d0d 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist index 7923d428bc..939f29a0f2 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist index 9a84163089..4baefb1217 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist index 174bde4fa0..debb767575 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist index 1e1324d667..fb94386fff 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist index 1e1324d667..fb94386fff 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist index 217e6eff7f..2fdb5ff145 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist index 6b53b0c59f..02d4c3a754 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist index dbefbc3a1a..cc8be5b510 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist index 8001d0f219..fda4df2653 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -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