[PATCH 2/8] math: Optimize fma call on acospif
Adhemerval Zanella
adhemerval.zanella@linaro.org
Fri Oct 10 17:49:20 GMT 2025
The fma is required only for inputs less than 0x1.0fd288p-127. Also
only add the extra check for !__FP_FAST_FMA targets.
Checked on x86_64-linux-gnu and aarch64-linux-gnu.
---
sysdeps/ieee754/flt-32/s_acospif.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/sysdeps/ieee754/flt-32/s_acospif.c b/sysdeps/ieee754/flt-32/s_acospif.c
index caf65d42f3d..63230bd3b37 100644
--- a/sysdeps/ieee754/flt-32/s_acospif.c
+++ b/sysdeps/ieee754/flt-32/s_acospif.c
@@ -67,7 +67,12 @@ __acospif (float x)
/* For |x| <= 0x1.0fd288p-127, c0 += c4*(z4*z4) would raise a spurious
underflow exception, we use an FMA instead, where c4 * z4 does not
underflow. */
- c0 = fma (c4 * z4, z4, c0);
+#ifndef __FP_FAST_FMA
+ if (__glibc_likely (ax > 0x1.0fd288p-127))
+ c0 = (c4 * z4) * z4 + c0;
+ else
+#endif
+ c0 = fma (c4 * z4, z4, c0);
return 0.5 - z * c0;
}
else
--
2.43.0
More information about the Libc-alpha
mailing list