[squeak-dev] New CogVMs available
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
Since the invariant is that the receiver is never forwarded, Spur must
forwarding on block activation. A become between closure creation and
evaluation can forward the receiver, and it must be unforwarded. Here we
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
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
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
VMMaker.oscog-eem.1334. Scan blocks for inst var usage, only unforwarding
the prologue of blocks that actually refer to inst vars. In a test Spur
image only 12.5% of blocks do refer to inst vars. So this is definitely a
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.
Fix the bug where rcvrReg was nil in genEqualsEqualsnoBranch.
Use the Tst-based generators for immediate and SmallInteger tests more
to save a few more instructions.
Fix the hack introduced in VMMaker.oscog-eem.1199 for Sista which merely
reclaiming closed PICs. In non-Sista VMs do the usual thing of decaying
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.
Fix assert-fails with absent receiver sends in Newspeak. Have the implicit
and outer send lookup trampolines set the stacked receiver (when there is
when setting the implciit receiver.
Streamline send trampoline creation by refactoring trampoline name
so that the two limits, NumSendTrampolines - 2 and numRegArgs are treated
separately, and numArgsOrSendNumArgsReg: answers the relevant numArgs
This should clear up confusion between numRegArgs (which can be 0, 1 & 2)
NumSendTrampolines - 2, which is always 2.
Fix VERSION_TAG format to agree with existing convention.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Squeak-dev