http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51446
--- Comment #14 from joseph at codesourcery dot com <joseph at codesourcery dot com> 2011-12-08 22:32:24 UTC --- On Thu, 8 Dec 2011, lucier at math dot purdue.edu wrote: > Indeed, I couldn't find a place in the gcc sources where this macro was > used: > > heine:~/programs/gcc/mainline> grep -R _FP_NANSIGN_Q * | grep -v svn It's used as _FP_NANSIGN_##fs. > > At the level of GCC compiling C code, the compiler provides the language > > semantics. It doesn't provide the semantics of any particular choice of > > instructions someone might expect to be used to implement the source code > > - and in particular doesn't guarantee any choice of NaN where the language > > (and IEEE 754 as applicable) don't determine the choice of NaN. > > I don't think the result of 0./0. in C code on a particular target > should depend on telling the compiler that the runtime library is set up > so that floating-point operations never trap. This is just the same as other unspecified things like converting an out-of-range value from floating-point to integer. There is no C language binding to the processor that defines the result of a/b as being the result of some particular divide instruction (and it's quite likely that on some processors the choice of NaN could depend e.g. on whether a scalar or vector instruction is used); it's only specified as far as the language specifies it. This also allows transformations such as converting -1.0*x to -x even if -1.0*x doesn't change the sign of an input NaN (negate *is* specified by 754-2008 to change the sign of a NaN).