<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>>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'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'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'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'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's better to declare its</div><div>operands as 'unsigned int' rather than sqInt. On 32bit VM, this doesn'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'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 "dpiAware". If you want one-to-one pixel mapping check the README for ins ructions. It'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>