[Vm-dev] VM Maker: VMMaker.oscog-eem.2007.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Nov 26 19:12:37 UTC 2016
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2007.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2007
Author: eem
Time: 26 November 2016, 11:11:40.930373 am
UUID: f3e0c6b2-48c4-48aa-91ad-929070431f5d
Ancestors: VMMaker.oscog-eem.2006
RegisterAllocatingCogit:
Better naming of observeLiveRegisterIn: => copyLiveRegisterToCopiesOf:.
=============== Diff against VMMaker.oscog-eem.2006 ===============
Item was added:
+ ----- Method: CogRegisterAllocatingSimStackEntry>>copyLiveRegisterIfSameAs: (in category 'compile abstract instructions') -----
+ copyLiveRegisterIfSameAs: simStackEntry
+ <inline: true>
+ self flag: 'should this also apply to SSConstant entries assigned to registers?'.
+ (self ~~ simStackEntry
+ and: [type = simStackEntry type
+ and: [type = SSBaseOffset
+ and: [register = simStackEntry register and: [offset = simStackEntry offset]]]]) ifTrue:
+ [liveRegister := simStackEntry liveRegister]!
Item was removed:
- ----- Method: CogRegisterAllocatingSimStackEntry>>noteLiveRegisterIn: (in category 'compile abstract instructions') -----
- noteLiveRegisterIn: simStackEntry
- "Copy the liveRegister state in simStackEntry into the receiver if it is the same value at a different location on the stack."
- <inline: true>
- self flag: 'should this also apply to SSConstant entries assigned to registers?'.
- (self ~~ simStackEntry
- and: [type = simStackEntry type
- and: [type = SSBaseOffset
- and: [register = simStackEntry register and: [offset = simStackEntry offset]]]]) ifTrue:
- [liveRegister := simStackEntry liveRegister]!
Item was changed:
----- Method: CogRegisterAllocatingSimStackEntry>>popToReg: (in category 'compile abstract instructions') -----
popToReg: reg
<var: #inst type: #'AbstractInstruction *'>
liveRegister ~= NoReg
ifTrue:
[self deny: spilled.
reg ~= liveRegister
ifTrue: [cogit MoveR: liveRegister R: reg]
ifFalse: [cogit Label] ]
ifFalse:
[spilled
ifTrue:
[cogit PopR: reg]
ifFalse:
[type caseOf: {
[SSBaseOffset] -> [cogit MoveMw: offset r: register R: reg].
[SSConstant] -> [cogit genMoveConstant: constant R: reg].
[SSRegister] -> [reg ~= register
ifTrue: [cogit MoveR: register R: reg]
ifFalse: [cogit Label]] }]].
reg ~= TempReg ifTrue:
[liveRegister := reg.
+ cogit copyLiveRegisterToCopiesOf: self]!
- cogit observeLiveRegisterIn: self]!
Item was changed:
----- Method: CogRegisterAllocatingSimStackEntry>>storeToReg: (in category 'compile abstract instructions') -----
storeToReg: reg
| inst |
<var: #inst type: #'AbstractInstruction *'>
liveRegister ~= NoReg
ifTrue:
[inst := reg ~= liveRegister
ifTrue: [cogit MoveR: liveRegister R: reg]
ifFalse: [cogit Label]]
ifFalse:
[type caseOf: {
[SSBaseOffset] -> [inst := cogit MoveMw: offset r: register R: reg].
[SSSpill] -> [inst := cogit MoveMw: offset r: register R: reg].
[SSConstant] -> [inst := cogit genMoveConstant: constant R: reg].
[SSRegister] -> [inst := reg ~= register
ifTrue: [cogit MoveR: register R: reg]
ifFalse: [cogit Label]] }].
reg ~= TempReg ifTrue:
[liveRegister := reg.
+ cogit copyLiveRegisterToCopiesOf: self]!
- cogit observeLiveRegisterIn: self]!
Item was added:
+ ----- Method: RegisterAllocatingCogit>>copyLiveRegisterToCopiesOf: (in category 'bytecode generator support') -----
+ copyLiveRegisterToCopiesOf: simStackEntry
+ "Copy the liveRegister in simStackEntry into all corresponding stack entries."
+ <var: #simStackEntry type: #'SimStackEntry *'>
+ simStackPtr to: 0 by: -1 do:
+ [:i|
+ (self simStackAt: i) copyLiveRegisterIfSameAs: simStackEntry]!
Item was changed:
----- Method: RegisterAllocatingCogit>>genStorePop:TemporaryVariable: (in category 'bytecode generator support') -----
genStorePop: popBoolean TemporaryVariable: tempIndex
"Override so that if a register other than TempReg is allocated, the temp is marked as being live in that register."
| reg |
self ssFlushUpThroughTemporaryVariable: tempIndex.
reg := self ssStorePop: popBoolean toPreferredReg: TempReg.
self MoveR: reg
Mw: (self frameOffsetOfTemporary: tempIndex)
r: FPReg.
reg ~= TempReg ifTrue:
[(self simStackAt: tempIndex) liveRegister: reg.
+ self copyLiveRegisterToCopiesOf: (self simStackAt: tempIndex)].
- self observeLiveRegisterIn: (self simStackAt: tempIndex)].
^0!
Item was removed:
- ----- Method: RegisterAllocatingCogit>>observeLiveRegisterIn: (in category 'bytecode generator support') -----
- observeLiveRegisterIn: simStackEntry
- "Copy the liveRegister in simStackEntry into all corresponding stack entries."
- <var: #simStackEntry type: #'SimStackEntry *'>
- simStackPtr to: 0 by: -1 do:
- [:i|
- (self simStackAt: i) noteLiveRegisterIn: simStackEntry]!
More information about the Vm-dev
mailing list