|
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.