From 0b484d7b779f8a4158e165769759c358a29ced6a Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Wed, 8 Oct 2025 10:55:08 -0300 Subject: [PATCH] math: Remove the SVID error handling from log10f It improves latency for about 3-10% and throughput for about 5-10%. Tested on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Wilco Dijkstra --- math/Versions | 4 ++++ math/w_log10f_compat.c | 10 +++++++--- sysdeps/ieee754/flt-32/e_log10f.c | 11 ++++++++++- sysdeps/ieee754/flt-32/w_log10f.c | 1 + sysdeps/m68k/m680x0/fpu/w_log10f_compat.c | 8 ++++++++ sysdeps/mach/hurd/i386/libm.abilist | 1 + sysdeps/unix/sysv/linux/aarch64/libm.abilist | 1 + sysdeps/unix/sysv/linux/alpha/libm.abilist | 1 + sysdeps/unix/sysv/linux/arm/be/libm.abilist | 1 + sysdeps/unix/sysv/linux/arm/le/libm.abilist | 1 + sysdeps/unix/sysv/linux/hppa/libm.abilist | 1 + sysdeps/unix/sysv/linux/i386/libm.abilist | 1 + sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist | 1 + sysdeps/unix/sysv/linux/microblaze/be/libm.abilist | 1 + sysdeps/unix/sysv/linux/microblaze/le/libm.abilist | 1 + sysdeps/unix/sysv/linux/mips/mips32/libm.abilist | 1 + sysdeps/unix/sysv/linux/mips/mips64/libm.abilist | 1 + .../sysv/linux/powerpc/powerpc32/fpu/libm.abilist | 1 + .../sysv/linux/powerpc/powerpc32/nofpu/libm.abilist | 1 + .../unix/sysv/linux/powerpc/powerpc64/be/libm.abilist | 1 + .../unix/sysv/linux/powerpc/powerpc64/le/libm.abilist | 1 + sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist | 1 + sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist | 1 + sysdeps/unix/sysv/linux/sh/be/libm.abilist | 1 + sysdeps/unix/sysv/linux/sh/le/libm.abilist | 1 + sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist | 1 + sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist | 1 + sysdeps/unix/sysv/linux/x86_64/64/libm.abilist | 1 + sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist | 1 + 29 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 sysdeps/ieee754/flt-32/w_log10f.c create mode 100644 sysdeps/m68k/m680x0/fpu/w_log10f_compat.c diff --git a/math/Versions b/math/Versions index 666d6b34273..c772cb61c6d 100644 --- a/math/Versions +++ b/math/Versions @@ -686,4 +686,8 @@ libm { rootnf64x; rootnf128; rsqrtf64x; rsqrtf128; } + GLIBC_2.43 { + # No SVID compatible error handling. + log10f; + } } diff --git a/math/w_log10f_compat.c b/math/w_log10f_compat.c index a1f23275200..fd239c518b4 100644 --- a/math/w_log10f_compat.c +++ b/math/w_log10f_compat.c @@ -22,10 +22,10 @@ #include -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_43) /* wrapper log10f(x) */ float -__log10f (float x) +__log10_compatf (float x) { if (__builtin_expect (islessequal (x, 0.0f), 0) && _LIB_VERSION != _IEEE_) { @@ -43,5 +43,9 @@ __log10f (float x) return __ieee754_log10f (x); } -libm_alias_float (__log10, log10) +# ifdef NO_COMPAT_NEEDED +libm_alias_float (__log10_compat, log10) +# else +compat_symbol (libm, __log10_compatf, log10f, GLIBC_2_0); +# endif #endif diff --git a/sysdeps/ieee754/flt-32/e_log10f.c b/sysdeps/ieee754/flt-32/e_log10f.c index 03d9e281f37..e9210de136f 100644 --- a/sysdeps/ieee754/flt-32/e_log10f.c +++ b/sysdeps/ieee754/flt-32/e_log10f.c @@ -27,6 +27,8 @@ SOFTWARE. #include #include #include +#include +#include #include "math_config.h" static __attribute__ ((noinline)) float @@ -45,7 +47,7 @@ as_special (float x) } float -__ieee754_log10f (float x) +__log10f (float x) { static const double tr[] = { @@ -158,4 +160,11 @@ __ieee754_log10f (float x) } return ub; } +strong_alias (__log10f, __ieee754_log10f) +#if LIBM_SVID_COMPAT +versioned_symbol (libm, __log10f, log10f, GLIBC_2_43); +libm_alias_float_other (__log10, log10) +#else +libm_alias_float (__log10, log10) +#endif libm_alias_finite (__ieee754_log10f, __log10f) diff --git a/sysdeps/ieee754/flt-32/w_log10f.c b/sysdeps/ieee754/flt-32/w_log10f.c new file mode 100644 index 00000000000..1cc89317007 --- /dev/null +++ b/sysdeps/ieee754/flt-32/w_log10f.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/w_log10f_compat.c b/sysdeps/m68k/m680x0/fpu/w_log10f_compat.c new file mode 100644 index 00000000000..a0d6036fcca --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_log10f_compat.c @@ -0,0 +1,8 @@ +/* m68k provides an optimized __ieee754_log10f. */ +#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 3bf087812ca..76a98342b0e 100644 --- a/sysdeps/mach/hurd/i386/libm.abilist +++ b/sysdeps/mach/hurd/i386/libm.abilist @@ -1319,3 +1319,4 @@ GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl 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 bb8114bc4f8..d7610c9e56a 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1285,3 +1285,4 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl 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 4b383b15ed8..d6bdc438480 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1444,3 +1444,4 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl 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 63bad0996fd..0f0bee2b6ac 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist @@ -950,3 +950,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 63bad0996fd..0f0bee2b6ac 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist @@ -950,3 +950,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 d681d6ea1e8..7a4a015ddb7 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -950,3 +950,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 38e31ed1a76..e2504f87ff8 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1326,3 +1326,4 @@ GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl 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 63bad0996fd..0f0bee2b6ac 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -950,3 +950,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 5596e08e115..dc849ffbbf7 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist @@ -950,3 +950,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 5596e08e115..dc849ffbbf7 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist @@ -950,3 +950,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 cdcc4888a2c..60f91bc3040 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -950,3 +950,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 888164bdcbe..0506c9897e7 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1285,3 +1285,4 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl 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 7f584d3a4b8..0b85c489fad 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -1097,3 +1097,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 d1cd4b14f07..7664d14a622 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -1096,3 +1096,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 bfc53109aed..c2c6518062f 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist @@ -1090,3 +1090,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 dedfefc26b1..b1c1258220f 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist @@ -1474,3 +1474,4 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl 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 be2d1777a39..b1fd8e1e1c7 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1388,3 +1388,4 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl 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 7d7ba260dae..7de9d94ebbf 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1388,3 +1388,4 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl 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 5b0b0805a45..e6bf785864d 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist @@ -950,3 +950,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 5b0b0805a45..e6bf785864d 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist @@ -950,3 +950,4 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl 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 8107101297c..fb351cc3e06 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1395,3 +1395,4 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl 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 418ed9d461a..994a4908809 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1285,3 +1285,4 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl 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 671981482cb..49b0db95fdf 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1318,3 +1318,4 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl 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 1a1069a3e11..705c92e0948 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1318,3 +1318,4 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 log10f F -- 2.47.3