[Vm-dev] Removing UB to make SmallFloat handling gcc 4.9.2 -O2
compatible [WAS: first 64 bits windows VM Running]
Andres Valloud
avalloud at smalltalk.comcastbiz.net
Thu Jul 21 00:41:53 UTC 2016
> Or better: eliminate Undefined Behavior which is most probably the
> cause of problems
This is a good start for a default debugging procedure.
> Note: i've successfully compiled Squeak stack spur 64 bits with gcc
> 4.9.2 -02 and restored the correct behavior for SmallFloat:
> 2.0*3.0 correctly answer 6.0 instead of 4.0...
>
> Why is memcpy less evil than pointer aliasing?
> With pointer aliasing any other write into a long integer could modify
> doubleResult.
> This completely defeat optimization - the holy grail of C people, they
> can't bother that FORTRAN compilers are faster than theirs ;). With
> great wisdom they declared this construct as undefined behavior, giving
> priority to optimization rather than backward compatibility or
> programmers' intentions...
> memcpy is less evil because it's localized (one shot).
The GCC manual warns of potential issues with memcpy(), and recommends
using unions instead. The union method worked on every HPS compilation
environment, across multiple optimization levels. Whenever I checked,
the resulting assembly code was optimal.
https://gcc.gnu.org/bugs/#casting_and_optimization
http://mail-index.netbsd.org/tech-kern/2003/08/11/0001.html
Andres.
More information about the Vm-dev
mailing list