[Vm-dev] Portability problems: compiler flags

Andreas Raab andreas.raab at gmx.de
Tue Jan 25 11:05:32 UTC 2011


On 1/25/2011 11:38 AM, Igor Stasenko wrote:
>> Squeak uses highly unportable flag "-mno-fused-madd".
>> It isn't present in many systems, even those using GCC,
>> since many systems use older compilers.
>>
>> Also, why do you build fdlibm? It is old stuff that works not so well,
>> we have better libm. Is there a way to use our libm?
>>
> I asked  same question few weeks ago.
> Check mailing list archive for discussion.
> In short: differrent libm implementations work differently and some
> have bad support of IEEE standard.

Actually, that's not quite the point. The issue is that Croquet requires 
bit-identical computations including floating point. For FPU 
computations, the use of -mno-fused-madd avoids the use of the fused 
multiply-add operation by compilers which support it which would 
generate different results from compilers not using fused madd.

The usage of fdlibm is similar. As Nicolas has pointed out elsewhere, 
fdlibm is in some cases actually inferior of the platform libms (one 
might say outright broken) but the requirement for the usage in Croquet 
isn't really whether it's "correct" or "good". The requirement is 
bit-identical results across all platforms. The results can be wrong as 
long as they are consistently wrong. But they mustn't be different.

Having said that, for your regular Squeak VM (i.e., not requiring 
bit-identical floating point results) there really isn't a requirement 
to use either -mno-fused-madd or fdlibm.

Cheers,
   - Andreas


More information about the Vm-dev mailing list