[Vm-dev] New CogVMs available

Eliot Miranda eliot.miranda at gmail.com
Thu Jun 4 21:00:56 UTC 2015


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

CogVM source as per VMMaker.oscog-eem.1339/r3370

Spur Cogit:
Since the invariant is that the receiver is never forwarded, Spur must
check for
forwarding on block activation.  A become between closure creation and
closure
evaluation can forward the receiver, and it must be unforwarded.  Here we
do so
by checking for a forwarded receiver in the value[:] primitives. This is a
major blow to block performance; e.g. the nfib block
b := [:n| n <= 1
ifTrue: [1]
ifFalse: [1 + (b value: n - 1) + (b value: n - 2)]].
slows down by 11%.  So we can and will do better.  We should scan for
receiver
usage in the JIT and optionally compile unforwarding code in the prolog
depending on whether self is used or not.

Fix Spur block performance now that we follow forwarded receivers in
blocks; see
VMMaker.oscog-eem.1334.  Scan blocks for inst var usage, only unforwarding
in
the prologue of blocks that actually refer to inst vars.  In a test Spur
Squeak
image only 12.5% of blocks do refer to inst vars.  So this is definitely a
win.

Add a special purpose store check trampoline to store check the updated
receiver.  Make sure it's only called if the eceiuver is updated.

Add state to CogBytecodeDescriptor, CogBlockStart
and CogBlockMethod to track block inst var usage.

Sista:
Fix the bug where rcvrReg was nil in genEqualsEqualsnoBranch.

Generic Cogit:
Use the Tst-based generators for immediate and SmallInteger tests more
widely
to save a few more instructions.

Fix the hack introduced in VMMaker.oscog-eem.1199 for Sista which merely
stopped
reclaiming closed PICs.  In non-Sista VMs do the usual thing of decaying
usage
counts on PICs, as with methods, and reclaiming those least used.  In Sista,
retain PICs until the next cycle, identifying unused PICs as part of the
compaction scan, reminiscent of tri-colour incremental GC.

Move defaultCogCodeSize into the CogAbstractInstruction hierarchy so that
e.g.  CogARMCompiler can specify a larger default code zone.

Newspeak Cogit:
Fix assert-fails with absent receiver sends in Newspeak.  Have the implicit
and outer send lookup trampolines set the stacked receiver (when there is
one)
when setting the implciit receiver.

Streamline send trampoline creation by refactoring trampoline name
generation
so that the two limits, NumSendTrampolines - 2 and numRegArgs are treated
separately, and numArgsOrSendNumArgsReg: answers the relevant numArgs
argument.
This should clear up confusion between numRegArgs (which can be 0, 1 & 2)
and
NumSendTrampolines - 2, which is always 2.

linux builds:
Fix VERSION_TAG format to agree with existing convention.
-- 
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20150604/3ca5d13a/attachment.htm


More information about the Vm-dev mailing list