[PATCH v3 10/10] math: Remove the error handling wrapper from sinhf
Adhemerval Zanella
adhemerval.zanella@linaro.org
Mon Sep 22 20:18:15 GMT 2025
It improves latency for about 3-10% and throughput for about 5-15%.
---
math/Versions | 1 +
math/w_sinhf.c | 8 ++++++++
math/w_sinhf_compat.c | 11 ++++++++---
sysdeps/ieee754/flt-32/e_sinhf.c | 13 ++++++++++++-
sysdeps/ieee754/flt-32/w_sinhf.c | 1 +
sysdeps/m68k/m680x0/fpu/w_sinhf_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 +
30 files changed, 62 insertions(+), 4 deletions(-)
create mode 100644 math/w_sinhf.c
create mode 100644 sysdeps/ieee754/flt-32/w_sinhf.c
create mode 100644 sysdeps/m68k/m680x0/fpu/w_sinhf_compat.c
diff --git a/math/Versions b/math/Versions
index d4291edc56..15543bd6bb 100644
--- a/math/Versions
+++ b/math/Versions
@@ -696,5 +696,6 @@ libm {
atan2f;
atanhf;
coshf;
+ sinhf;
}
}
diff --git a/math/w_sinhf.c b/math/w_sinhf.c
new file mode 100644
index 0000000000..d2970fa6c3
--- /dev/null
+++ b/math/w_sinhf.c
@@ -0,0 +1,8 @@
+#include <math-type-macros-float.h>
+#undef __USE_WRAPPER_TEMPLATE
+#define __USE_WRAPPER_TEMPLATE 1
+#undef declare_mgen_alias
+#define declare_mgen_alias(a, b)
+#include <w_sinh_template.c>
+versioned_symbol (libm, __sinhf, sinhf, GLIBC_2_43);
+libm_alias_float_other (__sinhf, sinhf)
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 <math-svid-compat.h>
#include <libm-alias-float.h>
-#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 6c8c1db404..fdad584372 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 <errno.h>
#include <math.h>
#include <stdint.h>
#include <libm-alias-finite.h>
+#include <libm-alias-float.h>
+#include <math-svid-compat.h>
#include <math-narrow-eval.h>
#include "math_config.h"
#include "e_sincoshf_data.h"
float
-__ieee754_sinhf (float x)
+__sinhf (float x)
{
static const struct
{
@@ -52,6 +55,7 @@ __ieee754_sinhf (float x)
return copysignf (INFINITY, x); /* +-inf */
}
float r = math_narrow_eval (sgn * 0x1.fffffep127f);
+ __set_errno (ERANGE);
return r;
}
if (__glibc_unlikely (ux < 0x7c000000u))
@@ -105,4 +109,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 <math/w_sinhf_compat.c>
+#else
+# include <math-type-macros-float.h>
+# include <w_sinh_template.c>
+#endif
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index a8781e3a55..5f2e2dc39d 100644
--- a/sysdeps/mach/hurd/i386/libm.abilist
+++ b/sysdeps/mach/hurd/i386/libm.abilist
@@ -1326,3 +1326,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index 9fae1258fd..6909f62142 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -1294,3 +1294,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index e13efc9640..74b896a049 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -1453,3 +1453,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
index 079e9f4833..06f01a7283 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
@@ -959,3 +959,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
index 079e9f4833..06f01a7283 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
@@ -959,3 +959,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist
index 14ccac166a..aa28f7b18c 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -959,3 +959,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
index 58864c81fd..ec2696e9e8 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -1333,3 +1333,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index 079e9f4833..06f01a7283 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -959,3 +959,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
index 02c74ec5e2..f5928289bf 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
@@ -959,3 +959,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
index 02c74ec5e2..f5928289bf 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
@@ -959,3 +959,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index 2f31b08827..b05d31a0b4 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -959,3 +959,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
index 3633e7a66e..64e72ca6f8 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -1294,3 +1294,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index 3337a59797..0dce08aedb 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -1106,3 +1106,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
index 72b38a555d..d5b996e566 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -1105,3 +1105,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
index 104c930092..db21d0e9bb 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
@@ -1099,3 +1099,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
index 5b30370953..d8beff3a7b 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
@@ -1483,3 +1483,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index fa9b08fa66..c6b6e0f611 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -1397,3 +1397,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
index 30af7f8d77..f989ac50f0 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -1397,3 +1397,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
index afaf1806ba..18c35ea5a7 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
@@ -959,3 +959,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
index afaf1806ba..18c35ea5a7 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
@@ -959,3 +959,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
index 7628629dcf..760955a08a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -1404,3 +1404,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
index 606c09fb32..fab255b75c 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -1294,3 +1294,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index 04b8058247..126489eb1e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -1327,3 +1327,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index b0b5759d28..529b07003b 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -1327,3 +1327,4 @@ GLIBC_2.43 coshf F
GLIBC_2.43 lgammaf F
GLIBC_2.43 lgammaf_r F
GLIBC_2.43 log10f F
+GLIBC_2.43 sinhf F
--
2.43.0
More information about the Libc-alpha
mailing list