<div dir="ltr"><div>... at <a href="http://www.mirandabanda.org/files/Cog/VM/VM.r3684">http://www.mirandabanda.org/files/Cog/VM/VM.r3684</a></div><div><br></div><div>CogVM binaries as per VMMaker.oscog-eem.1834/r3684</div><div><br></div><div>General:</div><div>Correct undue sign extension wile promoting 32 to 64 bits int in</div><div>fetchLong64:ofObject: This was causing trouble in non spur object memory (V3).</div><div><br></div><div>Fix slowdown of update on 64-bit x64 by using int variables for the tides in</div><div>sqExternalSemaphores.c and inline assembler for the sqCompareAndSwap in</div><div>sqAtomicOps.h.</div><div><br></div><div>Fix slips in offset time primitives.  They need to pop argumentCount + 1, not</div><div>argumentCount.</div><div><br></div><div>Define an optional primitive as the fast primitive fail code so that unselected</div><div>optional primitives are in the prmitiveTable as fast primitive fails.</div><div><br></div><div><br></div><div>Spur:</div><div>Have WideString&gt;&gt;at: fail to answer an out-of-range character in the</div><div>interpreter primitive (as well as in the JIT).</div><div><br></div><div>Fix bug in following state on primitive failure. The old code would</div><div>always follow to depth 1, even if the accessor depth was 0.</div><div>Hard-code primitiveSize&#39;s depth to 0 (accessing length in at:[put:]</div><div>and size causes the stack depth computation to answer 1 instead of</div><div>0 for these primitives.</div><div><br></div><div>Fix assert and dequeueMourner for case where mournQueue is nil.</div><div><br></div><div>- fixed a bug in receiver accessing in immutability primitive for</div><div>  mirror primitive.</div><div><br></div><div>- change primitiveSetOrHasIdentityHash to patch the class table if</div><div>  the new hash is set to a behavior (the primitive knows it&#39;s a</div><div>  behavior if the second (optional) argument is true)</div><div>  For example:</div><div><span class="" style="white-space:pre">        </span>FullBlockClosure tryPrimitive: 161 withArgs: {38.true}</div><div><br></div><div>No longer follow the method and context fields in a closure in</div><div>activateNewClosureMethod:numArgs:mayContextSwitch:; the caller will</div><div>have failed if these are forwarders, so no need to check again.</div><div><br></div><div><br></div><div>Cogit:</div><div>Add a primitive that answers pc map data for methods which can be</div><div>used to better decorate methods in the VM Profiler.  Refactor the pc</div><div>map enumeration facilities so that the Sista pic data primitive can</div><div>share the same enumerator.  Do this by collapsing the</div><div>isBackwardBranch and annotation parameters into a single parameter.</div><div><br></div><div>Follow selectors in the openPICList post Spur become.</div><div><br></div><div>Fix the ARM&#39;s caller-saved register mask now that we can name all the actual</div><div>registers.</div><div><br></div><div>Reworked machine code generation of immutability so for common stores it</div><div>uses a single trampoline for both store checks and immutability checks.</div><div><br></div><div>- improved support for register allocation: branch merge</div><div>  successfully compiled with register moved instead of spilling.</div><div><br></div><div>Sista Cogit:</div><div>Don&#39;t bother to add counters to conditional jumps implementing and:</div><div>and or:.  Added the remote inst var access bytecode in sista V1</div><div>bytecode set without interfering with existing code.</div><div><br></div><div><br></div><div>Plugins:</div><div>Upgrade LargeIntegersPlugin to v2.0</div><div>LargeInteger primitives now deal with 32-bits digits.  No change to image code.</div><div><br></div><div>Memory is 8 bytes aligned on Spur. When storing 32/64 bits large</div><div>integers values, allways fill the eight bytes whatever the</div><div>effectivily used size, rather than bother with dissertion of size.</div><div><br></div><div>Generate integer type checking as C macros rather than direct/indirect</div><div>interpreterProxy function call in plugins. This, and 32-bit accessing mean</div><div>singificantly faster large integer arithmetic.</div><div><br></div><div>Fix primAlienReplace to use positiveMachineIntegerValueOf: instead of</div><div>positive32BitValueOf:.</div><div><br></div><div>BitBltPlugin operates on 32bit word units, therefore it&#39;s better to declare its</div><div>operands as &#39;unsigned int&#39; rather than sqInt.  On 32bit VM, this doesn&#39;t change</div><div>anything, but on 64bits spur, it makes this snippet work:</div><div><br></div><div>    | wideString source pos blt expectedWideString |</div><div>    source := #[1 64 255 14 1 64 48 251].</div><div>    expectedWideString := WideString fromByteArray: source.</div><div>    wideString := WideString new: source size // 4.</div><div>    pos := 0.</div><div>    blt := (BitBlt</div><div>        toForm: (Form new hackBits: wideString))</div><div>        sourceForm: (Form new hackBits: source).</div><div>    blt</div><div>        combinationRule: Form over;</div><div>        sourceX: 0;</div><div>        sourceY: pos // 4;</div><div>        height: wideString byteSize // 4;</div><div>        width: 4;</div><div>        destX: 0;</div><div>        destY: 0;</div><div>        copyBits.</div><div><span class="" style="white-space:pre">        </span>wideString restoreEndianness.</div><div><span class="" style="white-space:pre">        </span>self assert: wideString = expectedWideString</div><div><br></div><div>Hence it fixes loading/diffing MCZ with wide character.</div><div><br></div><div><br></div><div>Mac OS Builds:</div><div>Don&#39;t link with -fvisibility=hidden; it breaks external plugins. Use</div><div>-fvisibility=default instead.  This fixes e.g. UnixOSProcessPlugin on Mac OS X.</div><div><br></div><div><br></div><div>Windows Builds:</div><div>The Windows VMs are no longer &quot;dpiAware&quot;.  If you want one-to-one pixel mapping check the README for ins ructions.  It&#39;s a simple edit.</div><div class="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div>