From b01abba04a954cbd6b2834c0643a08685a915fe5 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Thu, 30 Jul 2026 08:55:54 -0300 Subject: [PATCH] math: Fix x86_64 tanh _FloatN aliases binding to the FMA variant [BZ 34465] The generic implementation emits libm_alias_double unconditionally, so tanhf32x and tanhf64 bind directly to __tanh_fma. Guard the alias with '#ifndef __tanh' and emit it from the dispatcher, as sin. Also remove the stale __expm1 defines, unused since tanh moved to CORE-MATH. Checked on x86_64-linux-gnu, and with 'qemu-x86_64 -cpu Nehalem'. Reported-by: Michael Brunnbauer --- sysdeps/ieee754/dbl-64/s_tanh.c | 2 ++ sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c | 6 ------ sysdeps/x86_64/fpu/multiarch/s_tanh.c | 5 ++--- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/sysdeps/ieee754/dbl-64/s_tanh.c b/sysdeps/ieee754/dbl-64/s_tanh.c index 2029de8fa5..ef80b9edb6 100644 --- a/sysdeps/ieee754/dbl-64/s_tanh.c +++ b/sysdeps/ieee754/dbl-64/s_tanh.c @@ -283,4 +283,6 @@ __tanh (double x) return as_tanh_database (x, res); return res; } +#ifndef __tanh libm_alias_double (__tanh, tanh) +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c b/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c index 1b808b1227..1e6b33740a 100644 --- a/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c +++ b/sysdeps/x86_64/fpu/multiarch/s_tanh-fma.c @@ -1,10 +1,4 @@ #define __tanh __tanh_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 SECTION __attribute__ ((section (".text.fma"))) diff --git a/sysdeps/x86_64/fpu/multiarch/s_tanh.c b/sysdeps/x86_64/fpu/multiarch/s_tanh.c index ec8826f634..9048c977c1 100644 --- a/sysdeps/x86_64/fpu/multiarch/s_tanh.c +++ b/sysdeps/x86_64/fpu/multiarch/s_tanh.c @@ -25,10 +25,9 @@ extern double __redirect_tanh (double); # define SYMBOL_NAME tanh # include "ifunc-fma.h" -libc_ifunc_redirected (__redirect_tanh, tanh, IFUNC_SELECTOR ()); +libc_ifunc_redirected (__redirect_tanh, __tanh, IFUNC_SELECTOR ()); +libm_alias_double (__tanh, tanh) # define __tanh __tanh_sse2 -# undef libm_alias_double -# define libm_alias_double(a, b) #endif #include -- 2.47.3