<div dir="ltr">...at <a href="http://www.mirandabanda.org/files/Cog/VM/VM.r3029/">http://www.mirandabanda.org/files/Cog/VM/VM.r3029/</a>.<br clear="all"><div><br></div><div>I&#39;ve taken down the 3021 and 3024 VMs as their LargeIntegers code was badly broken.  That&#39;s fixed now.  The major changes are that Spur now correctly handles forwarding in primitives invoked from machine code, and that sends to Characters have the expected performance.</div>
<div><br></div><div><div><br></div><div>CogVM binaries as per VMMaker.oscog-eem.797/r3029</div><div><br></div><div><br></div><div>Fix mixup of old &amp; young spaces in primitiveVMParameter, and</div><div>comment some new parameters.</div>
<div><br></div><div>Fix return types for positive[64/32]BitValueOf:.</div><div>positive32BitValueOf: must answer a usqInt,</div><div>positive64BitValueOf: must answer a usqLong.</div><div><br></div><div>Use positiveMachineIntegerValueOf: to decode arg in primitiveNewWithArg</div>
<div>and ensure positiveMachineIntegerValueOf: is inlined there-in.</div><div><br></div><div><br></div><div>Spur:</div><div>Fix inline cache for Characters in Spur. Existing code failed all machine code</div><div>sends to characters, creating PICs at those send sites which failed back to the</div>
<div>interpreter.</div><div><br></div><div>Implement forwarder following on primitive failure for all primitive calls from</div><div>machine code.  Allow the JIT to not compile primitiveDoNamedPrimitiveWithArgs</div><div>
to avoid any potential complications.</div><div><br></div><div>Have spur&#39;s fetchClassOfNonImm: answer nilObj for forwarders to avoid assert</div><div>fails.  Fix assert fails in updateStateOfSpouseContextForFrame:WithSP:</div>
<div>and elsewhere with forwarders.</div><div><br></div><div>Add read barriers to primitiveSuspend and synchronousSignal:&#39;s myList</div><div>access, because the process list manipulation routines do no checking.  Add</div>
<div>assert checks for forwarders in the process list manipulation routines.</div><div><br></div><div>Fix StackInterpreter&gt;&gt;actuallyFollowNecessaryForwardingInMethod:literalCount:</div><div>so that it no longer corrupts the methodClassAssociation.</div>
<div><br></div><div>Rewrite all the semaphore installing primitives to fail if the semaphore arg is</div><div>neither a semaphore or nil instead of assuming if its not a semaphore it must be</div><div>nil, so as to fail and retry when semaphores are forwarded (as they are when</div>
<div>Semaphore is redefined).</div><div><br></div><div>Implement isSemaphoreOop:/Obj: in the object memories to abstract away the code.</div><div>Base Spur&#39;s on the class index of splObj: ClassSemaphore, avoiding the table</div>
<div>lookup to derive the class.  Make checkForEventsMayContextSwitch: treat all its</div><div>semaphores consistently.</div><div><br></div><div>These changes allow Cog Spur to redefine Process and/or Semaphore and not hang.</div>
<div><br></div><div>Fix sign and overflow issues in instantiating larger objects</div><div>and determining the size of large instances.</div><div><br></div><div>Fix some freeChunk accesses that used fetchPointer:ofObject:.</div>
<div><br></div><div>Make sure forwarders have accurate slot counts, bumping it to 1 if it was zero.</div><div><br></div><div><br></div><div>Plugins:</div><div>Fix LargeIntegersPlugin&gt;&gt;isNormalized: for forwarders, no longer assuming that</div>
<div>if its arg isn&#39;t a SmallInteger it must be a large integer.  Squash an assert</div><div>fail in lengthOf:format: on forwarders by using numSlotsOfAny:.</div><div><br></div><div>Fix the shift for divide issues in the LargeIntegersPlugin.</div>
<div><br></div><div>Change the SmartSyntaxPluginCodeGenerator to generate</div><div>code that ifdefs out the remapOop:in: rigmarole on Spur.</div><div><br></div><div><br></div><div>Windows:</div><div>Set the IMAGE_FILE_LARGE_ADDRESS_AWARE flag in the image header of the Windows</div>
<div>executables to allow e.g. Spur to allocate more than 2Gb.</div><div><br></div><div><br></div><div>Slang:</div><div>Rip out the UseRightShiftForDivide optimization.  It gets unsigned division</div><div>wrong, and C compilers can and will optimize this correctly themselves.</div>
<div><br></div></div>-- <br>best,<div>Eliot</div>
</div>