VM Maker: VMMaker.oscog-eem.2007.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-eem.2007.mcz

commits-2
 
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]!