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]! |
Free forum by Nabble | Edit this page |