[PATCH] math: Add fast-path to fma
Adhemerval Zanella
adhemerval.zanella@linaro.org
Mon Mar 9 20:11:12 GMT 2026
For normal numbers there is no need to issue scalbn, the fma can set
the exponend directly. Performance-wise on x86_64-linux-gnu without
multi-arch it shows a latency improvement of ~5% and throughput of %7
(and sligth more for ABIs witht tail-call optimization).
Checked on x86_64-linux-gnu and i686-linux-gnu with --disable-multi-arch.
---
sysdeps/ieee754/dbl-64/s_fma.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/sysdeps/ieee754/dbl-64/s_fma.c b/sysdeps/ieee754/dbl-64/s_fma.c
index d65d505915..88bda86943 100644
--- a/sysdeps/ieee754/dbl-64/s_fma.c
+++ b/sysdeps/ieee754/dbl-64/s_fma.c
@@ -192,7 +192,10 @@ __fma (double x, double y, double z)
i = -i;
double r = convertfromint64 (i); /* |r| is in [0x1p62,0x1p63] */
- if (e < -1022 - 62)
+ if (__glibc_likely (e >= -1084 && e <= 960))
+ /* Fast-path for normal numbers. */
+ return asdouble (asuint64 (r) + ((int64_t) e << MANTISSA_WIDTH));
+ else if (e < -1022 - 62)
{
/* Result is subnormal before rounding. */
if (e == -1022 - 63)
--
2.43.0
More information about the Libc-alpha
mailing list