From: Adhemerval Zanella Date: Wed, 8 Oct 2025 13:55:15 +0000 (-0300) Subject: math: Remove the SVID error handling from coshf X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=03eeeba705cc714e77b0b2710fea2e956ff34f24;p=thirdparty%2Fglibc.git 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 --- diff --git a/math/Versions b/math/Versions index cf79a6107e..642bb9242e 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 ce5e196c07..bef703becd 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 c6c0392dab..eae159ddf3 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 0000000000..1cc8931700 --- /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 0000000000..14444a9f0c --- /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 ad305395a3..83f26be868 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 fb73268504..70849920ae 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 7331348a32..b247478dfc 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 ec3beddb53..b643a93fa6 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 ec3beddb53..b643a93fa6 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 6e38644092..8a76be6b57 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 c598c3e69f..b4f7e7055e 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 ec3beddb53..b643a93fa6 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 379c2554d8..12e5a9c34f 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 379c2554d8..12e5a9c34f 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 995dc278dc..cfa5b5eed0 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 513b48b24d..ec96f01fea 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 df46c0fb93..73d406afcb 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 3505854179..89797c7388 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 82ff0b7efd..8e807f2603 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 653c183b93..ecc90e4f71 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 f938cb79d7..7b12a6acb2 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 9ed6955906..ecaaf1068a 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 69a11de49f..7500060e07 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 69a11de49f..7500060e07 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 f252ef112f..441120c8b6 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 751bbe0243..d27f2727cc 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 d627b8a073..29224112da 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 1083ad7b9d..1691279340 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