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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID

--- Comment #13 from Jakub Jelinek <jakub at gcc dot gnu.org> 2010-11-16 
10:54:36 UTC ---
Even if we add code to hardcode EDOM value for Linux targets and teach gcc that
errno is *__errno_location (), the first sqrtf could still be rounded to float
precision (because there is an optional __errno_location () call after it and
according to the ABI it might clobber %st(0)) while the remaining two could
very well be kept in extended precision and just rounded down to double
precision for varargs passing.

So I'm afraid there is nothing we can do about this in GCC and there is no GCC
bug, but simply the unpredictability of excess precision arithmetics.

Use -ffloat-store/-fexcess-precision=standard/volatile float to ensure it works
as expected if you care about it.

Reply via email to