[PATCH 6/8] math: Remove log2pf1 fma usage

Paul Zimmermann Paul.Zimmermann@inria.fr
Mon Oct 13 09:31:25 GMT 2025


       Hi Adhemerval,

within CORE-MATH I get a failure:

zimmerma@croissant:/tmp/core-math$ EXTRA_CFLAGS=-march=x86-64-v2 ./check.sh log2p1f
Running exhaustive check in --rndn mode...
FAIL x=-0x1.da285cp-5 ref=-0x1.60549p-4 y=-0x1.60548ep-4

zimmerma@croissant:/tmp/core-math$ git diff
diff --git a/src/binary32/log2p1/log2p1f.c b/src/binary32/log2p1/log2p1f.c
index 71147a36..ede3a033 100644
--- a/src/binary32/log2p1/log2p1f.c
+++ b/src/binary32/log2p1/log2p1f.c
@@ -183,7 +183,7 @@ float cr_log2p1f(float x) {
     int j = (m + ((int64_t)1<<(52-8)))>>(52-7), k = j>53;
     e += k;
     b64u64_u xd = {.u = m | (uint64_t)0x3ff<<52};
-    z = __builtin_fma(xd.f, ix[j], -1.0);
+    z = xd.f * ix[j] - 1.0;
     static const double c[] =
       {0x1.71547652b82fep+0, -0x1.71547652b82ffp-1, 0x1.ec709dc32988bp-2, -0x1.715476521ec2bp-2,
        0x1.277801a1ad904p-2, -0x1.ec731704d6a88p-3};

Please can you check that value, and add it to math/auto-libm-test-in?

Paul

> From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> Cc: Wilco Dijkstra <Wilco.Dijkstra@arm.com>,
> 	Paul Zimmermann <Paul.Zimmermann@inria.fr>,
> 	DJ Delorie <dj@redhat.com>
> Date: Fri, 10 Oct 2025 14:49:24 -0300
> 
> The fma is not required to provide correctly rounded and it helps
> on !__FP_FAST_FMA ISAs.
> 
> Checked on x86_64-linux-gnu and i686-linux-gnu.
> ---
>  sysdeps/ieee754/flt-32/s_log2p1f.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/sysdeps/ieee754/flt-32/s_log2p1f.c b/sysdeps/ieee754/flt-32/s_log2p1f.c
> index 09e77dc08ad..8aa46359998 100644
> --- a/sysdeps/ieee754/flt-32/s_log2p1f.c
> +++ b/sysdeps/ieee754/flt-32/s_log2p1f.c
> @@ -231,7 +231,7 @@ __log2p1f (float x)
>        int j = (m + ((int64_t) 1 << (52 - 8))) >> (52 - 7), k = j > 53;
>        e += k;
>        double xd = asdouble (m | (uint64_t) 0x3ff << 52);
> -      z = fma (xd, ix[j], -1.0);
> +      z = xd * ix[j] - 1.0;
>        static const double c[] =
>  	{
>  	   0x1.71547652b82fep+0, -0x1.71547652b82ffp-1,  0x1.ec709dc32988bp-2,
> -- 
> 2.43.0
> 
> 


More information about the Libc-alpha mailing list