[Vm-dev] Re: [Pharo-project] Integrating Changes in 1.4 that
require a new VM
Igor Stasenko
siguctua at gmail.com
Fri Sep 23 10:58:37 UTC 2011
On 23 September 2011 09:44, stephane ducasse <stephane.ducasse at gmail.com> wrote:
>
> Stupid question:
>
> what does it mean?
>> we need 8 CompiledMethod values
>
to encode odd size values.
The header encoding size in machine words, which on 64 bit system are
always 8-byte aligned.
But compiled method size could be any size in bytes and to encode it
we need 3 bits somewhere (or 8 different values),
to encode size in bytes i.e.:
sizeinbytes = sizeInWords*8 + (oddSize)
where oddsize is our 0..7 value
> Stef
>
>>
>>
>> Here's the format field (Behavior>instSpec at the image level) as currently populated:
>>
>> 0 = 0 sized objects (UndefinedObject True False et al)
>> 1 = non-indexable objects with inst vars (Point et al)
>> 2 = indexable objects with no inst vars (Array et al)
>> 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
>> 4 = weak indexable objects with inst vars (WeakArray et al)
>> 6 = 32-bit indexable objects (Float, Bitmap ert al)
>> 8 = 8-bit indexable objects (ByteString, ByteArray et al)
>> 12 = CompiledMethod
>>
>> N.B. in the VM the least two bits of the format/instSpec for byte objects (formats 8 and 12) is used to encode the number of odd bytes in the object, so that a 1 character ByteString has a format of 11, = 8 + 3, size = 1 word - 3 bytes.
>>
>>
>> For the future (i.e. the new GC/object representation, /not/ for the first implementation of ephemerons which we can do now, for Pharo 1.4 or 1.5) we need to extend format/instSpec to support 64 bits. I think format needs to be made a 5 bit field with room for 4 bits of odd bytes for 64-bit images. [For VMers, the Size4Bit is a horrible hack). So then
>>
>> 0 = 0 sized objects (UndefinedObject True False et al)
>> 1 = non-indexable objects with inst vars (Point et al)
>> 2 = indexable objects with no inst vars (Array et al)
>> 3 = indexable objects with inst vars (MethodContext AdditionalMethodState et al)
>> 4 = weak indexable objects with inst vars (WeakArray et al)
>> 5 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)
>>
>> and we need 8 CompiledMethod values, 8 byte values, 4 16-bit values, 2 32-bit values and a 64-bit value, = 23 values, 23 + 5 = 30, so there is room, e.g.
>>
>> 9 (?) 64-bit indexable
>> 10 - 11 32-bit indexable
>> 12 - 15 16-bit indexable
>> 16 - 23 byte indexable
>> 24 - 31 compiled method
>>
>> In 32-bit images only the least significant 2 bits would be used for formats 16 & 24, and the least significant bit for format 12.
>>
>>
>
--
Best regards,
Igor Stasenko.
More information about the Vm-dev
mailing list