[Vm-dev] InterpreterSimulator

Florin Mateoc florin.mateoc at gmail.com
Sat Mar 12 01:09:16 UTC 2016


On 3/11/2016 5:47 PM, Eliot Miranda wrote:


<snip>

> The simulation is pretty close.  The JIT's simulation closer.  This is simply history, plus the fact that debugging a
> JIT is more difficult and therefore more accurate simulation helps.
>  
> But if you're interested in closed world translations you might contact Gerardo Richarte and Xavier Burroni and ask
> them about their JIT work.
>
>     In addition to the general question above, to help me correct some of my misunderstandings/intuitions, which are
>     solely
>     based on reading this relatively obscure code, can you please elucidate a couple of mysteries for me?
>
>     1. Was this fetchLong64: bug a V3 VM bug as well or just a simulation bug?
>
>
> Just a simulation bug.  The code generated for the real VM is correct.
>   
>
>     2. Why do magnitude64BitValueOf: and positive64BitValueOf: not differentiate between BigEndian and LittleEndian?
>
>
> They don't have to.  Large Integers in Smalltalk are always little endian.  Nicolas Cellier has a prototype that would
> organize then as a sequence of 32-bit words, in which case they would be endian-dependent, but this is problematic
> because in 32-bit systems SmallInteger is only 31 bits, and so accessing the one and only 32-bit word of the large
> integer 16rFFFFFFFF answers that large integer itself.  Further, organizing it as a sequence of 16-bit words doesn't
> help either because 16rFFFF * 16rFFFF overflows 31-bit SmallIntegers. so if one wants to be able to implement large
> integer arithmetic non-primitively in the image using SmallIntegers, 8 bits is the largest convenient unit.
>  
>
>     3. Why do we have both primitives above? They both seem used, but why do some primitives use the first one,
>     coupled with
>     separate calls for sign, instead of just using the signed version (see primitiveAddLargeIntegers)?
>
>
> Some large integer primitives want to interpret the bit patterns in large integers as bit patterns and use
> magnitude64BitValueOf:.  So,e primitives want to interpret the bit patterns in large integers as arithmetic values,
> failing for LargeNegativeInteger, and use positive64BitValueOf:.  Perhaps positive64BitValueOf: is surplus to
> requirements, but it fits with the  existing set. BTW, they are /not/ primitives.  They are run-time support
> functions.  Let's not get confused.
>
>     Florin
>
>
> _,,,^..^,,,_
> best, Eliot

Thank you for the explanations, especially since I know you are very busy.

As for my interest in closed world translations, I am indeed interested and I know it can be done (the type inferencing
and inlining parts), but if I don't have "customers", meaning especially you as Squeak's main vm developer, I won't
spend time on it. It is not a trivial project.

Cheers,
Florin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160311/31e93f92/attachment.htm


More information about the Vm-dev mailing list