[PATCH v3 4/8] math: Remove the SVID error handling from sinh

Adhemerval Zanella adhemerval.zanella@linaro.org
Thu Mar 12 14:21:08 GMT 2026


It improves throughput from 8 to 18% and latency from 1 to 10%,
dependending of the ABI.

Reviewed-by: DJ Delorie <dj@redhat.com>
---
 NEWS                                          |  2 +-
 math/Versions                                 |  1 +
 math/auto-libm-test-in                        |  1 +
 math/auto-libm-test-out-sinh                  | 69 +++++++++++++++++++
 math/w_sinh_compat.c                          | 18 ++++-
 sysdeps/ieee754/dbl-64/e_sinh.c               | 16 +++--
 sysdeps/ieee754/dbl-64/math_config.h          |  3 +
 sysdeps/ieee754/dbl-64/math_err.c             |  2 +-
 sysdeps/ieee754/dbl-64/w_sinh.c               |  1 +
 sysdeps/m68k/m680x0/fpu/w_sinh_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 +
 .../sysv/linux/m68k/coldfire/libm.abilist     |  1 +
 .../sysv/linux/microblaze/be/libm.abilist     |  1 +
 .../sysv/linux/microblaze/le/libm.abilist     |  1 +
 .../unix/sysv/linux/mips/mips32/libm.abilist  |  1 +
 .../unix/sysv/linux/mips/mips64/libm.abilist  |  1 +
 .../linux/powerpc/powerpc32/fpu/libm.abilist  |  1 +
 .../powerpc/powerpc32/nofpu/libm.abilist      |  1 +
 .../linux/powerpc/powerpc64/be/libm.abilist   |  1 +
 .../linux/powerpc/powerpc64/le/libm.abilist   |  1 +
 .../unix/sysv/linux/s390/s390-32/libm.abilist |  1 +
 .../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 +
 .../sysv/linux/sparc/sparc32/libm.abilist     |  1 +
 .../sysv/linux/sparc/sparc64/libm.abilist     |  1 +
 .../unix/sysv/linux/x86_64/64/libm.abilist    |  1 +
 .../unix/sysv/linux/x86_64/x32/libm.abilist   |  1 +
 sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c     |  9 +--
 sysdeps/x86_64/fpu/multiarch/e_sinh.c         | 17 +++--
 36 files changed, 150 insertions(+), 21 deletions(-)
 create mode 100644 sysdeps/ieee754/dbl-64/w_sinh.c
 create mode 100644 sysdeps/m68k/m680x0/fpu/w_sinh_compat.c

diff --git a/NEWS b/NEWS
index 11d0a6888b..4b38bcf670 100644
--- a/NEWS
+++ b/NEWS
@@ -12,7 +12,7 @@ Major new features:
 * Additional optimized and correctly rounded mathematical functions have
   been imported from the CORE-MATH project, in particular cosh, and sinh.
 
-* The SVID handling for cosh was moved to compat symbols, allowing
+* The SVID handling for cosh and sinh were moved to compat symbols, allowing
   improvements in performance.
 
 Deprecated and removed features, and other changes affecting compatibility:
diff --git a/math/Versions b/math/Versions
index 6a4f279842..9512f97405 100644
--- a/math/Versions
+++ b/math/Versions
@@ -721,5 +721,6 @@ libm {
   GLIBC_2.44 {
     # No SVID compatible error handling.
     cosh;
+    sinh;
   }
 }
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index bf77634d3c..ba953bc879 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -9572,6 +9572,7 @@ sinh -0x5.ee9218p-4
 sinh -0x1.bcfc98p+0
 sinh -0x6.9bbb6df7c5d08p-4
 sinh 0x1.250bfep-11
+sinh 0x0.fffffffffffffp-1022
 # the next value generates larger error bounds on x86_64 (ldbl-96)
 sinh 0x2.c5d376167f4052f4p+12
 sinh -0x1.4a3f2b7dff682p+2
diff --git a/math/auto-libm-test-out-sinh b/math/auto-libm-test-out-sinh
index a9422375eb..f96252b91c 100644
--- a/math/auto-libm-test-out-sinh
+++ b/math/auto-libm-test-out-sinh
@@ -2140,6 +2140,75 @@ sinh 0x1.250bfep-11
 = sinh tonearest ibm128 0x2.4a17fcp-12 : 0x2.4a17fdfffffff87e8d322786edp-12 : inexact-ok
 = sinh towardzero ibm128 0x2.4a17fcp-12 : 0x2.4a17fdfffffff87e8d322786ecp-12 : inexact-ok
 = sinh upward ibm128 0x2.4a17fcp-12 : 0x2.4a17fdfffffff87e8d322786edp-12 : inexact-ok
