From 9f8dea5b5dd0585fd2032fa8781f6d6505e23dc1 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Wed, 8 Oct 2025 10:55:10 -0300 Subject: [PATCH] math: Remove the SVID error handling from acosf It improves latency for about 2-10% and throughput for about 5-10%. Tested on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Wilco Dijkstra --- math/Versions | 1 + math/w_acosf_compat.c | 10 +++++++--- sysdeps/ieee754/flt-32/e_acosf.c | 11 ++++++++++- sysdeps/ieee754/flt-32/w_acosf.c | 1 + sysdeps/m68k/m680x0/fpu/w_acosf_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, 51 insertions(+), 4 deletions(-) create mode 100644 sysdeps/ieee754/flt-32/w_acosf.c create mode 100644 sysdeps/m68k/m680x0/fpu/w_acosf_compat.c diff --git a/math/Versions b/math/Versions index c772cb61c6d..4d7cbeb21d6 100644 --- a/math/Versions +++ b/math/Versions @@ -688,6 +688,7 @@ libm { } GLIBC_2.43 { # No SVID compatible error handling. + acosf; log10f; } } diff --git a/math/w_acosf_compat.c b/math/w_acosf_compat.c index e7037989f02..c97087f83a4 100644 --- a/math/w_acosf_compat.c +++ b/math/w_acosf_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 acosf */ float -__acosf (float x) +__acos_compatf (float x) { if (__builtin_expect (isgreater (fabsf (x), 1.0f), 0) && _LIB_VERSION != _IEEE_) @@ -37,5 +37,9 @@ __acosf (float x) return __ieee754_acosf (x); } -libm_alias_float (__acos, acos) +# ifdef NO_COMPAT_NEEDED +libm_alias_float (__acos_compat, acos) +# else +compat_symbol (libm, __acos_compatf, acosf, GLIBC_2_0); +# endif #endif diff --git a/sysdeps/ieee754/flt-32/e_acosf.c b/sysdeps/ieee754/flt-32/e_acosf.c index 929ad38342f..79deecaa545 100644 --- a/sysdeps/ieee754/flt-32/e_acosf.c +++ b/sysdeps/ieee754/flt-32/e_acosf.c @@ -29,6 +29,8 @@ SOFTWARE. #include #include #include +#include +#include #include "math_config.h" #include "s_asincosf_data.h" @@ -66,7 +68,7 @@ poly12 (double z, const double *c) } float -__ieee754_acosf (float x) +__acosf (float x) { double pi2 = 0x1.921fb54442d18p+0; static const double o[] = { 0, 0x1.921fb54442d18p+1 }; @@ -127,4 +129,11 @@ __ieee754_acosf (float x) } return r; } +strong_alias (__acosf, __ieee754_acosf) +#if LIBM_SVID_COMPAT +versioned_symbol (libm, __acosf, acosf, GLIBC_2_43); +libm_alias_float_other (__acos, acos) +#else +libm_alias_float (__acos, acos) +#endif libm_alias_finite (__ieee754_acosf, __acosf) diff --git a/sysdeps/ieee754/flt-32/w_acosf.c b/sysdeps/ieee754/flt-32/w_acosf.c new file mode 100644 index 00000000000..1cc89317007 --- /dev/null +++ b/sysdeps/ieee754/flt-32/w_acosf.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/w_acosf_compat.c b/sysdeps/m68k/m680x0/fpu/w_acosf_compat.c new file mode 100644 index 00000000000..c49aeb2e066 --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_acosf_compat.c @@ -0,0 +1,8 @@ +/* m68k provides an optimized __ieee754_acosf. */ +#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 76a98342b0e..afb9b2ecdda 100644 --- a/sysdeps/mach/hurd/i386/libm.abilist +++ b/sysdeps/mach/hurd/i386/libm.abilist @@ -1317,6 +1317,7 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 d7610c9e56a..4904b7d4945 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1285,4 +1285,5 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 d6bdc438480..5f128f10368 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1444,4 +1444,5 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 0f0bee2b6ac..42d4ed54eb0 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist @@ -950,4 +950,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 0f0bee2b6ac..42d4ed54eb0 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist @@ -950,4 +950,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 7a4a015ddb7..afc916819d0 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -950,4 +950,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 e2504f87ff8..f17996ae3c8 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1324,6 +1324,7 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 0f0bee2b6ac..42d4ed54eb0 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -950,4 +950,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 dc849ffbbf7..bd22f358e90 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist @@ -950,4 +950,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 dc849ffbbf7..bd22f358e90 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist @@ -950,4 +950,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 60f91bc3040..4ac2a9117ea 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -950,4 +950,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 0506c9897e7..1801a704e74 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1285,4 +1285,5 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 0b85c489fad..bea450ccba5 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -1097,4 +1097,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 7664d14a622..f50eec4f482 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -1096,4 +1096,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 c2c6518062f..9119258a439 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist @@ -1090,4 +1090,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 b1c1258220f..6bbb89d909f 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist @@ -1474,4 +1474,5 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 b1fd8e1e1c7..83e3bfe503c 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1388,4 +1388,5 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 7de9d94ebbf..24bf975c078 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1388,4 +1388,5 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 e6bf785864d..8e0223b1c01 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist @@ -950,4 +950,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 e6bf785864d..8e0223b1c01 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist @@ -950,4 +950,5 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 fb351cc3e06..69426df3bd1 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1395,4 +1395,5 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 994a4908809..294e8651142 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1285,4 +1285,5 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 49b0db95fdf..b939a89dc0d 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1318,4 +1318,5 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf 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 705c92e0948..8768a7bdaa0 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1318,4 +1318,5 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acosf F GLIBC_2.43 log10f F -- 2.47.3