[Vm-dev] New Cog VMs available

Eliot Miranda eliot.miranda at gmail.com
Fri May 27 03:25:21 UTC 2016


... at http://www.mirandabanda.org/files/Cog/VM/VM.r3732

CogVM binaries as per VMMaker.oscog-eem.1873/r3732

General:
Make primitiveDoPrimitiveWithArgs usable as a mirror primitive, such that no
message needs to be sent to the receiver to evaluate a primitive on it.
This
would make possible Context>>receiver: obj tryPrimitive: idx withArgs: args.


Spur: Fix ephemerons (at least for Gule's test case).

The mournQueue is of course a root for the scavenger and so must be visited
at
the start of a scavenge.  Fix bug in markAllUnscannedEphemerons, enumerating
correctly.

Both fireEphemeronsInRememberedSet and fireEphemeronsOnEphemeronList must
check
for an ephemeron being fireable.  An as-yet-firable ephemeron might get
added to
the ephemeron list and later its key may get tenured, rendering the
ephemeron
unfirable in that cycle.

Fix marking of obj stack contents (markAndTraceObjStack:andContents:).
Again
tenuring could cause contents to be forwarded and hence read barrier is
needed.

Fix two bugs in ephemerons (found by Gille Polito - thanks!).

1. obj stack extension must happen with marking set to true if new pages
aren't
   to be GC'ed.  So move the assignments to marking out into markObjects:
where
   they can surround nilUnmarkedWeaklingSlots.

2. fireAllUnscannedEphemerons needs to enumerate the unscannedEphemerons set
   properly, an oop at a time.

Fix asserts that check for ephemerons so that the change in an ephemeron's
format once it gets added to the mournQueue doesn't break the asserts;
isMaybeFiredEphemeron[Format]: answer true for ephemerons and ephemerons in
the mournQueue.

Fix the Spur implementation of becomeForward:copyHash: for becomming
immediates
with copyHash false.  Fix the scavenger's referenceCountRememberedReferents:
for forwarding to immediates, and add a printRememberedSet convenience.

Make pushLiteralVariable: store unfollowed literals back into the literal
frame.
Do so in a function off to the side, not inlined into the interpreter loop.

With the above ephemeron changes Guille's test case passes:
| e |
Smalltalk supportsQueueingFinalization: true.
e := (1 to: 200000) collect:
[:i| Ephemeron
key: (ObjectFinalizer receiver: 'test', 'asd' selector: #logCr)
value: Object new].
Smalltalk garbageCollect!


Plugins:
Simplify the arg validation in FloatArrayPrims>>prmNormalize & primLength.

Fix the configuration of the gdb-7.x support for for the GdbARMPlugin
(COG=1).
Put #if COG around a couple of changes to the gdb-7.10 code.
Allow assert to be used in the plugin on MacOS X (-undefined dynamic_lookup)

_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160526/0e422d0c/attachment.htm


More information about the Vm-dev mailing list