[Vm-dev] InterpreterSimulator

Florin Mateoc florin.mateoc at gmail.com
Wed Mar 9 20:17:23 UTC 2016


Hi again,

I think I found the bug: in method InterpreterPrimitives>>signed64BitValueOf: there seems to be an assumption (even
mentioned in the method comment) that (on 32bit machines) largeIntegers have to be either 4 or 8 bytes.
In this case we get a 5byte largeInteger, so we get the error. What I don't understand is where does this assumption
come from, because it does not seem limited to this method.
Also note that on BigEndian machines the code does not act upon this assumption, so it would not fail.

Actually, I suspect that the assumption comes from "generalizing" the 32-bit one, since the methods seem to be copied
and pasted.
For the 32bit variant, the comment stated that "The object may be either a positive SmallInteger or a four-byte
LargeInteger". But in this case it was correct, anything less than 4 bytes would not be a LargeInteger. When moving to
64bit, the same does not hold true. We can have largeIntegers with 4,5,6,7 or 8 bytes fitting in 64 bits.

Also, speaking of BigEndian, it seems that, in the same class, the methods #magnitude64BitValueOf: and
#positive64BitValueOf: do not take care of the BigEndian case.

Cheers,
Florin


More information about the Vm-dev mailing list