Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <eff0e8c6-e360-ff7d-fd20-e0f868d45c8a@ispras.ru>
Date: Wed, 28 Aug 2024 18:53:30 +0300 (MSK)
From: Alexander Monakov <amonakov@...ras.ru>
To: musl@...ts.openwall.com
cc: Alex Rønne Petersen <alex@...xrp.com>
Subject: Re: [PATCH] configure: prevent compilers from turning a * b
 + c into fma(a, b, c)


On Wed, 28 Aug 2024, Alex Rønne Petersen wrote:

> I've seen Clang do this for expressions in the fma() implementation itself,
> which of course led to infinite recursion. This happened when targeting
> arm-linux-musleabi with full soft float mode and -march=armv8-a. I imagine
> it's possible for GCC to do similar silliness.

musl passes -std=c99 to the compiler, and in all GCC releases so far* that
disables FMA contraction (as opposed to -std=gnu99 or whichever -std=gnuXX
is enabled by default, where unrestricted contraction is implicitly enabled,
i.e. the non-standard and dangerous -ffp-contract=fast mode).

Clang respects #pragma STDC FP_CONTRACT OFF, so that is available as
a smaller hammer than disabling fma across the board. Breaking up
contractable expression in fma*.c will work too.

[*] maybe modulo bugs in old releases where the backend doesn't respect
-ffp-contract=off and which Glibc worked around with -mno-fused-madd.

Alexander

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.