diff options
| author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2026-03-09 17:11:12 -0300 |
|---|---|---|
| committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2026-04-07 13:21:20 -0300 |
| commit | dfb150f3aadd93118a78ef9e19c2663f0e1994b7 (patch) | |
| tree | 8bc471e67e81b32a5c9b1daaf97e8431f1a4fb8f /sysdeps/ieee754 | |
| parent | 7594b4e5a75d41e891782aa7e3fb51924f6840cb (diff) | |
math: Add fast-path to fmaHEADorigin/masterorigin/HEADmaster
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.
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Diffstat (limited to 'sysdeps/ieee754')
| -rw-r--r-- | sysdeps/ieee754/dbl-64/s_fma.c | 5 |
1 files changed, 4 insertions, 1 deletions
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) |
