<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've taken down the 3021 and 3024 VMs as their LargeIntegers code was badly broken. That'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 & 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'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:'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>>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'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>>isNormalized: for forwarders, no longer assuming that</div>
<div>if its arg isn'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>