From 8facb464b4eacc1c7a22e1244c1be367a45827e2 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Wed, 8 Oct 2025 10:55:12 -0300 Subject: [PATCH] math: Remove the SVID error handling from acoshf It improves latency for about 3-7% 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_acoshf_compat.c | 6 +++--- sysdeps/ieee754/flt-32/e_acoshf.c | 11 ++++++++++- sysdeps/ieee754/flt-32/w_acoshf.c | 1 + 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/m68k/m680x0/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, 40 insertions(+), 4 deletions(-) create mode 100644 sysdeps/ieee754/flt-32/w_acoshf.c diff --git a/math/Versions b/math/Versions index 31818c273ec..91cd7ea08d9 100644 --- a/math/Versions +++ b/math/Versions @@ -689,6 +689,7 @@ libm { GLIBC_2.43 { # No SVID compatible error handling. acosf; + acoshf; asinf; log10f; } diff --git a/math/w_acoshf_compat.c b/math/w_acoshf_compat.c index aa5da5c436b..104ce08aaf8 100644 --- a/math/w_acoshf_compat.c +++ b/math/w_acoshf_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 acoshf */ float -__acoshf (float x) +__acosh_compatf (float x) { if (__builtin_expect (isless (x, 1.0f), 0) && _LIB_VERSION != _IEEE_) /* acosh(x<1) */ @@ -32,5 +32,5 @@ __acoshf (float x) return __ieee754_acoshf (x); } -libm_alias_float (__acosh, acosh) +compat_symbol (libm, __acosh_compatf, acoshf, GLIBC_2_0); #endif diff --git a/sysdeps/ieee754/flt-32/e_acoshf.c b/sysdeps/ieee754/flt-32/e_acoshf.c index 6cbc4f584b2..77bc15cccc0 100644 --- a/sysdeps/ieee754/flt-32/e_acoshf.c +++ b/sysdeps/ieee754/flt-32/e_acoshf.c @@ -27,6 +27,8 @@ SOFTWARE. #include #include #include +#include +#include #include "math_config.h" #include "s_asincoshf_data.h" @@ -44,7 +46,7 @@ as_special (float x) } float -__ieee754_acoshf (float x) +__acoshf (float x) { uint32_t t = asuint (x); if (__glibc_unlikely (t <= 0x3f800000u)) @@ -105,4 +107,11 @@ __ieee754_acoshf (float x) else return as_special (x); } +strong_alias (__acoshf, __ieee754_acoshf) +#if LIBM_SVID_COMPAT +versioned_symbol (libm, __acoshf, acoshf, GLIBC_2_43); +libm_alias_float_other (__acosh, acosh) +#else +libm_alias_float (__acosh, acosh) +#endif libm_alias_finite (__ieee754_acoshf, __acoshf) diff --git a/sysdeps/ieee754/flt-32/w_acoshf.c b/sysdeps/ieee754/flt-32/w_acoshf.c new file mode 100644 index 00000000000..1cc89317007 --- /dev/null +++ b/sysdeps/ieee754/flt-32/w_acoshf.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist index 3ff2c0dad8e..b0cc5c14888 100644 --- a/sysdeps/mach/hurd/i386/libm.abilist +++ b/sysdeps/mach/hurd/i386/libm.abilist @@ -1318,6 +1318,7 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 fmod F GLIBC_2.43 fmodf F diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index 47aab9a6390..8466365fa94 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1286,5 +1286,6 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 c87a431e0eb..1a93e45c87c 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1445,5 +1445,6 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 2f3a625a238..c0d276d840d 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist @@ -951,5 +951,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 2f3a625a238..c0d276d840d 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist @@ -951,5 +951,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 ac4865c45db..68c063a8755 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -951,5 +951,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 5991eed44a9..244bbfbfecd 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1325,6 +1325,7 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 fmod F GLIBC_2.43 fmodf F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist index 2f3a625a238..c0d276d840d 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -951,5 +951,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 log10f F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist index a9d615da745..e6ad98649ce 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist @@ -986,5 +986,6 @@ GLIBC_2.42 rsqrtf32 F GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F +GLIBC_2.43 acoshf F GLIBC_2.43 fmod F GLIBC_2.43 fmodf F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist index 10f90a832a4..5b8cc9db2c4 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist @@ -951,5 +951,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 10f90a832a4..5b8cc9db2c4 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist @@ -951,5 +951,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 958a34a9417..931d594f431 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -951,5 +951,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 3ac3157fb13..89f5b72f6b3 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1286,5 +1286,6 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 abad644ffb7..42afc1ee939 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -1098,5 +1098,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 0c242767a28..b4aa786f50f 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -1097,5 +1097,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 f34cc891a02..a57829eaa63 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist @@ -1091,5 +1091,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 93ccf0cd817..9e918c0921b 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist @@ -1475,5 +1475,6 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 df2a3a29d25..8be1d25e14c 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1389,5 +1389,6 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 629fcb7c904..5444c3787e0 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1389,5 +1389,6 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 61bfb5042be..8d131dba21d 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist @@ -951,5 +951,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 61bfb5042be..8d131dba21d 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist @@ -951,5 +951,6 @@ GLIBC_2.42 rsqrtf32x F GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 cbfd38ab70f..d336392bdec 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1396,5 +1396,6 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 a9e14706d09..646bb43d424 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1286,5 +1286,6 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 638dfac592c..1edc5945702 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1319,5 +1319,6 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf 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 89f9cc34de6..7498f8c29e7 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1319,5 +1319,6 @@ GLIBC_2.42 rsqrtf64 F GLIBC_2.42 rsqrtf64x F GLIBC_2.42 rsqrtl F GLIBC_2.43 acosf F +GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 log10f F -- 2.47.3