http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48979



Sean Santos <quantheory at gmail dot com> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |quantheory at gmail dot com



--- Comment #16 from Sean Santos <quantheory at gmail dot com> 2013-04-14 
21:28:27 UTC ---

Regarding the above comment:

"You need to have IEEE_EXCEPTIONS or IEEE_ARITHMETIC loaded *in the scoping

unit*, if you want to use IEEE 754 features."



Well, yes and no. There are three cases:



1) If you don't access those modules in a particular scope, it is

"processor-dependent" (e.g. up to the compiler) whether IEEE features are

supported. They can be on or off all the time, or there can be a compiler

option.



2) If you do access those modules, it is *still* "processor-dependent" whether

IEEE features are supported, so that doesn't change. However, this does change:



    i) The compiler is allowed to change the level of IEEE support. It is

explicitly allowed to change the degree of support for exceptions. I don't

think that the committee actually intended for support of IEEE NaN and Inf to

change based on whether or not IEEE_ARITHMETIC is in scope, but technically the

standard seems to allow it.



    ii) If IEEE_ARITHMETIC is provided, the compiler is required to provide the

IEEE_SUPPORT_* functions so that the program can query them. (However, it is

not supposed to enforce their use at compile time.)



3) If you access IEEE_ARITHMETIC and use "IEEE_NAN" and "IEEE_INF" from

IEEE_FEATURES, the compiler is required to do one of only three things:



    i) Error at compile time because it doesn't have one or both modules.

    ii) Error at compile time because it has IEEE_FEATURES, but the module

doesn't contain IEEE_NAN/IEEE_INF.

    iii) Enable support of IEEE_NAN and IEEE_INF in the scope.





TLDR: If the compiler declares that it doesn't actually have any IEEE support

(which it implicitly does by not providing these modules), it can do anything

it wants. If IEEE_FEATURES was provided, that should probably be used to turn

on IEEE features that are turned off by default because they are inefficient,

not IEEE_ARITHMETIC. If an IEEE feature isn't a significant performance hit, it

may as well be on all the time.

Reply via email to