+sinh 0x0.fffffffffffffp-1022
+= sinh downward binary32 0x8p-152 : 0x8p-152 : inexact-ok underflow errno-erange-ok
+= sinh tonearest binary32 0x8p-152 : 0x8p-152 : inexact-ok underflow errno-erange-ok
+= sinh towardzero binary32 0x8p-152 : 0x8p-152 : inexact-ok underflow errno-erange-ok
+= sinh upward binary32 0x8p-152 : 0x1p-148 : inexact-ok underflow errno-erange-ok
+= sinh downward binary64 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh tonearest binary64 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh towardzero binary64 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh upward binary64 0x8p-152 : 0x8.0000000000008p-152 : inexact-ok
+= sinh downward intel96 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh tonearest intel96 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh towardzero intel96 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh upward intel96 0x8p-152 : 0x8.000000000000001p-152 : inexact-ok
+= sinh downward m68k96 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh tonearest m68k96 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh towardzero m68k96 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh upward m68k96 0x8p-152 : 0x8.000000000000001p-152 : inexact-ok
+= sinh downward binary128 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh tonearest binary128 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh towardzero binary128 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh upward binary128 0x8p-152 : 0x8.0000000000000000000000000008p-152 : inexact-ok
+= sinh downward ibm128 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh tonearest ibm128 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh towardzero ibm128 0x8p-152 : 0x8p-152 : inexact-ok
+= sinh upward ibm128 0x8p-152 : 0x8.00000000000000000000000004p-152 : inexact-ok
+= sinh downward binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh tonearest binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh towardzero binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh upward binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh downward binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh tonearest binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh towardzero binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh upward binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh downward intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh tonearest intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh towardzero intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh upward intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh downward m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh tonearest m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh towardzero m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh upward m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh downward binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh tonearest binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh towardzero binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh upward binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh downward ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh tonearest ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh towardzero ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh upward ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= sinh downward binary64 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok underflow-ok errno-erange-ok
+= sinh tonearest binary64 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok underflow-ok errno-erange-ok
+= sinh towardzero binary64 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok underflow-ok errno-erange-ok
+= sinh upward binary64 0x3.ffffffffffffcp-1024 : 0x4p-1024 : inexact-ok underflow-ok errno-erange-ok
+= sinh downward intel96 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok
+= sinh tonearest intel96 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok
+= sinh towardzero intel96 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok
+= sinh upward intel96 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffc004p-1024 : inexact-ok
+= sinh downward m68k96 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok
+= sinh tonearest m68k96 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok
+= sinh towardzero m68k96 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok
+= sinh upward m68k96 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffc004p-1024 : inexact-ok
+= sinh downward binary128 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok
+= sinh tonearest binary128 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok
+= sinh towardzero binary128 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok
+= sinh upward binary128 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffc000000000000002p-1024 : inexact-ok
+= sinh downward ibm128 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok underflow errno-erange-ok
+= sinh tonearest ibm128 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok underflow errno-erange-ok
+= sinh towardzero ibm128 0x3.ffffffffffffcp-1024 : 0x3.ffffffffffffcp-1024 : inexact-ok underflow errno-erange-ok
+= sinh upward ibm128 0x3.ffffffffffffcp-1024 : 0x4p-1024 : inexact-ok underflow errno-erange-ok
 sinh 0x2.c5d376167f4052f4p+12
 = sinh downward binary32 0x2.c5d378p+12 : 0xf.fffffp+124 : inexact-ok overflow errno-erange-ok
 = sinh tonearest binary32 0x2.c5d378p+12 : plus_infty : inexact-ok overflow errno-erange
diff --git a/math/w_sinh_compat.c b/math/w_sinh_compat.c
index e964614f72..ff893ac9a9 100644
--- a/math/w_sinh_compat.c
+++ b/math/w_sinh_compat.c
@@ -19,9 +19,9 @@
 #include <math-svid-compat.h>
 #include <libm-alias-double.h>
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_44)
 double
