From: Adhemerval Zanella Date: Wed, 8 Oct 2025 13:55:14 +0000 (-0300) Subject: math: Remove the SVID error handling from atanhf X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=555c39c0fcefde195c06adb5145217947bf4ff03;p=thirdparty%2Fglibc.git math: Remove the SVID error handling from atanhf It improves latency for about 1-10% and throughput for about 5-10%. Tested on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Wilco Dijkstra --- diff --git a/math/Versions b/math/Versions index 91cd7ea08d..cf79a6107e 100644 --- a/math/Versions +++ b/math/Versions @@ -691,6 +691,7 @@ libm { acosf; acoshf; asinf; + atanhf; log10f; } } diff --git a/math/w_atanhf_compat.c b/math/w_atanhf_compat.c index b86686cd76..43232b2b3d 100644 --- a/math/w_atanhf_compat.c +++ b/math/w_atanhf_compat.c @@ -21,10 +21,10 @@ #include -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_43) /* wrapper atanhf */ float -__atanhf (float x) +__atanh_compatf (float x) { if (__builtin_expect (isgreaterequal (fabsf (x), 1.0f), 0) && _LIB_VERSION != _IEEE_) @@ -35,5 +35,10 @@ __atanhf (float x) return __ieee754_atanhf (x); } -libm_alias_float (__atanh, atanh) +# ifdef NO_COMPAT_NEEDED +strong_alias (__atanh_compatf, __atanhf) +libm_alias_float (__atanh_compat, atanh) +# else +compat_symbol (libm, __atanh_compatf, atanhf, GLIBC_2_0); +# endif #endif diff --git a/sysdeps/ieee754/flt-32/e_atanhf.c b/sysdeps/ieee754/flt-32/e_atanhf.c index eeb1aae6a1..64512e433e 100644 --- a/sysdeps/ieee754/flt-32/e_atanhf.c +++ b/sysdeps/ieee754/flt-32/e_atanhf.c @@ -27,6 +27,8 @@ SOFTWARE. #include #include #include +#include +#include #include "math_config.h" static __attribute__((noinline)) float @@ -42,7 +44,7 @@ as_special (float x) } float -__ieee754_atanhf (float x) +__atanhf (float x) { /* Calculate atanh(x) using the difference of two logarithms -- atanh(x) = (ln(1+x) - ln(1-x))/2 */ @@ -175,4 +177,11 @@ __ieee754_atanhf (float x) } return ub; } +strong_alias (__atanhf, __ieee754_atanhf) +#if LIBM_SVID_COMPAT +versioned_symbol (libm, __atanhf, atanhf, GLIBC_2_43); +libm_alias_float_other (__atanh, atanh) +#else +libm_alias_float (__atanh, atanh) +#endif libm_alias_finite (__ieee754_atanhf, __atanhf) diff --git a/sysdeps/ieee754/flt-32/w_atanhf.c b/sysdeps/ieee754/flt-32/w_atanhf.c new file mode 100644 index 0000000000..1cc8931700 --- /dev/null +++ b/sysdeps/ieee754/flt-32/w_atanhf.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/w_atanhf_compat.c b/sysdeps/m68k/m680x0/fpu/w_atanhf_compat.c new file mode 100644 index 0000000000..1ec8434684 --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_atanhf_compat.c @@ -0,0 +1,8 @@ +/* m68k provides an optimized __ieee754_atanhf. */ +#ifdef SHARED +# define NO_COMPAT_NEEDED 1 +# include +#else +# include +# include +#endif diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist index b0cc5c1488..ad305395a3 100644 --- a/sysdeps/mach/hurd/i386/libm.abilist +++ b/sysdeps/mach/hurd/i386/libm.abilist @@ -1320,6 +1320,7 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 fmod F GLIBC_2.43 fmodf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index 8466365fa9..fb73268504 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1288,4 +1288,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist index 1a93e45c87..7331348a32 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1447,4 +1447,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist index c0d276d840..ec3beddb53 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist @@ -953,4 +953,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist index c0d276d840..ec3beddb53 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist @@ -953,4 +953,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist index 68c063a875..6e38644092 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -953,4 +953,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist index 244bbfbfec..c598c3e69f 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1327,6 +1327,7 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 fmod F GLIBC_2.43 fmodf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist index c0d276d840..ec3beddb53 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -953,4 +953,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist index 5b8cc9db2c..379c2554d8 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist @@ -953,4 +953,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist index 5b8cc9db2c..379c2554d8 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist @@ -953,4 +953,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist index 931d594f43..995dc278dc 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -953,4 +953,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist index 89f5b72f6b..513b48b24d 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1288,4 +1288,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist index 42afc1ee93..df46c0fb93 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -1100,4 +1100,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist index b4aa786f50..3505854179 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -1099,4 +1099,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist index a57829eaa6..82ff0b7efd 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist @@ -1093,4 +1093,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist index 9e918c0921..653c183b93 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist @@ -1477,4 +1477,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist index 8be1d25e14..f938cb79d7 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1391,4 +1391,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist index 5444c3787e..9ed6955906 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1391,4 +1391,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist index 8d131dba21..69a11de49f 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist @@ -953,4 +953,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist index 8d131dba21..69a11de49f 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist @@ -953,4 +953,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist index d336392bde..f252ef112f 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1398,4 +1398,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist index 646bb43d42..751bbe0243 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1288,4 +1288,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist index 1edc594570..d627b8a073 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1321,4 +1321,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist index 7498f8c29e..1083ad7b9d 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1321,4 +1321,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F +GLIBC_2.43 atanhf F GLIBC_2.43 log10f F