{"id":131,"date":"2013-09-05T10:31:15","date_gmt":"2013-09-05T18:31:15","guid":{"rendered":"http:\/\/www.mirandabanda.org\/cogblog\/?p=131"},"modified":"2014-02-07T15:03:40","modified_gmt":"2014-02-07T23:03:40","slug":"a-spur-gear-for-cog","status":"publish","type":"post","link":"http:\/\/www.mirandabanda.org\/cogblog\/2013\/09\/05\/a-spur-gear-for-cog\/","title":{"rendered":"A Spur gear for Cog"},"content":{"rendered":"<p>I&#8217;ve got tentative permission at my day job to work on improving Cog&#8217;s performance, specifically garbage collection. \u00c2\u00a0The existing Squeak GC isn&#8217;t much to write home about; it has an interesting attempt at space optimization but is rather slow because it&#8217;s based on a pointer-reversal scan-mark-compact algorithm which, while it avoids the space overhead of a mark stack (implemented in the pointer reversal), ends up writing every field scanned three times, twice during scan-mark, and once during compaction, which is expensive. \u00c2\u00a0Generation scavenging by comparison writes each field just once. \u00c2\u00a0We have recent benchmark results at Cadence that show the VM spending 40% of its time in garbage collection (!!). \u00c2\u00a0While this isn&#8217;t a good comparison, in my experience with the VisualWorks VM, HPS, I saw overheads in the 2% to 5% range on memory-intensive loads. In any case a good GC should be a <em>lot<\/em> cheaper than 40% of entire execution time.<\/p>\n<p>The Squeak object representation also isn&#8217;t that spiffy. \u00c2\u00a0It has three header sizes, from a one to a two word header. one-word header objects must be instances of up to 31 classes (the &#8220;compact classes&#8221;); there is a \u00c2\u00a0bit field in the first header word and if non-zero the class of the object is in a 31-element Array off to the side. \u00c2\u00a0This is a good idea but as we&#8217;ll see it doesn&#8217;t go far enough. \u00c2\u00a0If the size of the object is less than 254 bytes (and not one of the compact classes), it has a two word header, the class reference taking up a word. \u00c2\u00a0Large objects have a three-word header with the full size taking a word. \u00c2\u00a0The parts of the VM that deal with object access (inst var access, object indexing etc) need to be insulated from this variety; it would be a really bad idea if one had to adjust an inst var offset by the header size whenever fetching the inst var of an object, so an object pointer always points at the first word of the header. \u00c2\u00a0But a memory manager must enumerate objects (e.g. privately for compaction, or as a service for allInstances) and hence needs to be able to look at the word following an object and tell what kind of header its got. \u00c2\u00a0So the Squeak format puts the header size in the least significant two bits of all header fields. \u00c2\u00a0Hence when fetching the class of a two- or three-word header the VM must mask off the least significant two bits.<\/p>\n<p>All this complexity has two main impacts on the Cog JIT. \u00c2\u00a0First, the inline cache probe at the beginning of each method, the code that checks that the receiver&#8217;s class is what&#8217;s expected, is about twice as long as that in HPS because it must cope with compact classes and with stripping the least-significant two bits from a full class field. \u00c2\u00a0Second, implementing basicNew or at:put: in machine code is a too tedious to contemplate; every object instantiation (including block creation) and every at:put: involves calling out of machine code into the interpreter&#8217;s run-time to use the existing Squeak VM code, which is doubly slow, slow because the switch from machine code to C involves switching stacks, and slow because the existing run-time code is already complex, given that the object representation is intrinsically complex.<\/p>\n<p>So revamping the garbage collector and changing the object representation appear to offer about a factor of two in performance, in part from cutting into the 40% GC overhead, and in part from the object representation, a much more efficient implementation of at:put:,\u00c2\u00a0basicNew \u00c2\u00a0and block creation, and a shorter simpler method prologue. \u00c2\u00a0If you look at the computer language benchmark game you&#8217;ll see VisualWorks is roughly twice as fast as Squeak on Cog.<\/p>\n<p>OK then, so what does this mean concretely? \u00c2\u00a0I&#8217;m changing the garbage collector and the object representation, a project I&#8217;ve nicknamed Spur (geddit??). \u00c2\u00a0The GC is being replaced by a generation scavenger, which is well-known technology. \u00c2\u00a0The object representation is influenced by the scheme I came up with when implementing a 64-bit version of VisualWorks, and I&#8217;ll spend some time describing it here. \u00c2\u00a0The main problem with a 64-bit Smalltalk object representation is that blowing a whole word on a class reference implies at least a 16-byte header, 8 bytes for the class and 8 bytes for the remaining information, and that&#8217;s a lot of memory to spend on an object header, given that statically the average Smalltalk object has about 7 inst vars (there are a lot of methods in the image), and dynamically probably a lot less (things like Point and Rectangle, which have two inst vars each, are going to be instantiated much more frequently using the IDE than methods). \u00c2\u00a0And the way out is &#8230; the class index idea. \u00c2\u00a0Use a field in the header to contain a class index and hold classes off to the side. \u00c2\u00a0Given that Smalltalk VMs of all stripes, interpreted or compiled, contain extensive method cacheing, the slower class access isn&#8217;t an issue. \u00c2\u00a0The VM uses the class index as the cache tag in the inline and global method caches, indirecting to fetch the actual class object only when method lookup in the cache fails and the class hierarchy must be searched (slow anyway, adding an extra indirection won&#8217;t be noticed), or in the class primitive.<\/p>\n<p>There are knock-on advantages. \u00c2\u00a0Class indexes are constant; the GC doesn&#8217;t update them when class objects are moved during garbage collection, and so they don&#8217;t need to be visited in in-line caches in machine code during garbage collection. \u00c2\u00a0Class indexes are constant; when instantiating a well-known class such as Array, Message or BlockClosure, the VM doesn&#8217;t need to go look up the class object in a table, it simply uses the appropriate class index. \u00c2\u00a0But, you ask, isn&#8217;t general instantiation really slow because with a class in hand, wanting to instantiate it, don&#8217;t we have to search the class table looking for the class to determine its class index? \u00c2\u00a0No&#8230;<\/p>\n<p><a name=\"identityHashIsClassIndex\"><\/a>Another issue in the Squeak system, and many Smalltalk VMs that use a GC that moves objects, is the identityHash. \u00c2\u00a0The system must provide a per-object hash that doesn&#8217;t change as an object moves. \u00c2\u00a0In the original 16-bit Smalltalk-80 implementation there was a fixed object table containing \u00c2\u00a0object headers, each with a pointer to their object body. \u00c2\u00a0The body could move but the header never did and so the object&#8217;s address could serve as its hash. \u00c2\u00a0But in 32-bit VisualWorks there&#8217;s a 14-bit hash field and in Squeak it&#8217;s only 11 bits, and that means lots of collisions in IdentityDictionary et al. So in my class index design there&#8217;s a much bigger identityHash field, and intentionally it is the same size (*) as the class index, and the system arranges that a class&#8217;s identityHash is also its index in the class table. \u00c2\u00a0The first time a class gets instantiated or sent a message or put in an identity hash table the VM notices the class has no identityHash yet, finds an unused slot in the class table, and assigns this index as the class&#8217;s identityHash field. \u00c2\u00a0So to instantiate a class the VM copies the class&#8217;s identityHash to the new instance&#8217;s classIndex field; simple. (*) <i>in fact it needs only to be as large as the class index. If one needs header bits or a better identityHash one could reduce the size of the classIndex field and increase the identityHash field. All that&#8217;s needed is that a classIndex fit in the identityHash field.<\/i><\/p>\n<p>One really good idea in the Squeak object representation is the format field. \u00c2\u00a0This is a 4-bit per-object field that defines the object&#8217;s basic type, is it pointers, bits, indexable, etc, and if bytes, how many unused bytes in the object, the &#8220;odd bytes&#8221;, given that its header size is a word count. \u00c2\u00a0The existing Squeak format is<\/p>\n<pre><i>ObjectMemory\u00c2\u00a0<\/i><i>methods<\/i><i>\u00c2\u00a0for\u00c2\u00a0<\/i><i>header access\u00c2\u00a0\r\n<\/i><b>formatOf:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">oop<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n<\/span><span style=\"color: #008080;\">\" 0 no fields\u00c2\u00a0\r\n1 fixed fields only (all containing pointers)\u00c2\u00a0\r\n2 indexable fields only (all containing pointers)\u00c2\u00a0\r\n3 both fixed and indexable fields (all containing pointers)\u00c2\u00a0\r\n4 both fixed and indexable weak fields (all containing pointers).\u00c2\u00a0\r\n\r\n5 unused\u00c2\u00a0\r\n6 indexable word fields only (no pointers)\u00c2\u00a0\r\n7 indexable long (64-bit) fields (only in 64-bit images)\u00c2\u00a0\r\n\r\n8-11 indexable byte fields only (no pointers) (low 2 bits are low 2 bits of size)\u00c2\u00a0\r\n12-15 compiled methods:\u00c2\u00a0\r\n# of literal oops specified in method header,\u00c2\u00a0\r\nfollowed by indexable bytes (same interpretation of low 2 bits as above)\u00c2\u00a0\r\n\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000000;\">&lt;<\/span><span style=\"color: #008000;\"><b>inline:<\/b><\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">true<\/span><span style=\"color: #000000;\">&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #800000;\">^<\/span><span style=\"color: #000000;\">(<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">baseHeader:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">oop<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&gt;&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">8<\/span><span style=\"color: #000000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">16rF<\/span><\/pre>\n<p>What&#8217;s good here is that a lot of properties, usually implemented as single-bit flags, some of which are exclusive, are combined in a single field. \u00c2\u00a0These bits would be a pointers bit, unset in byte objects, an indexable bit, 0 in e.g. Point, (and often stored in the class, from where its slow to get, slowing down at: &amp; at:put:), an isWeak bit, set in WeakArray et al, an Ephemeron bit, and two bits for the number of odd bytes. \u00c2\u00a0So instead of 5 or 6 bits we have 4, and these bits are often related during at: and at:put: (isPointers and odd bytes are both relevant).<\/p>\n<p>So I&#8217;m keeping this scheme, but extending it to cope with 64-bit objects. \u00c2\u00a0Another design goal of Spur is to share as much of the object representation between a 32-bit and a 64-bit implementation as possible. \u00c2\u00a0In VisualWorks there&#8217;s a lot of difference between the two, 32-bits having direct class pointers, 64-bits having class indexes, and that means a complex code base that&#8217;s sometimes hard to read. \u00c2\u00a0Hence the Spur format field is<\/p>\n<pre><i><i>Spur32BitMemoryManager methods for header access<\/i>\u00c2\u00a0\r\n<\/i><b>formatOf:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">objOop<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"0 = 0 sized objects (UndefinedObject True False et al)\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 1 = non-indexable objects with inst vars (Point et al)\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 2 = indexable objects with no inst vars (Array et al)\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a03 = indexable objects with inst vars (MethodContext AdditionalMethodState et al)\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a04 = weak indexable objects with inst vars (WeakArray et al)\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a05 = weak non-indexable objects with inst vars (ephemerons) (Ephemeron)\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a06,7,8 unused\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 9 (?) 64-bit indexable\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a010 - 11 32-bit indexable\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 12 - 15 16-bit indexable\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 16 - 23 byte indexable\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 24 - 31 compiled method\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">flag:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">#endianness<\/span><span style=\"color: #000000;\">.\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"longAt: objOop + self wordSize in a big-endian version\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 <\/span><span style=\"color: #800000;\">^<\/span><span style=\"color: #000000;\">(<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">longAt:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">objOop<\/span><span style=\"color: #000000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&gt;&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">formatShift<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">formatMask<\/span><\/pre>\n<p>Now we can define the complete Spur header. \u00c2\u00a0There are two formats; an 8-byte header, common between the 32-bit and 64-bit implementations, and a 16-byte header which has the overflow size in an 8-byte field prepended to the standard 8-byte header:<\/p>\n<div>\n<pre><i><i>SpurMemoryManager methods for header format\u00c2\u00a0\r\n<\/i><\/i><b>headerForSlots:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">numSlots<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>format:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">formatField<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>classIndex:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">classIndex<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"The header format in LSB is\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 MSB:    | 8: numSlots \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0| (on a byte boundary)\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0| 2 bits \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 |\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0| 22: identityHash \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0| (on a word boundary)\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0| 3 bits \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 |\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0| 5: format \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0| (on a byte boundary)\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0| 2 bits \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 |\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0| 22: classIndex \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0| (on a word boundary) : LSB\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 The remaining bits (7) need to be used for\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0isGrey\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0isMarked\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0isRemembered\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0isPinned\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0isImmutable\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 leaving 2 unused bits.\"<\/span><span style=\"color: #000000;\"><span style=\"color: #000000;\">\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000000;\">&lt;<\/span><span style=\"color: #008000;\"><b>returnTypeC:<\/b><\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">#usqLong<\/span><span style=\"color: #000000;\">&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span>\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #800000;\">^<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">(<\/span><span style=\"color: #000080;\">numSlots<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&lt;&lt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">numSlotsFullShift<\/span><span style=\"color: #000000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">(<\/span><span style=\"color: #000080;\">formatField<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&lt;&lt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">formatShift<\/span><span style=\"color: #000000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">classIndex<\/span><\/pre>\n<\/div>\n<div><\/div>\n<div>That&#8217;s room for 4 million classes, 4 million identityHashes, and objects with up to 1020 bytes before they need an overflow size field (2040 in the 64-bit system). \u00c2\u00a0While the 4 million class limit will be breached some day, it&#8217;ll stand for a few years yet, so it shouldn&#8217;t be as alarming as Bill&#8217;s famous 64k byte remark. \u00c2\u00a0For object parsing the overflow size word also contains a numSlots field. \u00c2\u00a0If the numSlots field is maxed out at 255 slots, then there&#8217;s an overflow size word and its numSlots is also 255. \u00c2\u00a0If the word following an object has 255 in the most significant byte then that following object has a 16-byte header, 8 bytes otherwise.<\/div>\n<div><\/div>\n<div>This is a work in progress so I&#8217;ve yet to write the instantiation routine, but hopefully you can see its a lot simpler than this:<\/div>\n<pre><i>    ObjectMemory methods for allocation<\/i><b>\u00c2\u00a0\r\n    instantiateClass:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">classPointer<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>indexableSize:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">size<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"NOTE: This method supports the backward-compatible split instSize field of the\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0class format word. The sizeHiBits will go away and other shifts change by 2\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0when the split fields get merged in an (incompatible) image change.\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000000;\">&lt;<\/span><span style=\"color: #008000;\"><b>api<\/b><\/span><span style=\"color: #000000;\">&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #808080;\">|<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">hash<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header2<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">cClass<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">format<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">binc<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header3<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">hdrSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">sizeHiBits<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">bm1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">classFormat<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #808080;\">|<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000000;\">&lt;<\/span><span style=\"color: #008000;\"><b>inline:<\/b><\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">false<\/span><span style=\"color: #000000;\">&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">assert:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">size<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&gt;=<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">0<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"'cannot have a negative indexable field count\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">hash<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">newObjectHash<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">classFormat<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">formatOfClass:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">classPointer<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"Low 2 bits are 0\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">(<\/span><span style=\"color: #6b6767;\">classFormat<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">16r1FF00<\/span><span style=\"color: #000000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitOr:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">(<\/span><span style=\"color: #6b6767;\">hash<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">HashMaskUnshifted<\/span><span style=\"color: #000000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&lt;&lt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">HashBitsOffset<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header2<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">classPointer<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">sizeHiBits<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">(<\/span><span style=\"color: #6b6767;\">classFormat<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">16r60000<\/span><span style=\"color: #000000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&gt;&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">9<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">cClass<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">CompactClassMask<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"compact class field from format word\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">(<\/span><span style=\"color: #6b6767;\">classFormat<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">SizeMask<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">Size4Bit<\/span><span style=\"color: #000000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">sizeHiBits<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"size in bytes -- low 2 bits are 0\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"Note this byteSize comes from the format word of the class which is pre-shifted\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0to 4 bytes per field. Need another shift for 8 bytes per word...\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&lt;&lt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">(<\/span><span style=\"color: #404040;\">ShiftForWord<\/span><span style=\"color: #000080;\">-<\/span><span style=\"color: #800000;\">2<\/span><span style=\"color: #000000;\">)<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">format<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">formatOfHeader:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">classFormat<\/span><span style=\"color: #000000;\">.\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">format<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&lt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">8<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000000;\">[<\/span><span style=\"color: #6b6767;\">format<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">=<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">6<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">[<\/span><span style=\"color: #008080;\">\"long32 bitmaps\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">bm1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">BytesPerWord<\/span><span style=\"color: #000080;\">-<\/span><span style=\"color: #800000;\">1<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800080;\">(<\/span><span style=\"color: #000080;\">size<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">*<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">4<\/span><span style=\"color: #800080;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">bm1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">LongSizeMask<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"round up\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">binc<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">bm1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">-<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800080;\">(<\/span><span style=\"color: #800000;\">(<\/span><span style=\"color: #000080;\">size<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">*<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">4<\/span><span style=\"color: #800000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">bm1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">bm1<\/span><span style=\"color: #800080;\">)<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"odd bytes\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"extra low bit (4) for 64-bit VM goes in 4-bit (betw hdr bits and sizeBits)\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitOr:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800080;\">(<\/span><span style=\"color: #6b6767;\">binc<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">4<\/span><span style=\"color: #800080;\">)<\/span><span style=\"color: #008000;\">]<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifFalse:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">[<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800080;\">(<\/span><span style=\"color: #000080;\">size<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">*<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">BytesPerWord<\/span><span style=\"color: #800080;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"Arrays and 64-bit bitmaps\"<\/span><span style=\"color: #008000;\">]<\/span><span style=\"color: #000000;\">]<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifFalse:<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000000;\">[<\/span><span style=\"color: #008080;\">\"Strings and Methods\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">bm1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">BytesPerWord<\/span><span style=\"color: #000080;\">-<\/span><span style=\"color: #800000;\">1<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">size<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">bm1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">LongSizeMask<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"round up\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">binc<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">bm1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">-<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #000080;\">size<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">bm1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">bm1<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"odd bytes\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"low bits of byte size go in format field\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitOr:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #6b6767;\">binc<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">3<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&lt;&lt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">8<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"extra low bit (4) for 64-bit VM goes in 4-bit (betw hdr bits and sizeBits)\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitOr:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #6b6767;\">binc<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitAnd:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">4<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">]<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">255<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"requires size header word\/full header\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">[<\/span><span style=\"color: #6b6767;\">header3<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">hdrSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">3<\/span><span style=\"color: #000000;\">]<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifFalse:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">[<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitOr:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">hdrSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">cClass<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">=<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">0<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">[<\/span><span style=\"color: #800000;\">2<\/span><span style=\"color: #008000;\">]<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifFalse:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">[<\/span><span style=\"color: #800000;\">1<\/span><span style=\"color: #008000;\">]<\/span><span style=\"color: #000000;\">]<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #800000;\">^<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">allocate:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">headerSize:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">hdrSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">h1:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">h2:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header2<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">h3:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">header3<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">doFill:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">true<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">format:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">format<\/span><span style=\"color: #800000;\">\u00c2\u00a0\r\n\r\n<\/span><b>    allocate:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>headerSize:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">hdrSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>h1:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">baseHeader<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>h2:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">classOop<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>h3:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">extendedSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>doFill:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">doFill<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>format:<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">format<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"Allocate a new object of the given size and number of header words. (Note: byteSize already\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 includes space for the base header word.) Initialize the header fields of the new object and\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 fill the remainder of the object with a value appropriate for the format. May cause a GC\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #808080;\">|<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">remappedClassOop<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #808080;\">|<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000000;\">&lt;<\/span><span style=\"color: #008000;\"><b>inline:<\/b><\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">true<\/span><span style=\"color: #000000;\">&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000000;\">&lt;<\/span><span style=\"color: #008000;\"><b>var:<\/b><\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">#i<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\"><b>type:<\/b><\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800080;\">'usqInt'<\/span><span style=\"color: #000000;\">&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000000;\">&lt;<\/span><span style=\"color: #008000;\"><b>var:<\/b><\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">#end<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\"><b>type:<\/b><\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800080;\">'usqInt'<\/span><span style=\"color: #000000;\">&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"remap classOop in case GC happens during allocation\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">hdrSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">[<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">pushRemappableOop:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">classOop<\/span><span style=\"color: #000000;\">]<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">allocateChunk:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">byteSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">(<\/span><span style=\"color: #000080;\">hdrSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">-<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">*<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">BytesPerWord<\/span><span style=\"color: #000000;\">)<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">hdrSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&gt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">1<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">[<\/span><span style=\"color: #6b6767;\">remappedClassOop<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">popRemappableOop<\/span><span style=\"color: #000000;\">]<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">hdrSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">=<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">3<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">[<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">longAt:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">put:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #000080;\">extendedSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitOr:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">HeaderTypeSizeAndClass<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">longAt:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">BytesPerWord<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">put:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #6b6767;\">remappedClassOop<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitOr:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">HeaderTypeSizeAndClass<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">longAt:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #404040;\">BytesPerWord<\/span><span style=\"color: #000080;\">*<\/span><span style=\"color: #800000;\">2<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">put:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #000080;\">baseHeader<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitOr:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">HeaderTypeSizeAndClass<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #404040;\">BytesPerWord<\/span><span style=\"color: #000080;\">*<\/span><span style=\"color: #800000;\">2<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">]<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">hdrSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">=<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">2<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">[<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">longAt:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">put:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #6b6767;\">remappedClassOop<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitOr:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">HeaderTypeClass<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">longAt:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">BytesPerWord<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">put:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #000080;\">baseHeader<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitOr:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">HeaderTypeClass<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">BytesPerWord<\/span><span style=\"color: #000000;\">]<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">hdrSize<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">=<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">1<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000000;\">[<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">longAt:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">put:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">(<\/span><span style=\"color: #000080;\">baseHeader<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">bitOr:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">HeaderTypeShort<\/span><span style=\"color: #008000;\">)<\/span><span style=\"color: #000000;\">]<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"clear new object\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">doFill<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000000;\">[<\/span><span style=\"color: #808080;\">|<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #808080;\">fillWord<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #808080;\">end<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #808080;\">i<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #808080;\">|<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #808080;\">fillWord<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">format<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&lt;=<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #800000;\">4<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">[<\/span><span style=\"color: #000000;\">nilObj<\/span><span style=\"color: #008000;\">]<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008080;\">\"if pointers, fill with nil oop\"<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #000080;\">ifFalse:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #008000;\">[<\/span><span style=\"color: #800000;\">0<\/span><span style=\"color: #008000;\">]<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #808080;\">end<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">byteSize<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #808080;\">i<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #6b6767;\">newObj<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">BytesPerWord<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #008000;\">[<\/span><span style=\"color: #808080;\">i<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">&lt;<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #808080;\">end<\/span><span style=\"color: #008000;\">]<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">whileTrue:<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 <\/span><span style=\"color: #008000;\">[<\/span><span style=\"color: #800000;\">self<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">longAt:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #808080;\">i<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">put:<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #808080;\">fillWord<\/span><span style=\"color: #000000;\">.<\/span><span style=\"color: #000000;\">\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0<\/span><span style=\"color: #808080;\">i<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><b>:=<\/b><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #808080;\">i<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #000080;\">+<\/span><span style=\"color: #000000;\">\u00c2\u00a0<\/span><span style=\"color: #404040;\">BytesPerWord<\/span><span style=\"color: #008000;\">]<\/span><span style=\"color: #000000;\">]<\/span><span style=\"color: #000000;\">.\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<\/span><span style=\"color: #800000;\">^<\/span><span style=\"color: #6b6767;\">newObj\u00c2\u00a0<\/span><\/pre>\n<div><a href=\"http:\/\/www.youtube.com\/watch?v=-KHFA6ZuFTE\">But will it blend?<\/a> \u00c2\u00a0I&#8217;ve bootstrapped from the old format to the new format so I can show you what happens to the size of the heap. \u00c2\u00a0Take a guess. \u00c2\u00a0There is additional overhead when compared to the existing Squeak object representation. \u00c2\u00a0A further departure is that objects are always a multiple of 8 bytes, and always have at least one field past the header for forwarding, specifically for implementing lazy become:. So in the 32-bit system a zero-sized object occupies 16 bytes, 8 bytes for the header, and 4 bytes for the forwarding pointer, rounded up to 8 bytes to preserve 64-bit alignment. \u00c2\u00a0In the 64-bit system it&#8217;s of course also 16 bytes, one extra 8 byte field for the forwarding pointer. \u00c2\u00a0And in Spur, Characters are 30-bit immediate values, with tag pattern 2, whereas SmallIntegers are unchanged, 31-bit immediate values with tag pattern 1. \u00c2\u00a0 Let&#8217;s compare the sizes of the heaps; for this I&#8217;m using a Squeak4.3 image containing\u00c2\u00a0342533\u00c2\u00a0objects occupying 15585400\u00c2\u00a0bytes, 45.5 bytes, or 11.37 words per object.<\/div>\n<div><\/div>\n<div>The new image contains 348104\u00c2\u00a0objects, occupying 17844440\u00c2\u00a0bytes. \u00c2\u00a0There are fewer Characters but some extra space for the root and two pages of the sparse class table. \u00c2\u00a0So there&#8217;s a significant increase in heap size of 14.5%, but not a huge increase given Spurs other advantages (*). \u00c2\u00a0Let&#8217;s take a look at the overheads<\/div>\n<div>\n<pre><span style=\"color: #808080;\"><span style=\"color: #808080;\">|<\/span>\u00c2\u00a0<span style=\"color: #6b6767;\">l<\/span>\u00c2\u00a0s z o d r\u00c2\u00a0<span style=\"color: #808080;\">|<\/span>\u00c2\u00a0\r\n<span style=\"color: #6b6767;\">l<\/span>\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0s\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0z\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0o\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0d\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0<span style=\"color: #800000;\">0<\/span><span style=\"color: #000000;\">.<\/span>\u00c2\u00a0\r\n<span style=\"color: #800000;\">self<\/span>\u00c2\u00a0<span style=\"color: #000080;\">allObjectsDo:<\/span>\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #000000;\">[<\/span>:<span style=\"color: #000080;\">j<\/span><span style=\"color: #808080;\">|<\/span>\u00c2\u00a0| n |\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0n\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0<span style=\"color: #800000;\">self<\/span>\u00c2\u00a0<span style=\"color: #000080;\">numSlotsOf:<\/span>\u00c2\u00a0j<span style=\"color: #000000;\">.<\/span>\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #808080;\">n<\/span>\u00c2\u00a0<span style=\"color: #000080;\">odd\u00c2\u00a0ifTrue:<\/span>\u00c2\u00a0<span style=\"color: #008000;\">[<\/span><span style=\"color: #6b6767;\">d<\/span>\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0d\u00c2\u00a0<span style=\"color: #000080;\">+<\/span>\u00c2\u00a0<span style=\"color: #800000;\">1<\/span><span style=\"color: #008000;\">]<\/span><span style=\"color: #000000;\">.<\/span> \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #008080;\">\"d is number of o<span style=\"text-decoration: underline;\">d<\/span>d-word sized objects, 138,919\"<\/span>\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #808080;\">n<\/span>\u00c2\u00a0<span style=\"color: #000080;\">&gt;=<\/span>\u00c2\u00a0<span style=\"color: #800000;\">self<\/span>\u00c2\u00a0<span style=\"color: #000080;\">numSlotsMask\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0ifTrue:<\/span>\u00c2\u00a0<span style=\"color: #008000;\">[<\/span><span style=\"color: #6b6767;\">l<\/span>\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0l\u00c2\u00a0<span style=\"color: #000080;\">+<\/span>\u00c2\u00a0<span style=\"color: #800000;\">1<\/span><span style=\"color: #008000;\">]<\/span> \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0  <span style=\"color: #008080;\">\"l is number of <span style=\"text-decoration: underline;\">l<\/span>arge objects with an overf<span style=\"text-decoration: underline;\">l<\/span>ow size field, 963\"<\/span>\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #000080;\">ifFalse:<\/span>\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #008000;\">[<\/span><span style=\"color: #808080;\">n<\/span>\u00c2\u00a0<span style=\"color: #000080;\">=<\/span>\u00c2\u00a0<span style=\"color: #800000;\">0<\/span>\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #000080;\">ifTrue:<\/span>\u00c2\u00a0<span style=\"color: #800080;\">[<\/span><span style=\"color: #6b6767;\">z<\/span>\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0z\u00c2\u00a0<span style=\"color: #000080;\">+<\/span>\u00c2\u00a0<span style=\"color: #800000;\">1<\/span><span style=\"color: #800080;\">]<\/span> \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0  <span style=\"color: #008080;\">\"z = <span style=\"text-decoration: underline;\">z<\/span>ero-sized objects, 10,642\"<\/span>\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #000080;\">ifFalse:<\/span>\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #800080;\">[<\/span><span style=\"color: #808080;\">n<\/span>\u00c2\u00a0<span style=\"color: #000080;\">=<\/span>\u00c2\u00a0<span style=\"color: #800000;\">1<\/span>\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #000080;\">ifTrue:<\/span>\u00c2\u00a0<span style=\"color: #800000;\">[<\/span><span style=\"color: #6b6767;\">o<\/span>\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0o\u00c2\u00a0<span style=\"color: #000080;\">+<\/span>\u00c2\u00a0<span style=\"color: #800000;\">1<\/span>]  <span style=\"color: #008080;\">\"o = <span style=\"text-decoration: underline;\">o<\/span>ne-slot sized objects, including 1,2,3 &amp; 4 byte strings, 54,502\"<\/span>\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #000080;\">ifFalse:<\/span>\u00c2\u00a0\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0<span style=\"color: #800000;\">[<\/span><span style=\"color: #6b6767;\">s<\/span>\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0s\u00c2\u00a0<span style=\"color: #000080;\">+<\/span>\u00c2\u00a0<span style=\"color: #800000;\">1<\/span>]<span style=\"color: #800080;\">]<\/span><span style=\"color: #008000;\">]<\/span><span style=\"color: #000000;\">]<\/span>. <span style=\"color: #008080;\">\"s = <span style=\"text-decoration: underline;\">s<\/span>mall objects with no overflow size field, 281,997\"<\/span>\u00c2\u00a0\r\n<span style=\"color: #6b6767;\">r<\/span>\u00c2\u00a0<b>:=<\/b>\u00c2\u00a0<span style=\"color: #000000;\">{<\/span>\u00c2\u00a0<span style=\"color: #6b6767;\">l<\/span><span style=\"color: #000000;\">.<\/span>\u00c2\u00a0<span style=\"color: #6b6767;\">s<\/span><span style=\"color: #000000;\">.<\/span>\u00c2\u00a0<span style=\"color: #6b6767;\">o<\/span><span style=\"color: #000000;\">.<\/span>\u00c2\u00a0<span style=\"color: #6b6767;\">z<\/span>\u00c2\u00a0<span style=\"color: #000000;\">}<\/span>. \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 <span style=\"color: #008080;\">\"sum of r is total number of objects\"<\/span>\u00c2\u00a0\r\n<span style=\"color: #6b6767;\">r<\/span><span style=\"color: #000080;\">,<\/span>\u00c2\u00a0<span style=\"color: #000000;\">{<\/span><span style=\"color: #6b6767;\">d<\/span><span style=\"color: #000000;\">}<\/span><span style=\"color: #000080;\">,<\/span>\u00c2\u00a0<span style=\"color: #000000;\">(<\/span><span style=\"color: #6b6767;\">r<\/span><span style=\"color: #000080;\">,<\/span>\u00c2\u00a0<span style=\"color: #000000;\">{<\/span><span style=\"color: #6b6767;\">d<\/span><span style=\"color: #000000;\">}<\/span>\u00c2\u00a0<span style=\"color: #000080;\">collect:<\/span>\u00c2\u00a0<span style=\"color: #008000;\">[<\/span><span style=\"color: #000000;\">:<\/span><span style=\"color: #000080;\">v<\/span><span style=\"color: #808080;\">|<\/span>\u00c2\u00a0<span style=\"color: #000080;\">v<\/span>\u00c2\u00a0*\u00c2\u00a0<span style=\"color: #800000;\">100.0<\/span>\u00c2\u00a0<span style=\"color: #000080;\">\/<\/span>\u00c2\u00a0<span style=\"color: #6b6767;\">r<\/span>\u00c2\u00a0<span style=\"color: #000080;\">sum<\/span>\u00c2\u00a0roundTo:\u00c2\u00a0<span style=\"color: #800000;\">0.01<\/span><span style=\"color: #008000;\">]<\/span><span style=\"color: #000000;\">)<\/span><span style=\"color: #000080;\">,<\/span>\u00c2\u00a0<span style=\"color: #000000;\">{<\/span>\u00c2\u00a0<span style=\"color: #6b6767;\">r<\/span>\u00c2\u00a0<span style=\"color: #000080;\">sum<\/span>\u00c2\u00a0<span style=\"color: #000000;\">}<\/span>\u00c2\u00a0\r\n\r\n<span style=\"color: #000000;\">=&gt; #(963 281997 54502 10642 138919 0.28 81.01 15.66 3.06 39.91 348104)<\/span><\/span><\/pre>\n<p>So the overhead for the forwarding pointer is z * 8 = (10642 * 8), a percentage overhead of 54376 * 100.0 \/ 17844440\u00c2\u00a0or 0.48%. \u00c2\u00a0The overhead for rounding-up to 64-bits is d * 4 = 138919\u00c2\u00a0* 4, a percentage overhead of 3.1%. \u00c2\u00a0The number of zero-sized objects rounded up to make room for their forwarding pointer is 10642, an overhead of 10642 * 8 * 100 \/ 17844440, or 0.48%.  Interestingly the number of odd slot objects is 15.7%, significantly less than the expected 50%. \u00c2\u00a0Do we software engineers like powers of two or does binary computing encourage them? The saving on Characters is almost negligible; there are only 256 characters in the image I started with (no static occurrences of wide characters), that&#8217;s 768 bytes + 1032 bytes for the Character table. \u00c2\u00a0So in summary, the forwarding pointer and 64-bit alignment impose a 3.6% overhead.  Spur loses space because it uses 8 bytes of header for almost all objects whereas the old format&#8217;s 1-word header for small instances of the compact classes manages to squeeze fully 62.5% of objects into the small header (the Squeak 4.3 image I used has 213947 1-word header out of 342533 objects).  So given how effective the old scheme is, 14.5% heap growth isn&#8217;t so bad.<\/p>\n<p>(*) <em>an earlier version of this post contained a dreadful clerical error.  I mistakenly subtracted the size of an empty space from the total Spur heap size and hence claimed a -2.4% shrinkage in heap size.  Apologies; forgive me.  One of the hazards of web publishing is the lack of review.<\/em><\/p>\n<p>I&#8217;d like to dedicate Spur to Andreas Raab, my dear friend and challenging and supportive colleague, who gave me the chance to implement Cog in the first place. \u00c2\u00a0Andreas died so young of a stroke earlier this year, but wonderfully he has a son. \u00c2\u00a0Kathleen may your life with Theodor be filled with joy! \u00c2\u00a0Andreas I miss you.<\/p>\n<\/div>\n<div class=\"pdf24Plugin-cp\"> \t<form name=\"pdf24Form0\" method=\"post\" action=\"https:\/\/doc2pdf.pdf24.org\/wordpress.php\" target=\"pdf24PopWin\" onsubmit=\"var pdf24Win = window.open('about:blank', 'pdf24PopWin', 'resizable=yes,scrollbars=yes,width=600,height=250,left='+(screen.width\/2-300)+',top='+(screen.height\/3-125)+''); pdf24Win.focus(); if(typeof pdf24OnCreatePDF === 'function'){void(pdf24OnCreatePDF(this,pdf24Win));}\"> \t\t<input type=\"hidden\" name=\"blogCharset\" value=\"Cw1x07UAAA==\" \/><input type=\"hidden\" name=\"blogPosts\" value=\"MwQA\" \/><input type=\"hidden\" name=\"blogUrl\" value=\"yygpKbDS1y8vL9fLzSxKzEtJTAIRevlF6frJ+elJOfnpAA==\" \/><input type=\"hidden\" name=\"blogName\" value=\"c85PV3DKyU8HAA==\" \/><input type=\"hidden\" name=\"blogValueEncoding\" value=\"gzdeflate base64\" \/><input type=\"hidden\" name=\"postId_0\" value=\"MzQ2BAA=\" \/><input type=\"hidden\" name=\"postTitle_0\" value=\"c1QILigtUkhPTSxSSMsvUnDOTwcA\" \/><input type=\"hidden\" name=\"postLink_0\" value=\"yygpKbDS1y8vL9fLzSxKzEtJTAIRevlF6frJ+elJOfnp+kYGhsb6Bpb6Bqb6ibrFBaVFuumpiUW6aflFukAl+gA=\" \/><input type=\"hidden\" name=\"postAuthor_0\" value=\"S0zJzcwDAA==\" \/><input type=\"hidden\" name=\"postDateTime_0\" value=\"MzIwNNY1sNQ1MFUwNLAysLQyNAUA\" \/><input type=\"hidden\" name=\"postContent_0\" value=\"7T3bcttGlu+pmn\/occoZKSFpkrpYlm2lHM840U4cp0aeSdVuzVY1iSaJCEAjaEAMPdmX\/ZL9lt0f23PpxkUSJZAGL3KYGScmCZw+fe43NF7EZ+dffH7S7z19fqXEWKciVVEqUx8+xSoJfWN8HQmZinAmPDkTP+uBSLWY6uRSwA9+GCf6yo\/G4rUeW0AG7xzpJJTRULWEidXQH\/lDGQQzMZbJQI6VGOogUMMUYHfE\/\/33\/\/7P+4kS6lffpAjq4pdMyUvx7Wvhm8gCBQSy4YSWTvxUiYkOlZADnaXPhZ+KiTRCAjpRqhLFUGSaqjBOEXcTy6ESOk790P8gcVUxyFKALhKZTlQiTKCnYqCGMjMKwOUbGUijPNynFLEm4O1EXanEyECYoYzaoUwu20MdwgKwUjDWgNwkFNOJP5y08D8BwhPySvueEbCWwwWATJQE2COAjVCESeXwUuwBRQMVAhNgYT+iW+zSwi293xIqAnBZTMTAzeIvMzHyVeARYhHcnU4SpQTsWZmWSKc+LOtlCV6do94CouH+ip\/sXoBELd4FUkn9GqvIgEwws75VkUqYjADpSkVjvHMw45sT38APxCW4UwIERuvnzKS0FAP5CXgI98KmhrBZIH40nBAdgH9ZkBrk22vpKcQtnSATJ8AjJMc\/3qJMRR4ueth9jCT04XrcKFLspoiJvT\/+cd+uShxJJ7CpsmxJEH3tlfBvISQQedx54hMSU+Asr++bTAY\/gQYYwKUlvvvxoiXOhZHTnK3Gsa7\/GEX26DEIWgQ4AS6hCnUyayNHiaQi0HB9R5yDkEVAQpA4hw4oAGw6A9oN8LsXKjwLdPriCfxXDGEZQA1JEzkqAB39BPVIDTPaN5Kk8+JJfPbZi\/gMVcxqlh78DJQBSsdAbNZ3lPHA6ApVmOyxPxrNmHrnrGgsWLhPVB3\/A8rXKNEh4KgjhRuWIG9kJDx7WQd\/aZe+sDgYUGuD3AeCgQIAnQ3uBCQboBz0xDCQxsB3e0hMRKzffe7Uzf5G3\/ae7z9HgsP2gbWSsB2A4rHoWWaM\/ATWsusTLij9\/khEOmp\/UImmqwgsIoEfLKV8YqgEjNqKtVO8ShIwh3o0QkxJsX1POWNG4uXYCN9LsjdAuqmy1A3AgCiyDZ5WJZqPtRjJBFips\/HEUn1k4X9QN9EKlDEsBP2jQ9BBVLo93FakU+KGveMa0cCEOKt5nVWtEhUSNQKSkgrKS9Q3YIykixm172UyVjkrSZ8li0eF17nqjDLcN27EwisDQwEF9Utz4oOikwgC\/QKGYfcth0Pc9h7KjLgCcvEXrZwukQfOBM1iOtwXkUJjqK2QZYFE00rySnYA7vdVOiM3Mi20LVHksAbSMhDEBMk5kQRLemTOyOVYHEAUjErRDCLuJe0AOwoGEyyDGAE+E8QLryjdiHAYdXCXuviUW34ZTOXM8EeyjIU4E50twZyuITW\/QYGz1gYcTAQmMWFlU1EWov0uGLenOuOOiBP\/Cr6FTYPzrjgC+EiSYlRyhW4EfwfqnDuV3SdFmpCgILWNJbccBGQOAq0vHdaE7whss56SAOR7RRCwOnAaeQ7SQduydEQDD9EJb+2CFc4aM4o0gFRZam5Q3ip+oCTs2\/jjiAIR0F6U+YHPogY7cTeRuTC8ynds9WFXVb7l9oE0p43EuSnxVnyJ3qE0l2wo7kQlN9SvAB+STGRBAIKcztjswoWh9Cnoksg2zbuDyEv82\/l7xvoNCkXLCljgg8QOwQWDYiUaGcI8GCjw2BFuCL0GuuhQpRPtWdXXnnW5cOPw0vDf8Rf01eCykjw+YloAqsiz\/Ft0mkNQshYZQYzRbPgBmwg0Mt3ChL2A8ywFXkywoY6tu71mtUhG6AeTJn4cO5YQUdu38tf6JTI8jC3x2AqSGuoI0XQxF8Ux0vjDH9SUpD49Bbk6pWBAoghY6pBxTzXIofJ8nZG8AygMONG8PLfxWG6OUE9Sn90sWK1hkFH0Mgg0hHxDMDX4C2sR31ksfKWDK9g5hs\/EMCAmMK2KTWRdEBkL8OlpiUVJFrUpNIJrkMjpLZE2SCoCKkV8ns4GYAgwLm5Vo2NyRcADjOuQthVMYI3XBc58GQWcGNsajjZvQMuxyVHNaRwAabyZU4SWGIP0RYU83h7HkLMG+YDwipMOe3uuYGA\/IJSWYS4\/10JGZDwgOgSvOnaXzAmZ4liBBYdtg36jnSZhB3GTBAXNMggiSE8lI8LP4OeYfhCq0eZzJmIwB5GfCyWZaJVb5uLTQouPaRIYfaDrCJTBx1gll2\/GGm0Xy1eL4iQn8PgBF6uKJSMgMRRNUjKsCC2xJgMNS6DHmcpjlZnOKgYfqZ\/hjQGQM0MyF7H+WAK34YZqUFQOsDFHw1AI2JjbkBGaUPivi2YjNIE5d9\/9FZeNyJOSK8EAiw1qqMDdgJ4OUUWC2deMsl08rDL8dpm4k\/RACvqllFFH\/vAygk164iLOErE3Vp7np19\/vV+EPJTmAk1IAxTYjyFcDVEERI838iyMznIdnYKzbF9GegoaoYaTCPkwK+DeoRyjIEPn5rlgxYChB0acg5WB\/2BaiTaWXF\/FNEpxfNjGsBrzUCtJJWaxpJyXmIlpGvAh5DQUAjkzTPwBiTsG4okq0CXPhl4KluP189UuQlDjVAaX8\/dEJmHgYgpAXQc21KDk\/Xo0i7vyFUVS7JCl6B23MXrOg+ATG0yPdFJy+7jB678kCnFnHeZgJNeatOwWJagFG28OykDfmUCIYh4GufVLps7gPtmU4XogCQlK5g2yUDhPFuhpHl1y6gTWQOKfAgPU3TxL9UOAt88oezOQV7saskOiH+AbKdcAcLBVcOT+pRI\/YkBKt\/0NEADtCXInQskAWz+HCUYaLUJkrEnNdJH4oXcEgSys1yhRoN5RCqtnxinl+Z\/\/wsmO3YBVo1dWM6eYkXFhB6l+0H1eYh0lBRTL801\/p0S7kiC64I2dufQL0eGbKcrVcL2LR25N\/74tOFew6B9v81iTYhfMmQt37QkbcfsBhk1udfWrKxJYY0uxHBCDAzX0pICulUzOiSpVDVQNk5WUDBx9ZpS5QRVpv6JQMZXjXDA4hMR9jwOQhaCCCG3B8xOssjA7KVBmIR2mYBZcsMzyqSNgJlkVCwXdBFgbuxivPpJ+YHJby\/dPfJD4ZDiZ5dUCo\/Az0G2PwgkZzYD3IFueZ5MKIF0iC\/SwIqULygAEyI\/BnXj7lN04DGg1yINCHyug5dKJ1SAwt8PLNiqsdwVCC2pjs4XXBTXRriToOFiwWQbBylcT\/Sz2MAWD30KmSZlUDCGEGMBzhbmbZS0bTpH4zQB6AbuU8V75xrelRD9qFwmBuRHTzl3n\/g2ypyiiXLbBhXvirRnUbZA0qpy0xFsQV1wIyP8NBhyvA22yRLVc7lQll9vS2GaTWCEqkjEXZ2NUjkknVTcoUJkVAg\/BWqKBuUj2kvDn6XKLQhdI1loVLWIvHFyL4m15oBLMWq\/lYIMJxORiKiOnHiVTBwi2Kjyb2nooegUS7tL+aE+0bwRU9UhwvYcBf4iMxIyntDUOcH7Q1hg6cX4hBcYkLx+ByQJs0tl30kzODXH4HO97dPbiiTx7BSqCxXGyIU5FbMxlZgaSHZbAEOuWVUtHxi8jAwuCT59QmHPxbrHPVqKMQWGmGDorO\/UXPIQEMXS78HQTWxuqSAlFcBQjFg6VFrbRKe9BJz6EecBS9Pnl+KJ90r0eK7PznFL5Y+T\/ipaawTJPrKVGtuACFR8Ou6Tc2oqFq+Wwv\/BdBVQMtFeK2vATQMUyFCJOdcOSa+I6kud7Jd23gIo4w\/MSdAUMBWs2RBGfKnSOzFgeApYe9IkC5YibdlwKWnochBHJ2VvahMSKQqldQga+16PMuwiAKOzGzJ\/LLWhYfIweSUfOrQD82SdbIyEuUthJ6YgLbWvwZUcFESRk+TdwpLBh4I+xxlUWKUbYpVDY2sI1UHH91ImgwZiXqkV7X+7nnrBYs5U7IyuWMqFivpVyq+85MpXlKYfFqnqaxx\/Rdb0ueM8FPYqUnRUZK7qzFCGB8mPkS7W93IDGzE10+HZ5qyJcgWODyh6vvD8MGCNdRXmmwDCNfOwvAbgsyrADZjD8u4m6TQ0N8sSmWNV4Yj5lylUYfd02ut1bxIc69tW9EG0cFkEi63oJ1ToVmTZe+LnNYjvE8xf+GewNc3YUCy5gkijbKibILtW5b8pGR5xzWZhvskrKhUVIGOHuNL0ukpocLqpmorxsqG4U968ja6UX83FbMbmNklw1LKUbiBI6\/qqcOrg5O2+B9eKJf5Zn05Fyvq5oZlR9wR1JmXLV2RK7i+4IG5aSWeft2po\/yKBl+jX7RvUKkc5iRW7Ez8vkYHPY8hBvWEAhIG25Ng+lbS2BfUTyWVa4OZuze3Jl+FK\/SXv2GttpquRmZFXLFWdjexrI4yid3922hPGNpXSizkAO39HybylBxDuJFf6ZTXfsJ\/wBbi\/9bjHgHAC\/\/8Nn9MvgjJd5Nzp98WRw9sLEoNMmnQXg\/MEO6+RUfN6lf54\/OmN4eMn8C0\/wQq3j+67LASIid116wiAfiS5aIq6\/830962\/5O1bIPcyfSj7XMX6fb+kXnF\/ktgPwuunELsfKdg3KPQAO5wOYEq\/vgdJhMH\/47MjKJH8+LsOhtkl5T0Cua2g8LV1PdfY9LqDs5wjQnSDptrBCeb+7+w+fnbTBdxcgqBwyd0mxh6Fvn40dpgOlj2DIUBks4F6\/3TvKs1uXup\/yj5\/jxQGkKBhig2AZNy\/COYtNFG1RhG\/h5hFXr6rYwg7Jm+eJdV7vLONKRZIrh92jBUQZ\/33Xn1qgvgjS5\/fpBF0I2sv5N+tuXTTvuvDEXZgmmaqH7fg+bBujUI7cf9ZacK8WEfdqrWhUMGqEwLmNxMmh70hqT5sFfK\/xtRvfb3ZZlIOFZKEW3U9qgWt4K2AFXkXeabM76R0nb9yFT9CZY\/D0Uzkeo\/DJTajYkMyWY7EuoZLUx+gkw0wMrXRpDgxMFpZAA0VWexTIsWlxWR1u5nKrpMGfYZBhubBl6zPhwI\/YjkoLoBqIQbjGNrE09+AMPP4A2EQ40wAAyBnk2TvNPeSWFy\/s4kU0RkA14RYPoegR5FxAM50U02wUhtqBoSnTAzCgQgrWdzD9MLaQ72HxSKan4gsZxs9d02qf1zc\/oWulxS2O+AWP5VAKSZf9JcbWRoITf3glpXJ5b9gWUqIsHCjq1uWhXp6ZYCph5\/SOMKY\/tgSz1ZrDPDt0pETK87YTxaMmtrCG+6B0ybZ293zzo6M10cqtTSAooAAICsuM++XWZdGvulTKtjBBoriH06KCAdWNPdtmoWq2a6hbx28Z6arnXOexufVYoyceccPKpwKTmVD3wHCeXZ1Buhb2Q8YzVYpmpbi0wM3DPOCoFFckjrRA9phnwefRnaUIqy6eP3KNHLccIgR8bdlVaRaJJIjKv66wm6cJjE5+1bBc27xRuJCugcx10gFnYSXNRk2kMUuAl1CVEtvW5SkSypaQnuV06HrsD\/\/Haw763\/g2A3jrxnZsuwYFthLqY5C\/+nB\/8PO7hSL+xcIilwF0xUuwIhg3esVg0t8jTgQ9TozEe4hbxBsZAAtIx\/dvX1H0ABhO9RVWyoEkNSh1x7iFdSewPgCbAygq97f2SsZnf348dDAfXAnWW+L5axwq+TUVr7BtTLUr\/v4ixToJr3T7KoewCiUf9y91zW7OAXjkANajq3KGF1OF3ArPgX3ceto6sbnPLQx4Jva+3s9tiFt6PoV7XdHGOqQ1QffcIXp9vPzIlYPvvfwYLu8fsEu87+L+IVyMg6zV9OfRitRphREthh0Nx7Kfo5fCYXW0ZDUAd+pbE8x\/X4GXZeMlvhJIEMqiL+xgoMSCcZsxcAMNy7JFrCuvWSF\/LcUazlbq+44HkbCsQK3IY19M\/FH6ANKcVe3\/rTSXN9KnHyAlmGK\/OrLl4HyeLFCpDajKI89Fmx5DfAZsnmMWcFKd7QEQYSlWRailaPXWWNW4MbjqnFA+7GIr1WBHRpjJuOnjYm0O+WBrOPLDvWwq\/KcAFqPGCoqnHBh6\/tWN8PDeyJD3XYoKOTLkX9\/o5AIbcU3Gh5A+EcyF5cKFq00iwxDfILGXwKdokTSJUwF15UH0+6JV7BoMkfj+4hvINeYEKG8vvjkV8M9v4uRUOFaK++p4Ny74DYvL6FNRiAc6Q6GezQuo74P+m6vVLozGjQt+Wx6F\/mm1OXb\/LUwCKtV\/PAkONk+Co1MnRUtj8WnKRamVWguV20VDnKJqzkHkfWWylHa997TyMBM1L20fcImd+ObbRM2WvvmtTC5do2qJ2\/8GrhWrbh8B4kcfH3Nd+vbzMMzSOzK3QHFxqJ\/3ifEhnXoZwt2\/Lmrcl2gcJSrNkuj9LFavm+seFXlbZn75HtKF5jtI9sIlk97\/bGybdTpMHxv+3J2+ALPvZ\/jmw3e3+zdZENRPYvZXFghZtL7ahCR8TOz5SQjDornsAxKDOYG8zVWfcKaG\/y7\/\/X25S5BoHVKedihCPwiw\/2EfI2iVvipHnK4XUSmx8qPxvW6\/a7tFAzXC5yVoCJyiAxx9reShnHru9buHXdeEszkuTzReOxtBXcdQBDgQD8sHAcYdgwTHWpV9sMfDWe58BpQeb0Cc6RFhMVJTMVNYD6axQpqEtGcaVIbxcSYjkDjDTA+HfgMr5XQbyRCfsDw+vOQgEoOi5NI+7arzMdoYVskf1qtsn5\/0xzFMO3uDLZ080yk1RO2D9tWfsAUWShr8zegwkf7REc1DGhoSuzGLGt26Os4EAcQctBsMBWCVtec+HY0VBlzZ8i\/U154iJtJYfLDBlIMoPxs09yEnagBOfYOPPMwTZTe1R0e\/8LNaY5ozNrr8xBswujilxT3nXpqbByr6ke1TTnSs8MncGU3eY52Hz0RwvT73qCE98oNdzlOHkq2JYOJaHpmr1EMkkGBIq9oSCBsSvKc0bEpT741n+7azu0QJIm8oYJ26SbxQGtc26+TqET+8e\/+XU\/GeH76kUS6TxbFO7LP6Azm8nMrE4yN0UmwECxMHPj8zfVEYL+4518PMPubNiSsfL\/Hejth+539D3Xu0ZGMtJD4wRhaWTwFCx2XcQwSDmejXW3BqzYBF3Y7MjRU2kJOxHcDgB7\/zbe7z8J1drLPVU2gy9mvnEGudF7NS9lsjXv54cPz0+ClciJPzDUMkc9tbBdB+s0CHZA6bhYku5mIR41MLKut3w5iChq6CSQcNA\/WS5ulZmMeGaRo2LPdk3t80x\/0lzMinNAk8wmGarR0Fbj5HxYwrabrNbZpSx0r7+mWznO7Wm7FoaB8uAvwTnkaoU3c4WKTGfLrktWcs+HGZdYVBH+frB2enLz8+MF9lUU5NOSv6ru72Ousm\/MdY8a2nv5vCdLll4zWoRdLLztqTvu+rDwZ116\/VS8bbzQhWvarxyuKZlT\/n0Hvzptvd0IMb7xp8nGYBHjWWEq6EOYdd\/B9ciOYeJ6n+HlEpQ3kbGbxrsllR2RomJ+\/olM3t9GnLZuTNmZ3t9hBN5Jo7E13HRB\/jXz+dqdtnWxrDLlcsa0aEV1JcXK17es2nuRLVygO\/a81HK0fK2tyTnkUsNQzWHrAuXSLdmcN7pQ7pWlva1jxZUEHyEBziJmz2VxstJDdptUUz+asb3ufeeLstgg0ltKU+qk7tayucqcCHGJQpDgQuma\/KQULFebFxoto2L2iInKkW7p0DsTs9vSN+4CGUUk+V2vEnpSupK9vp\/N7s7GpaYqvJvOr5hMKAIZ\/BJ\/wEnK2FbLtW5Ndv0CCuPT4cfeLlzSbPN1k6uOhsnmH3KuUmDk1Z0sTX2pM\/wufwT7fHc9u1\/mNjXG64VXe8TtKKlfO\/VpP7P+o\/2H1AwVgoY\/NoY4RaLv4IN9WUyB31NxiE\/aiadtS97Qv2xS5cXEPed+LA7W1oUuLLZk3vYa3NbncK3tTM1WoLM\/gE2ULFmaZLgQk+iCmy+KE5kWWmFJu2SE1LWHuNxuhksce6Hr7J6u5M1lqwXNA9NG3P8hMEH4ZBKxDnl7XQqzT8VOwd7lPB0D6j9o+3Yqz5gG7+Yg\/PbRETzx60Ti9CABXFivP+AzPlmx1UWnkLsalpnXpmvfkx\/tX26RuJNG3y\/M9tLxjQmY3rrBjskrjfXxK3cJGj8XzOeTQ6TtOUjxOrV7BaSJ3\/uQWF4AX1eisqwQWbLvA1sWPmEx+sut7YaVc0fEgTAjuXsh3PRu2qZb+batmuINZQrLy309WtKRMt+I6WT6NMVLe7O81fIUUn1dAs3pheBVl+d8L2GaFdKadBg\/TQSjkHG3kl00pOhTt5qFO7D7SIvDMuO+PyEXXiBY3LP7dzUnZF89CNP4jWPzpqOqtSv2R+ogwHOu6lAjrxnuDBePaLlRmkDUz7LTSquezxSZuss3S247CnhqfIDzZbkd5El2kJSd156J1KbeKsvVXNoXebxW79c+N1HyRauI2+rW3vur2VFTQaO1v1nuhVHiHHBwur0y0+JzNHlj2CPUx4W0+hLLDtnW7v0asFlv3T7T3LtcDy4HR7DzPNsfT0Gz8ITjf0evsFn3k8XfcZtidVs4lvdHOxCJ5jXrJEjR0f9BHN7YqtaQyh5cM1sibNEUYaxY+8LoNKv\/Ez5hd5KXMJkYMmEeE3jStvSQblyj9o1pxs0asI135UxCtrE+iw1al7\/4M9EmLsX6mIa01Y8o4yfAcX\/liqPJmO2MPzJk6LsyZkgG80n9VM3P1oGGQe1rRiOaSTKexh\/6ZS4ersi\/PIT30Z4BJp6c2FfIC+Rbm0CUC5JgojPOE\/zV+h5vEmS6+tp3epSHElgwy2F8eJjhN8HUSOLXOvI97KmRjKzCA9v329SCVuO0+357Nhm4WJRI5j5b1e1iztzuVePoRZ47HcS1HoSiareAWd32xSDYims7hhRhKmf8rML+dR+qcdM+98D\/yOnU0FAGSNhQsRseU9RM\/77WsxQSsdGeFlCb1dKn9B0jpfP\/NRMf2a+329ba5\/dhcpBzZfBYszM\/kbOX48xR8kbRUHndcNJra0r71ksLX1J0C5usPrSRZdNsz3bR9qX2CcdiVWrr3VJm5DD3Jt6VFwO3+3qcmRj05Jt94GxzquuN8N+cltVpCXa53y\/eTGsFYovHiK26um2ykNlrZKUW56uokncT6qsL6uaZ7i7RxUuH0PGTfi+yryaoy2nGzKYYstfCvdg9GHrzYc322r4q62Fr5T3p3yblESXEchlj874MsGB\/r2P41o4CNGD3bmZLVHeG20xLezFhuwFrsc+mOeoNrl0LsceheK3+s7dzH4Lgb\/XSXQDzzW3QW5v+cgd3l13AWTa2lX7oLJXTD5uyzBTHSSfrLnh5Te6hsomZQeFVj7QOOSz51s+jVrTdikRp9TyMHhExyNBbU51KYGjXOA\/vY+6yCWfuRkado39zrqZZ6gqn1q2su1HtC0xpdOPJzX+VlwkR\/cGyE0fDaDcxn+SMTaj1KVmBY\/L0bPhAFGQusteifUg3njQt1TQ042FUosbxCXcRu\/ow7PMpPb28FYf8fW5msaG2VtXVvVaPy2irc91zU9qzm6aDrxA7X2tzyLBr3QdtdIViWAjZVHlksG1v+C360286vi8sYs\/CqODVvXiWDXfG4Z6JM4UWefvfD8q7MXUkwSNXr5aJKm8emTJ9PptDPTWZoNVGeowydTmQ4nX1+9bP\/1uzevjv89e\/P+L0DADE+UgBQCX\/QUgMn++sUTeUbyef7F5yf93tPnV0oMtE5NmlBPWowSHfKBFIHnjrZPdX7ihf3GaHEuhriXiZ4KwENMJ\/C1e5DX3kDnedjzLSZKxh1a+b28xEMrxpkyxn4zUYkSvhHS83x87ldCrnOlEjx3AwCrSMAOY5kAehay+tU3KT4rfPFLpuSlOz0jUUAwo6KUnh5m4K\/EKEvgnkR4CmCkGS+VIr58G6yb4FkiU3o1lgizIPXjgDA\/4TcStOhUEnvFRALN4OZASQMgIsUHg4gYP5aPC9H0ZyoTDzBtCROroT\/yhzIIZvSjH8IqIWCLGwnkh5kYKNioOu2IC3qzAAI76NO54GZmUhUCdh9UottIWC8\/QmU4zGJfGdE7dthatPNDQxgj3sXhtd8KFF3e2RL0ThWFb1VBgjto8FcibwL7t+eXy8AfR7gFpvU542x\/tDj7qRU1OjplqLMEDy0JQIQKhJGKfFA6L2ZJOh9Hy1vYD9DpIs4A6dcTmcgh5s3Ez4MuIeGHofLoBBU6UwXWonQ6lQBKpnB1JPotFLIE2CkuQuDOOSwwdmCyaDiR0Vh5LXHQuxXiTYA9xk58r4qtWwnO9cKUFcM8t1sFwXSKGYrM0NPwVsYPOwewtBwrAAUC7kfwI65ycNg\/OjjAvzlpJoGY4b29o6OTo8NuF3+1lD486hzlVE9Er9c5eMrH64gYT6MhGOAu0eZYy1P6+3trBiqIGHFweNLrHpZwaJWReHpyCP8USJSVHkkyUlNYucS+QYYWJnQiUT2uJwFrRYKcTkEeAY2cknAdihY9oA38AIPHK12QzUhUzgsACWJLuhileCwQ8l6hJCEzcrPVO+wcPW4RNhGuKSbZWBWX85lFKHuAARkY6V0BQEJp78t9XrwsAylbvkDrSzQgZGWtmTNlKn\/2Au3+3Z67Xr2WnMmdTicoXWnEB6GFJ5K5t926wB8+q79EHsDQeje++XDjG33jG+\/GN00cFtu5f0O3hfBzly8\/k\/6OleLP+rSyyI1Qola34\/Tu5X5eqJ6Py\/4mIvHb7RhFC5J6IcJEWXgRQOTxblQmy8+LsKkWBfNNR7VR0x4JWbUAfcdtC7341ZunDt79iH11Hy4rOWfXEV3cmwrd\/8U91W8PY7Pi+DdduTwFf9D2IEZKKL47FRilJHjQVYmsXhu9mSiHSOCOegcnrWe9Z4\/WIj74APzL2pxaSmnwdXu3b+IGxVcjxXONerA5KW5CPoW471VgVQmtL6COYjIZqzzz4PP+IooDRovDguSLohUKl1vi2fHB3RIuavuc27o1NWHW1\/kFCqL1ta++5nU\/cl8LU7OWIuZHetVTxA\/zFPHD2hQxx3gBRbxPzT6IlwvoliPC9eQYLX+3dXzYf7RuVjeiOEuiUU+CVqpavZXvfHXKt4AX1POUT69C+f55r9bohbTGYR+ptoGg4nrMxOflUgrf6rcOxBcyjJ\/b+hHAp1eUt8TRYeuo27x+PRgN\/AgdXUDQzN05dNOCVs\/MN1mM79wn2mYh0Xb0wnpeNdiKNAdbwbXYqX\/Saz179vTRAoWNZB5T7t7yvxYuztTPietJUVPwdMPwPtTxRATzv3KxWY9O3yecWYjJQEKdBZ3KoJzDsvQtI1h363WrNrX+tVBhoh7lm8Kt5jOTD4Ai91ti+CIAWWgoF88ROK1FnKuFK4P14OGVX9bwLd1up1sb+JPaNiOpDROUtHQt9bje69MaaWKn22Q1bX9Forw6UtUXf3oVzJ1Xv8TimPh879nxAbpc8LgQQUIACXkapGlYp3vWeya6nf6JOOkB4UXvqHN8LA46XfjXs86znm025VSstsrjM+72FP3j+T1ENNYfxJfiBCKLPV4ePuy3hMRW2FBRK6cABKb86PDg6TFcRLIsnlRaW7BMt3N48jjvblVRIHGDxdvcU+UWqUEUPAB4CCjw1kmbxOEdSBx0eqVFCj9zozNsrvVxQ2w\/JVqHjiZ+MocqRIyWq0u5hXMSMQVK+6dWot29wPZpoqg9H8x4cKDwhZ4nKNVwGOJiR52nj1vllhzcFihDPfrItvtjuBo2ctS1W\/+zFlNIQvQonWILUUVjiPuwdxj4sMlYT\/Hv2BecasTNw5dsD\/xIJjPqxGbUc1cRdqORvrBI+LVAehp5hT\/pqNyQxNGEINQmFZEaB\/7YHwTqOTcVqYOpI0C5f3QshqV7GHXulJ6DPsgEd0Ax6B4EoQaHFIbUJ00SwIT7mFPfUyUoIIw4qJB3EJ8eu2b8V8CCg\/61Xn6O8rX2J+ACGh3C7lvzdAE7qteb+jihoOkNIwed48e5LACPsespAvjNvUxloPhlJHB7ht86NItXuCCOloiVmNx23qsjJ\/mGe1zNL8EwFNL7EdDPEQ3vpf76MOXuL3wdyogasSD35pdMKQz0M5y8OO53jh6X4jIA5cZVCLJdag+\/sdMlRev9HHcH6ADC\/d7Bs8On1xDUGb3ShnvyboV9JJi2\/WKcl1GjEXwPH\/NdmyEIIM6ltLjrzI3ocaKnIC2+iSw9aPBmABwAc0fGbu\/LffFChWegJ0pC7gMoAJMMpENMFxDcGCluO\/WAuhQevjMHaAGkUgmOowiVJDpBzRWhb7BJjeJsskFKwuRVZnlwpTBOZ64r78aFOOoluSia6ChUE5RtZIsf0vLtfufwsTCTxI8u5bjadQccXsXgMca+4pEIpJkI8ft3UTFKJD\/IhF\/EM1UDEWeDwDcTFGaf5SiQw0sKx9WVr6ZALKCQo5gbr\/DYUgDrwUD69GIiQh6+eBV5JJJ\/k3LQEuEMrpAge4mvcAgI\/oB+QhyHJmdMn00WxzohhlKEJ8eZwpkS4Lkk\/FlCJyiwuEA++CNe67EzFCM\/AUbFgLvKh1sIDc8HugHfZ2DMx8QCLL5oQN6xnPg8g088rDDVmAiztBO5aOLBzUP9VaaTQIEkhnKGMEGP\/ZFiuwQGUHugYwNFT544c\/Wznv2xghIJisG7rSTy8ML\/Aw==\" \/> \t\t<a href=\"https:\/\/www.pdf24.org\" target=\"_blank\" title=\"www.pdf24.org\" rel=\"nofollow\"><img src=\"http:\/\/www.mirandabanda.org\/cogblog\/wp-content\/plugins\/pdf24-post-to-pdf\/img\/pdf_32x32.png\" alt=\"\" border=\"0\" height=\"32\" \/><\/a> \t\t<span class=\"pdf24Plugin-cp-space\">&nbsp;&nbsp;<\/span> \t\t<span class=\"pdf24Plugin-cp-text\">Send article as PDF<\/span> \t\t<span class=\"pdf24Plugin-cp-space\">&nbsp;&nbsp;<\/span> \t\t<input class=\"pdf24Plugin-cp-input\" style=\"margin: 0px;\" type=\"text\" name=\"sendEmailTo\" placeholder=\"Enter email address\" \/> \t\t<input class=\"pdf24Plugin-cp-submit\" style=\"margin: 0px;\" type=\"submit\" value=\"Send\" \/> \t<\/form> <\/div>","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve got tentative permission at my day job to work on improving Cog&#8217;s performance, specifically garbage collection. \u00c2\u00a0The existing Squeak GC isn&#8217;t much to write home about; it has an interesting attempt at space optimization but is rather slow because it&#8217;s based on a pointer-reversal scan-mark-compact algorithm which, while it avoids the space overhead of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,7],"tags":[],"_links":{"self":[{"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/posts\/131"}],"collection":[{"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/comments?post=131"}],"version-history":[{"count":22,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/posts\/131\/revisions"}],"predecessor-version":[{"id":179,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/posts\/131\/revisions\/179"}],"wp:attachment":[{"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/media?parent=131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/categories?post=131"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.mirandabanda.org\/cogblog\/wp-json\/wp\/v2\/tags?post=131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}