Dave,

Thanks for the excellent feedback.

On 10/17/07, David T. Lewis <lewis@mail.msen.com> wrote:
[snip]
- What is a 64 bit VM?
A 64 bit image is an image in which the object memory uses 64 bit word
size for object pointers. Squeak now supports a 64 bit image format that
is sufficient to produce a working system, but which is intentionally
simple, and is expected to be modified and extended to take advantage of
additional 64 bit capabilities in the future.

Considering the answer you gave,  did you mean this question to be
"What is a 64-bit image?"?

Here's a pass at answering the "what is a 64-bit VM?" question:
A 64-bit VM is one which is compiled with the LP64 or ILP64 data
model.  This means, in C terms, that pointers and longs are 64 bits
wide.

- Can I run a 32- or 64-bit VM on my computer?
Some current architectures (such as the x86-64 and the UltraSPARC)
can run 32-bit as well as 64-bit applications; these are known as
"bi-arch".  However, some (such as the Alpha) can only run 64-bit
applications.  For bi-arch systems, you can choose whether to run
a 32-bit or 64-bit VM.  For 64-bit-only systems, you can only run a
64-bit VM, since there's no way of compiling a 32-bit application.

- Can I run a 32 bit image on my 64 bit computer?
Yes. A 32 bit image can be run on either a 32 bit VM or a 64 bit VM. Some
computer platforms (e.g. 64 bit Linux) can run both the 32 bit VM and
64 bit VM on the same system.

- Can I run a 64 bit image on my 32 bit computer?
Yes. If you build a VM with the "64 bit VM?" check box selected, you will
create a VM that runs 64 bit images. This will work on 32 bit host systems
as well as on 64 bit host systems.

- How does a 32-bit VM manage to run a 64-bit image if pointers are 32-bits?
(I'm guessing here!)
It relies on the image size being smaller than 4GB. Code in the VM
converts the 64-bit object pointers to 32-bit ones that the VM can use.

- What sizes and alignment does the new 64-bit image format use for
pointers and integers?
(Again, I'm guessing here)
In the 64-bit image format, object pointers are 64-bits wide, allowing for
memory up to 2^64 bytes to be directly addressable.  They are aligned
on 8-byte boundaries.
Integers are still implemented as tagged 31-bit values.  They are aligned
to 4-byte boundaries.
These alignments were chosen as most 64-bit CPUs require them.

- how do I tell if a given image file is 32-bit or 64-bit?
(No idea.  Anyone?)

Andrew