From: Adhemerval Zanella Date: Fri, 31 Oct 2025 16:08:54 +0000 (-0300) Subject: math: Remove the SVID error handling from sinhf X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f27a146409e633c73c8212ed8e38114102d9888c;p=thirdparty%2Fglibc.git math: Remove the SVID error handling from sinhf 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 3b16796453..f81ff75a00 100644 --- a/math/Versions +++ b/math/Versions @@ -699,6 +699,7 @@ libm { log10f; remainder; remainderf; + sinhf; y0f; y1f; ynf; diff --git a/math/w_sinhf_compat.c b/math/w_sinhf_compat.c index e8de6675af..77c7cefb55 100644 --- a/math/w_sinhf_compat.c +++ b/math/w_sinhf_compat.c @@ -21,9 +21,9 @@ #include #include -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_43) float -__sinhf (float x) +__sinh_compatf (float x) { float z = __ieee754_sinhf (x); if (__builtin_expect (!isfinite (z), 0) && isfinite (x) @@ -32,5 +32,10 @@ __sinhf (float x) return z; } -libm_alias_float (__sinh, sinh) +# ifdef NO_COMPAT_NEEDED +strong_alias (__sinh_compatf, __sinhf) +libm_alias_float (__sinh_compat, sinh) +# else +compat_symbol (libm, __sinh_compatf, sinhf, GLIBC_2_0); +# endif #endif diff --git a/sysdeps/ieee754/flt-32/e_sinhf.c b/sysdeps/ieee754/flt-32/e_sinhf.c index 5e812c35af..687f75332e 100644 --- a/sysdeps/ieee754/flt-32/e_sinhf.c +++ b/sysdeps/ieee754/flt-32/e_sinhf.c @@ -24,15 +24,18 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#include #include #include #include +#include +#include #include #include "math_config.h" #include "e_sincoshf_data.h" float -__ieee754_sinhf (float x) +__sinhf (float x) { static const struct { @@ -44,15 +47,9 @@ __ieee754_sinhf (float x) uint32_t ux = asuint (x) << 1; if (__glibc_unlikely (ux > 0x8565a9f8u)) { /* |x| >~ 89.4 */ - float sgn = copysignf (2.0f, x); if (ux >= 0xff000000u) - { - if (ux << 8) - return x + x; /* nan */ - return copysignf (INFINITY, x); /* +-inf */ - } - float r = math_narrow_eval (sgn * 0x1.fffffep127f); - return r; + return x + x;; + return __math_oflowf (x < 0); } if (__glibc_unlikely (ux < 0x7c000000u)) { /* |x| < 0.125 */ @@ -105,4 +102,11 @@ __ieee754_sinhf (float x) } return ub; } +strong_alias (__sinhf, __ieee754_sinhf) +#if LIBM_SVID_COMPAT +versioned_symbol (libm, __sinhf, sinhf, GLIBC_2_43); +libm_alias_float_other (__sinh, sinh) +#else +libm_alias_float (__sinh, sinh) +#endif libm_alias_finite (__ieee754_sinhf, __sinhf) diff --git a/sysdeps/ieee754/flt-32/w_sinhf.c b/sysdeps/ieee754/flt-32/w_sinhf.c new file mode 100644 index 0000000000..1cc8931700 --- /dev/null +++ b/sysdeps/ieee754/flt-32/w_sinhf.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/w_sinhf_compat.c b/sysdeps/m68k/m680x0/fpu/w_sinhf_compat.c new file mode 100644 index 0000000000..e8e4bc9326 --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_sinhf_compat.c @@ -0,0 +1,8 @@ +/* m68k provides an optimized __ieee754_sinhhf. */ +#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 1dc8f572d0..b9274b47c4 100644 --- a/sysdeps/mach/hurd/i386/libm.abilist +++ b/sysdeps/mach/hurd/i386/libm.abilist @@ -1330,6 +1330,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index d799f204fa..79a327aae2 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1296,6 +1296,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist index 0d608533c9..63bba07bbf 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1455,6 +1455,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist index d60a11026c..d62946108a 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist @@ -961,6 +961,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist index d60a11026c..d62946108a 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist @@ -961,6 +961,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist index 60ce950d8a..e8083d0af5 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -961,6 +961,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist index b4164516f6..67a4cc555e 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1337,6 +1337,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist index d60a11026c..d62946108a 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -961,6 +961,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist index e24b8ef83a..624eff1caf 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist @@ -961,6 +961,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist index e24b8ef83a..624eff1caf 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist @@ -961,6 +961,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist index 42afecec7c..8502e66e3e 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -961,6 +961,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist index 2850dacf7f..fc20a8e42e 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1296,6 +1296,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist index 71f1e74f75..f13ccd8a69 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -1108,6 +1108,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist index 2cab971c10..254e25106a 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -1107,6 +1107,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist index 6574ba9908..8a8992d324 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist @@ -1101,6 +1101,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist index e4888b6cf2..cb46900187 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist @@ -1485,6 +1485,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist index ccc0de5b98..721e0c4bc5 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1399,6 +1399,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist index 871c473efa..fedb41284a 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1399,6 +1399,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist index 7a0edfe5c3..312075b479 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist @@ -961,6 +961,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist index 7a0edfe5c3..312075b479 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist @@ -961,6 +961,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist index acfe74ef6f..192349cbf3 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1406,6 +1406,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist index dc28560fdc..03f14432d6 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1296,6 +1296,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist index 3690000175..8e08ac5e18 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1329,6 +1329,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist index c41a781b5c..be5cd7c8a1 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1329,6 +1329,7 @@ GLIBC_2.43 jnf F GLIBC_2.43 log10f F GLIBC_2.43 remainder F GLIBC_2.43 remainderf F +GLIBC_2.43 sinhf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F GLIBC_2.43 ynf F