From ade9f30ce2736cfe29a77eef05951503f379a54a Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Wed, 8 Oct 2025 10:55:03 -0300 Subject: [PATCH] m68k: Remove the SVID error handling from fmodf The m68k provided an optimized version through __m81_u(fmodf) (mathimpl.h), and gcc does not implement it through a builtin (different than i386). Reviewed-by: Wilco Dijkstra --- sysdeps/m68k/m680x0/fpu/Versions | 6 +++ sysdeps/m68k/m680x0/fpu/e_fmodf.c | 48 ++++++++++++++++--- sysdeps/m68k/m680x0/fpu/e_remainderf.c | 3 +- sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c | 15 ------ .../unix/sysv/linux/m68k/m680x0/libm.abilist | 1 + 5 files changed, 51 insertions(+), 22 deletions(-) create mode 100644 sysdeps/m68k/m680x0/fpu/Versions delete mode 100644 sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c diff --git a/sysdeps/m68k/m680x0/fpu/Versions b/sysdeps/m68k/m680x0/fpu/Versions new file mode 100644 index 00000000000..ee1dc6b6493 --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/Versions @@ -0,0 +1,6 @@ +libm { + GLIBC_2.43 { + # No SVID compatible error handling. + fmodf; + } +} diff --git a/sysdeps/m68k/m680x0/fpu/e_fmodf.c b/sysdeps/m68k/m680x0/fpu/e_fmodf.c index ffae68f17f5..58e4a1e7702 100644 --- a/sysdeps/m68k/m680x0/fpu/e_fmodf.c +++ b/sysdeps/m68k/m680x0/fpu/e_fmodf.c @@ -1,6 +1,42 @@ -#ifndef FUNC -# define FUNC __ieee754_fmodf -# define FUNC_FINITE __fmodf -#endif -#define float_type float -#include +/* Floating-point remainder function. + Copyright (C) 2014-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 "mathimpl.h" +#include "sysdeps/ieee754/flt-32/math_config.h" + +float +__fmodf (float x, float y) +{ + uint32_t hx = asuint (x); + uint32_t hy = asuint (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_invalidf (x); + + return __m81_u(fmodf)(x, y); +} +strong_alias (__fmodf, __ieee754_fmodf) +versioned_symbol (libm, __fmodf, fmodf, GLIBC_2_43); +libm_alias_float_other (__fmod, fmod) +libm_alias_finite (__ieee754_fmodf, __fmodf) diff --git a/sysdeps/m68k/m680x0/fpu/e_remainderf.c b/sysdeps/m68k/m680x0/fpu/e_remainderf.c index 77f1f029b06..beacf65636f 100644 --- a/sysdeps/m68k/m680x0/fpu/e_remainderf.c +++ b/sysdeps/m68k/m680x0/fpu/e_remainderf.c @@ -1,3 +1,4 @@ #define FUNC __ieee754_remainderf #define FUNC_FINITE __remainderf -#include +#define float_type float +#include diff --git a/sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c b/sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c deleted file mode 100644 index 88db07f443b..00000000000 --- a/sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c +++ /dev/null @@ -1,15 +0,0 @@ -/* m68k provides an optimized __ieee752_fmodf. */ -#include -#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) -# include -libm_alias_float (__fmod_compat, fmod) -#else -#include -#include -#endif diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist index 9dba60bafb2..9de0abca257 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist @@ -986,3 +986,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 fmodf F -- 2.47.3