[Vm-dev] FloatMathPlugin crashes the VM if compiled with gcc optimization

Andreas Raab andreas.raab at gmx.de
Sun Dec 26 20:57:21 UTC 2010


On 12/26/2010 8:40 PM, Igor Stasenko wrote:
> Note, that on unix and mac it defines -DNO_ISNAN
> while on win32, it compiles with -O0 flag, which turns off all optimizations.
>
> It would be good to know why optimization(s) causing crash, and how we
> could fix that in code,
>   because i'm not in favor having VM  which stability depends on
> compiler peculiarities.

Because fdlibm aliases integer pointers with floating point values. 
Compilers generally don't assume that, i.e.,

	double foo = 1.0;
#ifdef BIGENDIAN
	unsigned int *highWord = (unsigned int*)&foo;
#else
	unsigned int *highWord = ((unsigned int*)&foo)++;
#endif
	*highWord |= 0x8000000;

might change the sign of foo and that it would invalidate a prior value 
in an fpu register. But fdlibm does this kind of stuff *all the time*.

Cheers,
   - andreas


More information about the Vm-dev mailing list