![]() |
|
Message-ID: <20250222003710.GH1827@brightrain.aerifal.cx> Date: Fri, 21 Feb 2025 19:37:11 -0500 From: Rich Felker <dalias@...c.org> To: Alex Rønne Petersen <alex@...xrp.com> Cc: musl@...ts.openwall.com Subject: Re: Re: [PATCH] configure: prevent compilers from turning a * b + c into fma(a, b, c) On Fri, Dec 06, 2024 at 01:54:45AM +0100, Alex Rønne Petersen wrote: > On Wed, Aug 28, 2024 at 5:28 PM Alex Rønne Petersen <alex@...xrp.com> 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. > > > > Work around this by passing -ffp-contract=off for Clang and -mno-fused-madd > > for GCC. This matches what glibc's configure.ac does, FWIW. > > --- > > configure | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/configure b/configure > > index bc9fbe48..7028793f 100755 > > --- a/configure > > +++ b/configure > > @@ -355,6 +355,15 @@ tryflag CFLAGS_C99FSE -fexcess-precision=standard \ > > || { test "$ARCH" = i386 && tryflag CFLAGS_C99FSE -ffloat-store ; } > > tryflag CFLAGS_C99FSE -frounding-math > > > > +# > > +# Prevent the compiler from turning a * b + c into an fma() call. > > +# Clang at least has been known to do this in the implementation of > > +# fma() itself when targeting arm-linux-musleabi and armv8-a, causing > > +# infinite recursion. > > +# > > +tryflag CFLAGS_C99FSE -mno-fused-madd > > +tryflag CFLAGS_C99FSE -ffp-contract=off > > + > > # > > # Semantically we want to insist that our sources follow the > > # C rules for type-based aliasing, but most if not all real-world > > -- > > 2.40.1 > > > > Ping. Is the patch acceptable without -mno-fused-madd (for ancient > GCCs)? If so, should I re-send without that line? If this is needed at all (IIRC I was unclear on how it was needed at all with -ffreestanding) then I'd prefer to also include the option to unbreak old GCC. Rich
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.