<div dir="ltr"><div>... at <a href="http://www.mirandabanda.org/files/Cog/VM/VM.r3643">http://www.mirandabanda.org/files/Cog/VM/VM.r3643</a></div><div><br></div><div>CogVM binaries as per VMMaker.oscog-eem.1722/r3643<br></div><div><br></div><div>General:</div><div>Change vm parameter 65 to be a set of flags, not merely the boolean for</div><div>MULTIPLE_BYTECODE_SETS, and make the flags answer MULTIPLE_BYTECODE_SETS &amp;</div><div>IMMUTABILITY.</div><div><br></div><div>Nuke unused named prim primitiveOriginalMillisecondClock so VM can eliminate</div><div>ioOldMSecs.</div><div><br></div><div>Nuke ioOldMSecs and ioLowResMSecs to simplify the tiume management and avoid</div><div>mistakes were we use different versions of clocks for different parts of the</div><div>same basic io operations.  Nuke SqueakUIFlushUseHighPercisionClock preference.</div><div><br></div><div>Make the leak checker operational in the non-assert (&amp; non-debug) VM.</div><div><br></div><div><br></div><div>Cogit:</div><div>Revise the register saving convention for trampoline calls.  Instead of passing</div><div>in a boolean to indicate if all registers should be saved or not (an aproach</div><div>Ryan correctly notes is bogus), pass in a register mask of registers to be</div><div>saved.  If the trampoline call has a machine code continuation then the</div><div>argument is usually callerSavedRegMask, and on MIPS and ARM this is empty.</div><div><br></div><div>Use the above to move the saving of registers in the store-check into the</div><div>store-check trampoline and out of the call of the trampoline.  Further, use</div><div>genJumpImmediate: in the immediate test, which saves an instruction.</div><div><br></div><div>64-bit Cogit:</div><div>Fix primtive 171 (primitiveImmediateAsInteger) in the Cogit for SmallFloat.</div><div>The old code only dealt with Characters.  The new code replicates the</div><div>rotatedFloatBitsOf: scheme in Spur64BitMemoryManager.</div><div><br></div><div><br></div><div>Spur:</div><div>Resolve the conflict between 32-bit and 64-bit tag assignments.  In 32-bits we</div><div>have 1=even SmallIntegers, 2=Characters, 3=odd SmallIntegers, and in 64-bits we</div><div>had 1=SmallIntegers, 2=Characters, 3=SmallFloats.  Hence we would want</div><div>SmallFloat64&#39;s identityHash to be 3, which conflicts with 32 bits&#39; odd</div><div>SmallIntegers.  Change is for 64-bits to use 1=SmallIntegers, 2=Characters,</div><div>4=SmallFloats.  This also means single-bit tests in the Cogit, which produces</div><div>better code, and no scratch registers to hold masked tags.</div><div><br></div><div>Hence roll the 64-bit Spur image format version number from 68019 to 68021.</div><div>Delegate to the object memories to determine the image format version number.</div><div><br></div><div>Fix the bug in markAndTraceClassOf: that causes the first class table page to</div><div>become a visible array.</div><div><br></div><div><br></div><div>Plugins:</div><div>Fix primitiveFFIIntegerAt for signed 4-byte results.  Wuth the support for</div><div>64-bit results, signed 4-byte results must be sign-extended to 64-bits.</div><div><br></div><div>Update primitiveFileRead for Spur.  It doesn&#39;t need the PrimErrObjectMayMove</div><div>handling since Spur has pinning.</div><div><br></div><div>Don&#39;t use cCode: pointer aliasing for storing/fetching float/double in FFI</div><div>primitives.</div><div><br></div><div>Replace with a call to mem:cp:y:</div><div>- the first one is dangerous with modern C compilers</div><div>- while the second is optimized away (no call to memcpy)</div><div><br></div><div>Fix a missing guard in SmartSyntaxPlugin like explained at</div><div><a href="http://forum.world.st/VM-safety-missing-failing-guards-in-SmartSyntaxPlugin-td4816518.html">http://forum.world.st/VM-safety-missing-failing-guards-in-SmartSyntaxPlugin-td4816518.html</a></div><div><br></div><div>Fix two missing guards in VM profiling primitives: one should not use the result</div><div>of stackObjectValue: before checking for success, otherwise a null pointer</div><div>exception will occur in case of failure.</div><div><br></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>