On Fri, 6 Aug 2021, Stefan Kanthak wrote: > > I don't know what the standard says about NaNs in this case, I seem to > > remember that arithmetic instructions typically produce QNaN when one of > > the inputs is a NaN, whether signaling or not. > > <https://pubs.opengroup.org/onlinepubs/9699919799/functions/trunc.html> > and its cousins as well as the C standard say > > | If x is NaN, a NaN shall be returned. > > That's why I mentioned that the code GCC generates also doesn't quiet SNaNs.
You should be looking at TS 18661-3 / C2x Annex F for sNaN handling; the POSIX attempts to deal with signaling NaNs aren't well thought out. (And possibly adding flag_signaling_nans conditions as appropriate to disable for -fsignaling-nans anything for these to-integer operations that doesn't produce a qNaN with INVALID raised from sNaN input.) Though in C2x mode, these SSE2 code sequences won't be used by default anyway, except for rint (C2x implies -fno-fp-int-builtin-inexact). -- Joseph S. Myers jos...@codesourcery.com