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 |
And updated on ci.
On 04.06.2015, at 23:00, Eliot Miranda <[hidden email]> wrote: > ... 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 |
Free forum by Nabble | Edit this page |