[PATCH 4/8] math: math: Optimize fma call on asinpif

Paul Zimmermann Paul.Zimmermann@inria.fr
Mon Oct 13 09:23:40 GMT 2025


       Hi Adhemerval,

> 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:22 -0300
> 
> The fma is required only for x == 0x1.6371e8p-4f in FE_TOWARDZERO
> to provide correctly rounded results.
> 
> Checked on x86_64-linux-gnu and aarch64-linux-gnu.
> ---
>  sysdeps/ieee754/flt-32/s_asinpif.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/sysdeps/ieee754/flt-32/s_asinpif.c b/sysdeps/ieee754/flt-32/s_asinpif.c
> index f9e93533d4a..d5e8a90aaa8 100644
> --- a/sysdeps/ieee754/flt-32/s_asinpif.c
> +++ b/sysdeps/ieee754/flt-32/s_asinpif.c
> @@ -79,8 +79,13 @@ __asinpif (float x)
>        c0 += c2 * z2;
>        c4 += c6 * z2;
>        c0 += c4 * z4;
> -      double r = fma (-c0, copysign (f, x), copysign (0.5, x));
> -      return r;
> +#ifndef __FP_FAST_FMA
> +      /* The fma is required only for x == 0x1.6371e8p-4f in FE_TOWARDZERO
> +	 to provide correctly rounded results.  */
> +      if (__glibc_likely (x != 0x1.6371e8p-4f))
> +	return copysign (0.5, x) - c0 * copysign (f, x);

with CORE-MATH and -march=x86-64-v2, I also get an error for -0x1.6371e8p-4f.
Please can you check that value and maybe add it to math/auto-libm-test-in?
  
> +#endif
> +      return fma (-c0, copysign (f, x), copysign (0.5, x));
>      }
>  }
>  libm_alias_float (__asinpi, asinpi)
> -- 
> 2.43.0

Paul


More information about the Libc-alpha mailing list