[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