]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
math: Add fast-path to fma master
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 9 Mar 2026 20:11:12 +0000 (17:11 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 7 Apr 2026 16:21:20 +0000 (13:21 -0300)
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>
sysdeps/ieee754/dbl-64/s_fma.c

index d65d505915216671c233aac7ccd1666b1539c4f2..88bda86943869fe84760d423cc90e32b14ec0cd8 100644 (file)
@@ -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)