diff --git a/sysdeps/m68k/m680x0/fpu/Versions b/sysdeps/m68k/m680x0/fpu/Versions
index ee1dc6b649..eb5eae05f8 100644
--- a/sysdeps/m68k/m680x0/fpu/Versions
+++ b/sysdeps/m68k/m680x0/fpu/Versions
@@ -1,6 +1,6 @@
libm {
GLIBC_2.43 {
# No SVID compatible error handling.
- fmodf;
+ fmodf; fmod;
}
}
diff --git a/sysdeps/m68k/m680x0/fpu/e_fmod.c b/sysdeps/m68k/m680x0/fpu/e_fmod.c
index 422ab72530..8a57349c13 100644
--- a/sysdeps/m68k/m680x0/fpu/e_fmod.c
+++ b/sysdeps/m68k/m680x0/fpu/e_fmod.c
@@ -15,24 +15,27 @@
License along with the GNU C Library. If not, see
. */
-#include
-#include
-#include "mathimpl.h"
+#include
#include
+#include
+#include "mathimpl.h"
+#include "math_config.h"
-#ifndef FUNC
-# define FUNC __ieee754_fmod
-# define FUNC_FINITE __fmod
-#endif
-#ifndef float_type
-# define float_type double
-#endif
-
-float_type
-FUNC (float_type x, float_type y)
+double
+__fmod (double x, double y)
{
- return __m81_u(FUNC)(x, 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 __m81_u(fmod)(x, y);
}
-#ifdef FUNC_FINITE
-libm_alias_finite (FUNC, FUNC_FINITE)
-#endif
+strong_alias (__fmod, __ieee754_fmod)
+libm_alias_finite (__ieee754_fmod, __fmod)
+versioned_symbol (libm, __fmod, fmod, GLIBC_2_43);
+libm_alias_double_other (__fmod, fmod)
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
index 9de0abca25..a9d615da74 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
@@ -986,4 +986,5 @@ GLIBC_2.42 rsqrtf32 F
GLIBC_2.42 rsqrtf32x F
GLIBC_2.42 rsqrtf64 F
GLIBC_2.42 rsqrtl F
+GLIBC_2.43 fmod F
GLIBC_2.43 fmodf F