On Feb 21, 2010, at 12:34, Joseph S. Myers wrote: > Correct - I said API, not ABI. The API for C programs on x86 GNU/Linux > involves FLT_EVAL_METHOD == 2, whereas that on x86 Darwin involves > FLT_EVAL_METHOD == 0 and that on FreeBSD involves FLT_EVAL_METHOD == 2 > but with FPU rounding precision set to 53 bits so only excess range, not > precision, applies.
Your following paragraph "If people really want a new 32-bit x86 ABI..." threw me off. Your message contained the word ABI 4 times, and API once. I missed it, apologies. However, I think this is a bit of a red herring. There really is no consistent well-defined model for our current floating-point semantics on x86. Wether a value is computed with extra precision or not depends on many factors, such as optimization. The best way to describe the current situation is that any operation may or may not keep excess precision or range. Your patch to incur more double rounding by going through memory more often does not really solve this issue, it will just make results a little more consistent, but possible also less accurate and less precise. So, in short, we all will lose in a quest to support C99 on least common denominator hardware. We will not be able to achieve full compliance, we will all have to deal with worse performance due to additional spilling. All at the same time any other compiler will happily take advantage of the user's hardware and compile great code that is faster and produces better results. -Geert