Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2014.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2014 Author: eem Time: 30 November 2016, 12:05:15.199066 pm UUID: 39577b51-2ad7-4e7c-9a31-06dab999241b Ancestors: VMMaker.oscog-eem.2013
RegisterAllocatingCogit: Avoid ssStorePop:toPreferredReg: stomping on already-allocated registers.
=============== Diff against VMMaker.oscog-eem.2013 ===============
Item was added: + ----- Method: RegisterAllocatingCogit>>liveRegistersExceptingTopNItems: (in category 'simulation stack') ----- + liveRegistersExceptingTopNItems: n + | regsSet | + regsSet := 0. + 0 to: simStackPtr - n do: + [:i| + regsSet := regsSet bitOr: (self simStackAt: i) registerMask]. + LowcodeVM ifTrue: + [(simNativeSpillBase max: 0) to: simNativeStackPtr - n do: + [:i| + regsSet := regsSet bitOr: (self simNativeStackAt: i) nativeRegisterMask]]. + ^regsSet!
Item was changed: ----- Method: RegisterAllocatingCogit>>ssStorePop:toPreferredReg: (in category 'simulation stack') ----- ssStorePop: popBoolean toPreferredReg: preferredReg "Store or pop the top simulated stack entry to a register. Use preferredReg if the entry is not itself a register. Answer the actual register the result ends up in." + | actualReg liveRegisters | - | actualReg | actualReg := preferredReg. self ssTop type = SSRegister ifTrue: [self assert: (self ssTop liveRegister = NoReg or: [self ssTop liveRegister = self ssTop register]). self assert: self ssTop spilled not. actualReg := self ssTop register]. self ssTop liveRegister ~= NoReg ifTrue: [actualReg := self ssTop liveRegister]. + liveRegisters := self liveRegistersExceptingTopNItems: 1. + (self register: actualReg isInMask: liveRegisters) ifTrue: + [actualReg := self allocateRegNotConflictingWith: (self registerMaskFor: preferredReg). + actualReg = NoReg ifTrue: + [actualReg := preferredReg]]. + self deny: (self register: actualReg isInMask: liveRegisters). self ssStorePop: popBoolean toReg: actualReg. "generates nothing if ssTop is already in actualReg" ^actualReg!
vm-dev@lists.squeakfoundation.org