From 03eeeba705cc714e77b0b2710fea2e956ff34f24 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Wed, 8 Oct 2025 10:55:15 -0300 Subject: [PATCH] math: Remove the SVID error handling from coshf It improves latency for about 3-10% and throughput for about 5-15%. Tested on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Wilco Dijkstra --- math/Versions | 1 + math/w_coshf_compat.c | 12 +++++++++--- sysdeps/ieee754/flt-32/e_coshf.c | 11 ++++++++++- sysdeps/ieee754/flt-32/w_coshf.c | 1 + sysdeps/m68k/m680x0/fpu/w_coshf_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 + .../sysv/linux/powerpc/powerpc64/be/libm.abilist | 1 + .../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, 53 insertions(+), 4 deletions(-) create mode 100644 sysdeps/ieee754/flt-32/w_coshf.c create mode 100644 sysdeps/m68k/m680x0/fpu/w_coshf_compat.c diff --git a/math/Versions b/math/Versions index cf79a6107eb..642bb9242e2 100644 --- a/math/Versions +++ b/math/Versions @@ -692,6 +692,7 @@ libm { acoshf; asinf; atanhf; + coshf; log10f; } } diff --git a/math/w_coshf_compat.c b/math/w_coshf_compat.c index ce5e196c078..bef703becd8 100644 --- a/math/w_coshf_compat.c +++ b/math/w_coshf_compat.c @@ -20,10 +20,11 @@ #include #include #include +#include -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_43) float -__coshf (float x) +__cosh_compatf (float x) { float z = __ieee754_coshf (x); if (__builtin_expect (!isfinite (z), 0) && isfinite (x) @@ -32,5 +33,10 @@ __coshf (float x) return z; } -libm_alias_float (__cosh, cosh) +# ifdef NO_COMPAT_NEEDED +strong_alias (__cosh_compatf, __coshf) +libm_alias_float (__cosh_compat, cosh) +# else +compat_symbol (libm, __cosh_compatf, coshf, GLIBC_2_0); +# endif #endif diff --git a/sysdeps/ieee754/flt-32/e_coshf.c b/sysdeps/ieee754/flt-32/e_coshf.c index c6c0392dab0..eae159ddf34 100644 --- a/sysdeps/ieee754/flt-32/e_coshf.c +++ b/sysdeps/ieee754/flt-32/e_coshf.c @@ -27,11 +27,13 @@ SOFTWARE. #include #include #include +#include +#include #include "math_config.h" #include "e_sincoshf_data.h" float -__ieee754_coshf (float x) +__coshf (float x) { const double iln2 = 0x1.71547652b82fep+5; double z = x; @@ -92,4 +94,11 @@ __ieee754_coshf (float x) } return ub; } +strong_alias (__coshf, __ieee754_coshf) +#if LIBM_SVID_COMPAT +versioned_symbol (libm, __coshf, coshf, GLIBC_2_43); +libm_alias_float_other (__cosh, cosh) +#else +libm_alias_float (__cosh, cosh) +#endif libm_alias_finite (__ieee754_coshf, __coshf) diff --git a/sysdeps/ieee754/flt-32/w_coshf.c b/sysdeps/ieee754/flt-32/w_coshf.c new file mode 100644 index 00000000000..1cc89317007 --- /dev/null +++ b/sysdeps/ieee754/flt-32/w_coshf.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/w_coshf_compat.c b/sysdeps/m68k/m680x0/fpu/w_coshf_compat.c new file mode 100644 index 00000000000..14444a9f0cb --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_coshf_compat.c @@ -0,0 +1,8 @@ +/* m68k provides an optimized __ieee754_coshhf. */ +#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 ad305395a3f..83f26be8681 100644 --- a/sysdeps/mach/hurd/i386/libm.abilist +++ b/sysdeps/mach/hurd/i386/libm.abilist @@ -1321,6 +1321,7 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 fb73268504f..70849920aed 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1289,4 +1289,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 7331348a32f..b247478dfc2 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1448,4 +1448,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 ec3beddb532..b643a93fa66 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist @@ -954,4 +954,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 ec3beddb532..b643a93fa66 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist @@ -954,4 +954,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 6e386440924..8a76be6b578 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -954,4 +954,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 c598c3e69ff..b4f7e7055e5 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1328,6 +1328,7 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 ec3beddb532..b643a93fa66 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -954,4 +954,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 379c2554d84..12e5a9c34f6 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist @@ -954,4 +954,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 379c2554d84..12e5a9c34f6 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist @@ -954,4 +954,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 995dc278dca..cfa5b5eed0c 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -954,4 +954,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 513b48b24d4..ec96f01fea0 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1289,4 +1289,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 df46c0fb93e..73d406afcbf 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -1101,4 +1101,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 35058541790..89797c73883 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -1100,4 +1100,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 82ff0b7efde..8e807f26033 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist @@ -1094,4 +1094,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 653c183b93d..ecc90e4f71e 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist @@ -1478,4 +1478,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 f938cb79d79..7b12a6acb2c 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1392,4 +1392,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 9ed6955906e..ecaaf1068a2 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1392,4 +1392,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 69a11de49f2..7500060e071 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist @@ -954,4 +954,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 69a11de49f2..7500060e071 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist @@ -954,4 +954,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 f252ef112fb..441120c8b65 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1399,4 +1399,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 751bbe02438..d27f2727cc2 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1289,4 +1289,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 d627b8a0737..29224112daf 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1322,4 +1322,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf 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 1083ad7b9df..16912793408 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1322,4 +1322,5 @@ GLIBC_2.43 acosf F GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F +GLIBC_2.43 coshf F GLIBC_2.43 log10f F -- 2.47.3