[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