-__sinh (double x)
+__sinh_compat (double x)
 {
 	double z = __ieee754_sinh (x);
 	if (__builtin_expect (!isfinite (z), 0) && isfinite (x)
@@ -30,5 +30,17 @@ __sinh (double x)
 
 	return z;
 }
-libm_alias_double (__sinh, sinh)
+# ifdef NO_COMPAT_NEEDED
+strong_alias (__sinh_compat, __sinh)
+libm_alias_double (__sinh_compat, sinh)
+# else
+compat_symbol (libm, __sinh_compat, sinh, GLIBC_2_0);
+#  ifdef NO_LONG_DOUBLE
+weak_alias (__sinh_compat, sinhl)
+#  endif
+#  ifdef LONG_DOUBLE_COMPAT
+LONG_DOUBLE_COMPAT_CHOOSE_libm_sinhl (
+  compat_symbol (libm, __sinh_compat, sinhl, FIRST_VERSION_libm_sinhl), );
+#  endif
+# endif
 #endif
diff --git a/sysdeps/ieee754/dbl-64/e_sinh.c b/sysdeps/ieee754/dbl-64/e_sinh.c
index 9d1592b873..f8cc7b88b8 100644
--- a/sysdeps/ieee754/dbl-64/e_sinh.c
+++ b/sysdeps/ieee754/dbl-64/e_sinh.c
@@ -27,8 +27,9 @@ SOFTWARE.
 #include <array_length.h>
 #include <math.h>
 #include <stdint.h>
-#include <errno.h>
 #include <libm-alias-finite.h>
+#include <libm-alias-double.h>
+#include <math-svid-compat.h>
 #include <ddcoremath.h>
 #include "math_config.h"
 
@@ -191,7 +192,7 @@ as_sinh_database (double x, double f)
 
 SECTION
 double
-__ieee754_sinh (double x)
+__sinh (double x)
 {
   /*
     The function sinh(x) is approximated by a minimax polynomial for
@@ -372,7 +373,7 @@ __ieee754_sinh (double x)
     { // |x| >~ 710.47586
       if (aix >= EXPONENT_MASK)
 	return x + x; // nan Inf
-      return copysign (0x1p1023, x) * 2.0;
+      return __math_oflow_value (copysign (0x1p1023, x) * 2.0);
     }
   // now 0.25 <= |x| < 710.47586
   // this branch was checked exhaustively with/without FMA
@@ -492,6 +493,13 @@ __ieee754_sinh (double x)
   return rh;
 }
 
-#ifndef __ieee754_sinh
+#ifndef __sinh
+strong_alias (__sinh, __ieee754_sinh)
+# if LIBM_SVID_COMPAT
+versioned_symbol (libm, __sinh, sinh, GLIBC_2_44);
+libm_alias_double_other (__sinh, sinh)
+# else
+libm_alias_double (__sinh, sinh)
+# endif
 libm_alias_finite (__ieee754_sinh, __sinh)
 #endif
diff --git a/sysdeps/ieee754/dbl-64/math_config.h b/sysdeps/ieee754/dbl-64/math_config.h
index dd0a4494e3..6a1f3062f8 100644
--- a/sysdeps/ieee754/dbl-64/math_config.h
+++ b/sysdeps/ieee754/dbl-64/math_config.h
@@ -185,6 +185,9 @@ make_double (uint64_t x, int64_t ep, uint64_t s)
 
 /* The result overflows.  */
 attribute_hidden double __math_oflow (uint32_t);
+/* The result overflows, raise the exception, set errno, and returns the
+   value.  */
+attribute_hidden double __math_oflow_value (double);
 /* The result underflows to 0 in nearest rounding mode.  */
 attribute_hidden double __math_uflow (uint32_t);
 /* The result underflows to 0 in some directed rounding mode only.  */
diff --git a/sysdeps/ieee754/dbl-64/math_err.c b/sysdeps/ieee754/dbl-64/math_err.c
index 6dfac04ede..6412ad37e4 100644
--- a/sysdeps/ieee754/dbl-64/math_err.c
+++ b/sysdeps/ieee754/dbl-64/math_err.c
@@ -87,7 +87,7 @@ __math_uflow_value (double x)
 #endif
 
 attribute_hidden double
-__math_always_uflow (double x)
+__math_oflow_value (double x)
 {
   return with_errno (x, ERANGE);
 }
diff --git a/sysdeps/ieee754/dbl-64/w_sinh.c b/sysdeps/ieee754/dbl-64/w_sinh.c
new file mode 100644
index 0000000000..1cc8931700
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/w_sinh.c
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/m68k/m680x0/fpu/w_sinh_compat.c b/sysdeps/m68k/m680x0/fpu/w_sinh_compat.c
new file mode 100644
index 0000000000..3fb87d2c9e
--- /dev/null
+++ b/sysdeps/m68k/m680x0/fpu/w_sinh_compat.c
@@ -0,0 +1,8 @@
+/* m68k provides an optimized __ieee754_sinh.  */
+#ifdef SHARED
+# define NO_COMPAT_NEEDED 1
+# include <math/w_sinh_compat.c>
+#else
+# include <math-type-macros-double.h>
+# include <w_sinh_template.c>
+#endif
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index aa57dd170b..001248ec4e 100644
--- a/sysdeps/mach/hurd/i386/libm.abilist
+++ b/sysdeps/mach/hurd/i386/libm.abilist
@@ -1372,3 +1372,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index 1d815aad66..a397e37707 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -1338,3 +1338,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index f3bdc7f649..68dfc09a74 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -1497,3 +1497,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
index a93bb4b85b..c3ccec9115 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
@@ -995,3 +995,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
index a93bb4b85b..c3ccec9115 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
@@ -995,3 +995,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist
index bed06e5425..34c73ed061 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -995,3 +995,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
index 1633067640..1e0f9af0f7 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -1379,3 +1379,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index a93bb4b85b..c3ccec9115 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -995,3 +995,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
index f2ac1956c9..6d047a5300 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
@@ -995,3 +995,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
index f2ac1956c9..6d047a5300 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
@@ -995,3 +995,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index 35069ab524..13c5011224 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -995,3 +995,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
index ea113d7c6f..db26c8d824 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -1338,3 +1338,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index fd45ac9a22..5373a6f2a6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -1142,3 +1142,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
index 20383daa8e..3687778dff 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -1141,3 +1141,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
index 04e5284961..9e8ef44b6f 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
@@ -1135,3 +1135,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
index 0c5862f4cb..2c9fe5b53f 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
@@ -1531,3 +1531,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index 252e0849a7..8b15878ee1 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -1441,3 +1441,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
index 8279e0ac5e..a06dbb2ec3 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -1441,3 +1441,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
index f4ab6ed10f..38b01ab40e 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
@@ -995,3 +995,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
index f4ab6ed10f..38b01ab40e 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
@@ -995,3 +995,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
index 2e88c36c4f..02fd8c06a1 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -1448,3 +1448,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
index 8f929ae109..da51efaa39 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -1338,3 +1338,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index 831e9df7bf..130c2d2c21 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -1371,3 +1371,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index b95e6359f5..881e4de8fd 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -1371,3 +1371,4 @@ GLIBC_2.43 y0f F
 GLIBC_2.43 y1f F
 GLIBC_2.43 ynf F
 GLIBC_2.44 cosh F
+GLIBC_2.44 sinh F
diff --git a/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c b/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c
index e0e1e39a7a..459f37672d 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_sinh-fma.c
@@ -1,11 +1,4 @@
-#define __ieee754_sinh __ieee754_sinh_fma
-#define __ieee754_exp __ieee754_exp_fma
-#define __expm1 __expm1_fma
-
-/* NB: __expm1 may be expanded to __expm1_fma in the following
-   prototypes.  */
-extern long double __expm1l (long double);
-extern long double __expm1f128 (long double);
+#define __sinh __sinh_fma
 
 #define SECTION __attribute__ ((section (".text.fma")))
 
diff --git a/sysdeps/x86_64/fpu/multiarch/e_sinh.c b/sysdeps/x86_64/fpu/multiarch/e_sinh.c
index 97e1d9994b..0390be3b5c 100644
--- a/sysdeps/x86_64/fpu/multiarch/e_sinh.c
+++ b/sysdeps/x86_64/fpu/multiarch/e_sinh.c
@@ -19,17 +19,26 @@
 #include <sysdeps/x86/isa-level.h>
 #if MINIMUM_X86_ISA_LEVEL < AVX2_X86_ISA_LEVEL
 # include <libm-alias-finite.h>
+# include <libm-alias-double.h>
+# include <math-svid-compat.h>
 
-extern double __redirect_ieee754_sinh (double);
+extern double __redirect_sinh (double);
 
-# define SYMBOL_NAME ieee754_sinh
+# define SYMBOL_NAME sinh
 # include "ifunc-fma.h"
 
-libc_ifunc_redirected (__redirect_ieee754_sinh, __ieee754_sinh,
+libc_ifunc_redirected (__redirect_sinh, __sinh,
 		       IFUNC_SELECTOR ());
 
+strong_alias (__sinh, __ieee754_sinh)
+# if LIBM_SVID_COMPAT
+versioned_symbol (libm, __sinh, sinh, GLIBC_2_44);
+libm_alias_double_other (__sinh, sinh)
+# else
+libm_alias_double (__sinh, sinh)
+# endif
 libm_alias_finite (__ieee754_sinh, __sinh)
 
-# define __ieee754_sinh __ieee754_sinh_sse2
+# define __sinh __sinh_sse2
 #endif
 #include <sysdeps/ieee754/dbl-64/e_sinh.c>
-- 
2.43.0



More information about the Libc-alpha mailing list