On Thu, Feb 12, 2009 at 7:38 PM, David T. Lewis <lewis@mail.msen.com> wrote:

On Thu, Feb 12, 2009 at 11:18:02AM -0800, Eliot Miranda wrote:
>
> AFAICT you can produce a 64-bit VM that runs a 32-bit image with this
> technique, but you can't get a VM that runs both.

Actually, I think that it probably *is* possible to make a Squeak
VM that will run both 32 and 64 bit images, although performance may
be poor and the plugins would be problematic. The basic idea is to
move BytesPerWord and BaseHeaderSize into run time variables rather
than compile time macros (i.e. move them from class variables in
ObjectMemory to instance variables in ObjectMemory), and set the
values at image load time. Everything else should just work.

You'll have to change oopForPointer/pointerForOop to account for the different widths of an oop.  e.g. if the heap is origined at 0 then in a 64-bit image the oop 4 maps to byte address 8, but in a 32-bit image it maps to byte address 4.

You'll have to change the readers and writers (e.g. oopAtPointer/oopAtPointerPut) to test BytesPerWord and fetch/store 64 or 32 bits as required.

At least.

It won't be particularly sprightly :)

I've been meaning to do this for quite some time but have not gotten
around to trying it.

Dave