<div dir="ltr"><div>... at <a href="http://www.mirandabanda.org/files/Cog/VM/VM.r3732">http://www.mirandabanda.org/files/Cog/VM/VM.r3732</a></div><div><br></div><div>CogVM binaries as per VMMaker.oscog-eem.1873/r3732<br></div><div><br></div><div>General:</div><div>Make primitiveDoPrimitiveWithArgs usable as a mirror primitive, such that no</div><div>message needs to be sent to the receiver to evaluate a primitive on it. This</div><div>would make possible Context>>receiver: obj tryPrimitive: idx withArgs: args.</div><div><br></div><div><br></div><div>Spur: Fix ephemerons (at least for Gule's test case).</div><div><br></div><div>The mournQueue is of course a root for the scavenger and so must be visited at</div><div>the start of a scavenge. Fix bug in markAllUnscannedEphemerons, enumerating</div><div>correctly.</div><div><br></div><div>Both fireEphemeronsInRememberedSet and fireEphemeronsOnEphemeronList must check</div><div>for an ephemeron being fireable. An as-yet-firable ephemeron might get added to</div><div>the ephemeron list and later its key may get tenured, rendering the ephemeron</div><div>unfirable in that cycle.</div><div><br></div><div>Fix marking of obj stack contents (markAndTraceObjStack:andContents:). Again</div><div>tenuring could cause contents to be forwarded and hence read barrier is needed.</div><div><br></div><div>Fix two bugs in ephemerons (found by Gille Polito - thanks!).</div><div><br></div><div>1. obj stack extension must happen with marking set to true if new pages aren't</div><div> to be GC'ed. So move the assignments to marking out into markObjects: where</div><div> they can surround nilUnmarkedWeaklingSlots.</div><div><br></div><div>2. fireAllUnscannedEphemerons needs to enumerate the unscannedEphemerons set</div><div> properly, an oop at a time.</div><div><br></div><div>Fix asserts that check for ephemerons so that the change in an ephemeron's</div><div>format once it gets added to the mournQueue doesn't break the asserts;</div><div>isMaybeFiredEphemeron[Format]: answer true for ephemerons and ephemerons in</div><div>the mournQueue.</div><div><br></div><div>Fix the Spur implementation of becomeForward:copyHash: for becomming immediates</div><div>with copyHash false. Fix the scavenger's referenceCountRememberedReferents:</div><div>for forwarding to immediates, and add a printRememberedSet convenience.</div><div><br></div><div>Make pushLiteralVariable: store unfollowed literals back into the literal frame.</div><div>Do so in a function off to the side, not inlined into the interpreter loop.</div><div><br></div><div>With the above ephemeron changes Guille's test case passes:</div><div><span class="" style="white-space:pre">        </span>| e |</div><div><span class="" style="white-space:pre">        </span>Smalltalk supportsQueueingFinalization: true.</div><div><span class="" style="white-space:pre">        </span>e := (1 to: 200000) collect:</div><div><span class="" style="white-space:pre">                </span>[:i| Ephemeron</div><div><span class="" style="white-space:pre">                                </span>key: (ObjectFinalizer receiver: 'test', 'asd' selector: #logCr)</div><div><span class="" style="white-space:pre">                                </span>value: Object new].</div><div><span class="" style="white-space:pre">        </span>Smalltalk garbageCollect!</div><div><br></div><div><br></div><div>Plugins:</div><div>Simplify the arg validation in FloatArrayPrims>>prmNormalize & primLength.</div><div><br></div><div>Fix the configuration of the gdb-7.x support for for the GdbARMPlugin (COG=1).</div><div>Put #if COG around a couple of changes to the gdb-7.10 code.</div><div>Allow assert to be used in the plugin on MacOS X (-undefined dynamic_lookup)</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>