VM Maker: VMMaker.oscog-eem.747.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.747.mcz

commits-2
 
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.747.mcz

==================== Summary ====================

Name: VMMaker.oscog-eem.747
Author: eem
Time: 2 June 2014, 8:04:31.883 am
UUID: 488671d9-ac3b-4b24-8102-9a2623c7ce72
Ancestors: VMMaker.oscog-eem.746

In the indirection vector initialization peephole check that the
store temp index matches the indirect temp store index and
accept long store temp bytecodes.

=============== Diff against VMMaker.oscog-eem.746 ===============

Item was changed:
  ----- Method: StackToRegisterMappingCogit>>tryCollapseTempVectorInitializationOfSize: (in category 'peephole optimizations') -----
  tryCollapseTempVectorInitializationOfSize: slots
+ "If the sequence of bytecodes is
- "Try and collapse
  push: (Array new: 1)
  popIntoTemp: tempIndex
  pushConstant: const or pushTemp: n
  popIntoTemp: 0 inVectorAt: tempIndex
+ collapse this into
+ tempAt: tempIndex put: {const or temp}
+ and answer true, otherwise answer false.
- into
- tempAt: tempIndex put: {const}.
  One might think that we should look for a sequence of more than
+ one pushes and pops but this is extremely rare.
+ Exclude pushRcvr: n to avoid potential complications with context inst vars."
+ | pushArrayDesc storeArrayDesc pushValueDesc storeValueDesc tempIndex remoteTempIndex reg |
- one pushes and pops but this is extremely rare."
- | pushArrayDesc storeArrayDesc pushValueDesc storeValueDesc reg |
  <var: #pushArrayDesc type: #'BytecodeDescriptor *'>
  <var: #pushValueDesc type: #'BytecodeDescriptor *'>
  <var: #storeArrayDesc type: #'BytecodeDescriptor *'>
  <var: #storeValueDesc type: #'BytecodeDescriptor *'>
  slots ~= 1 ifTrue:
  [^false].
  pushArrayDesc := self generatorAt: bytecodeSetOffset
  + (objectMemory
  fetchByte: bytecodePC
  ofObject: methodObj).
  self assert: pushArrayDesc generator == #genPushNewArrayBytecode.
  storeArrayDesc := self generatorAt: bytecodeSetOffset
  + (objectMemory
  fetchByte: bytecodePC
  + pushArrayDesc numBytes
  ofObject: methodObj).
+ storeArrayDesc generator == #genStoreAndPopTemporaryVariableBytecode
+ ifTrue:
+ [tempIndex := (objectMemory
+ fetchByte: bytecodePC + pushArrayDesc numBytes
+ ofObject: methodObj) bitAnd: 16r7]
+ ifFalse:
+ [storeArrayDesc generator == #genLongStoreAndPopTemporaryVariableBytecode ifFalse:
+ [^false].
+ tempIndex := objectMemory
+ fetchByte: bytecodePC + pushArrayDesc numBytes + 1
+ ofObject: methodObj].
- storeArrayDesc generator ~~ #genStoreAndPopTemporaryVariableBytecode ifTrue:
- [^false].
  pushValueDesc := self generatorAt: bytecodeSetOffset
  + (objectMemory
  fetchByte: bytecodePC
  + pushArrayDesc numBytes
  + storeArrayDesc numBytes
  ofObject: methodObj).
+ (pushValueDesc generator == #genPushLiteralConstantBytecode
+ or: [pushValueDesc generator == #genPushQuickIntegerConstantBytecode
+ or: [pushValueDesc generator == #genPushTemporaryVariableBytecode]]) ifFalse:
- (pushValueDesc generator ~~ #genPushLiteralConstantBytecode
- and: [pushValueDesc generator ~~ #genPushQuickIntegerConstantBytecode
- and: [pushValueDesc generator ~~ #genPushTemporaryVariableBytecode]]) ifTrue:
  [^false].
  storeValueDesc := self generatorAt: bytecodeSetOffset
  + (objectMemory
  fetchByte: bytecodePC
  + pushArrayDesc numBytes
  + storeArrayDesc numBytes
  + pushValueDesc numBytes
  ofObject: methodObj).
+ remoteTempIndex := objectMemory
+ fetchByte: bytecodePC
+ + pushArrayDesc numBytes
+ + storeArrayDesc numBytes
+ + pushValueDesc numBytes
+ + 2
+ ofObject: methodObj.
+ (storeValueDesc generator == #genStoreAndPopRemoteTempLongBytecode
+ and: [tempIndex = remoteTempIndex]) ifFalse:
- storeValueDesc generator ~~ #genStoreAndPopRemoteTempLongBytecode ifTrue:
  [^false].
 
  objectRepresentation genNewArrayOfSize: 1 initialized: false.
  self evaluate: pushValueDesc at: bytecodePC + pushArrayDesc numBytes + storeArrayDesc numBytes.
  reg := self ssStorePop: true toPreferredReg: TempReg.
  objectRepresentation
  genStoreSourceReg: reg
  slotIndex: 0
  intoNewObjectInDestReg: ReceiverResultReg.
  self ssPushRegister: ReceiverResultReg.
  self evaluate: storeArrayDesc at: bytecodePC + pushArrayDesc numBytes.
  bytecodePC := bytecodePC
  "+ pushArrayDesc numBytes this gets added by nextBytecodePCFor:at:exts:in:"
  + storeArrayDesc numBytes
  + pushValueDesc numBytes
  + storeValueDesc numBytes.
  ^true!