This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: c++/6914: -O2 and -O give different results for the same validFP code


http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6914

So here are my conclusions (after reading the assembly, and running gdb on it):
Floating point on x86 is done on 80 bit registers (IEEE's double extended type).
GCC generates code to exploit all 80 bits during divide. It then spills the result
to memory.

The second divide is not spilled to memory, and the comparison is done
between truncated value (which lost accuracy), and a completely accurate 80 bit
value.
According to http://www.validlab.com/goldberg/paper.ps this does not seem right.
According to this paper, gcc should operate on double precision (64 bit), or at
least give the impression that it does so (to the outside viewer). But gcc operates
on a mixed 80/64 bit setting, and that seems contradictory to IEEE spirit
(and, probably, agains ISO C rules).

You can read the section about optimization.




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]