Floating point trouble with x86's extended precision
Bradley Lucier
lucier@math.purdue.edu
Fri Aug 22 04:35:00 GMT 2003
On Thursday, August 21, 2003, at 06:42 PM, Jim Wilson wrote:
> Bradley Lucier wrote:
>> I, and other people, think that the inability to get predictable
>> behavior from GCC (even from an option that you might not like to use
>> because of speed or other issues) is a bug.
>
> While I agreee that the current behaviour is a problem, I don't see
> any good solution for it.
All one needs is a predictable model that matches the hardware. You
said yourself, the x86 has only XFMODE registers and operations
(rounded, perhaps directionally, to a precision that's set in the
control register). If you want to have predictable results, you can't
lie about what the hardware's doing. As I said in
http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00466.html
> The following computational model will give predictable results and
> will allow
> simulation of IEEE floating point without extended precision as
> implemented
> on other processors (except for things like PowePC fused multiply-add
> instruction):
>
> 0. The programmer can declare the precision of all operations.
>
> 1. All temporaries generated for a single expression are always
> maintained
> in extended precision, even when spilled to the stack, and
>
> 2. Each assignment to a variable is stored to memory. (And, if the
> value of
> that variable is used later by dereferencing its lvalue, the value is
> loaded
> from memory and the temporary that was stored to memory is not
> re-used.)
>
>
> Item 0 is already implemented in the Linux-Gnu/glibc/gcc/x86
> combination.
In fact, 2 is too strong, you need only store to memory non-XFMODE
variables. (I think that storing to memory is the only way to get a
true conversion, both mantissa and exponent, to either SFMODE or DFMODE
from a register in the x86 FP stack.)
That's it. Perhaps Zack's solution with SSE on pentium 4 will work,
too, but I don't know enough about it to say.
Brad
More information about the Gcc
mailing list