[PATCH] math: Add optimization barrier to ensure a1 + u.d is not reused [BZ #30664]

John David Anglin dave@parisc-linux.org
Fri Feb 21 16:19:25 GMT 2025


Ping.

Dave

On Fri, Feb 07, 2025 at 12:00:30PM -0500, John David Anglin wrote:
> This patch fixes the test fma fails seen on hppa with gcc-13 and
> later.
> 
> There may be more instances of this problem still lurking in
> sysdeps/ieee754/dbl-64/s_fma.c and other similar files.  Whether
> they occur in practice is very hardware dependent.  I'm not able
> to test changes to any other files on hppa.
> 
> Okay?
> 
> Dave
> ---
> 
> math: Add optimization barrier to ensure a1 + u.d is not reused [BZ #30664]
> 
> A number of fma tests started to fail on hppa when gcc was changed to
> use Ranger rather than EVRP.  Eventually I found that the value of
> a1 + u.d in this is block of code was being computed in FE_TOWARDZERO
> mode and not the original rounding mode:
> 
>     if (TININESS_AFTER_ROUNDING)
>       {
>         w.d = a1 + u.d;
>         if (w.ieee.exponent == 109)
>           return w.d * 0x1p-108;
>       }
> 
> This caused the exponent value to be wrong and the wrong return path
> to be used.
> 
> Here we add an optimization barrier after the rounding mode is reset
> to ensure that the previous value of a1 + u.d is not reused.
> 
> Signed-off-by: John David Anglin <dave.anglin@bell.net>
> 
> diff --git a/sysdeps/ieee754/dbl-64/s_fma.c b/sysdeps/ieee754/dbl-64/s_fma.c
> index 20f617b996..42351c6b34 100644
> --- a/sysdeps/ieee754/dbl-64/s_fma.c
> +++ b/sysdeps/ieee754/dbl-64/s_fma.c
> @@ -244,6 +244,9 @@ __fma (double x, double y, double z)
>    /* Reset rounding mode and test for inexact simultaneously.  */
>    int j = libc_feupdateenv_test (&env, FE_INEXACT) != 0;
>  
> +  /* Ensure value of a1 + u.d is not reused.  */
> +  a1 = math_opt_barrier (a1);
> +
>    if (__glibc_likely (adjust == 0))
>      {
>        if ((u.ieee.mantissa1 & 1) == 0 && u.ieee.exponent != 0x7ff)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20250221/c6d3b200/attachment.sig>


More information about the Libc-alpha mailing list