[Vm-dev] VM Maker: VMMaker.oscog-cb.1250.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Apr 23 18:23:33 UTC 2015


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-cb.1250.mcz

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

Name: VMMaker.oscog-cb.1250
Author: cb
Time: 23 April 2015, 8:21:51.274 pm
UUID: 7ac1c3b2-fa60-4fa8-85b4-1fd406143de6
Ancestors: VMMaker.oscog-eem.1249

fix frameless inst var store. I made a mistake.

Added the flush in SistaCogit for branchIfNotInstanceOf

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

Item was changed:
  ----- Method: SistaStackToRegisterMappingCogit>>genExtJumpIfNotInstanceOfBehaviorsOrPopBytecode (in category 'bytecode generators') -----
  genExtJumpIfNotInstanceOfBehaviorsOrPopBytecode
  	"SistaV1: *	254		11111110	kkkkkkkk	jjjjjjjj		branch If Not Instance Of Behavior/Array Of Behavior kkkkkkkk (+ Extend A * 256, where Extend A >= 0) distance jjjjjjjj (+ Extend B * 256, where Extend B >= 0)"
  								
  	| reg literal distance targetFixUp |
  	
+ 	"We loose the information of in which register is stack top 
+ 	when jitting the branch target so we need to flush everything. 
+ 	We could use a fixed register here...."
+ 	self ssFlushTo: simStackPtr.
  	reg := self allocateRegForStackTopEntry.
  	self ssTop popToReg: reg.
  	
  	literal := self getLiteral: (extA * 256 + byte1).
  	extA := 0.
  	distance := extB * 256 + byte2.
  	extB := 0.
  	
  	targetFixUp := (self ensureFixupAt: bytecodePC + 3 + distance - initialPC) asUnsignedInteger.
  		
  	(objectMemory isArrayNonImm: literal)
  		ifTrue: [objectRepresentation branchIf: reg notInstanceOfBehaviors: literal target: targetFixUp]
  		ifFalse: [objectRepresentation branchIf: reg notInstanceOfBehavior: literal target: targetFixUp].
  						
  	self genPopStackBytecode.
  	
  	^0!

Item was changed:
  ----- Method: StackToRegisterMappingCogit>>genStorePop:ReceiverVariable: (in category 'bytecode generator support') -----
  genStorePop: popBoolean ReceiverVariable: slotIndex
  	<inline: false>
  	^ needsFrame 
  		ifFalse: 
  			[ self 
  				genStorePop: popBoolean 
  				ReceiverVariable: slotIndex 
+ 				traceBlock: [ backEnd saveAndRestoreLinkRegAround: [self CallRT: ceTraceStoreTrampoline] ]
+ 				inFrame: needsFrame ]
- 				traceBlock: [ backEnd saveAndRestoreLinkRegAround: [self CallRT: ceTraceStoreTrampoline] ] ]
  		ifTrue: 
  			[ self 
  				genStorePop: popBoolean 
  				ReceiverVariable: slotIndex 
+ 				traceBlock: [ self CallRT: ceTraceStoreTrampoline ]
+ 				inFrame: needsFrame ]!
- 				traceBlock: [ self CallRT: ceTraceStoreTrampoline ] ]!

Item was removed:
- ----- Method: StackToRegisterMappingCogit>>genStorePop:ReceiverVariable:traceBlock: (in category 'bytecode generator support') -----
- genStorePop: popBoolean ReceiverVariable: slotIndex traceBlock: block
- 	<inline: true>
- 	| topReg |
- 	self ssFlushUpThroughReceiverVariable: slotIndex.
- 	"Avoid store check for immediate values"
- 	(objectRepresentation isUnannotatableConstant: self ssTop) ifTrue:
- 		[self ensureReceiverResultRegContainsSelf.
- 		 self ssStorePop: popBoolean toReg: TempReg.
- 		 traceStores > 0 ifTrue: [block value].
- 		 ^objectRepresentation
- 			genStoreImmediateInSourceReg: TempReg
- 			slotIndex: slotIndex
- 			destReg: ReceiverResultReg].
- 	topReg := self allocateRegForStackTopEntryNotConflictingWith: (self registerMaskFor: ReceiverResultReg).
- 	self ssStorePop: popBoolean toReg: topReg.
- 	"Note that ReceiverResultReg remains live after ceStoreCheckTrampoline."
- 	self ensureReceiverResultRegContainsSelf.
- 	 traceStores > 0 ifTrue:
- 		[self MoveR: topReg R: TempReg.
- 		 block value].
- 	^objectRepresentation
- 		genStoreSourceReg: topReg
- 		slotIndex: slotIndex
- 		destReg: ReceiverResultReg
- 		scratchReg: TempReg
- 		inFrame: true!

Item was added:
+ ----- Method: StackToRegisterMappingCogit>>genStorePop:ReceiverVariable:traceBlock:inFrame: (in category 'bytecode generator support') -----
+ genStorePop: popBoolean ReceiverVariable: slotIndex traceBlock: block inFrame: boolean
+ 	<inline: true>
+ 	| topReg |
+ 	self ssFlushUpThroughReceiverVariable: slotIndex.
+ 	"Avoid store check for immediate values"
+ 	(objectRepresentation isUnannotatableConstant: self ssTop) ifTrue:
+ 		[self ensureReceiverResultRegContainsSelf.
+ 		 self ssStorePop: popBoolean toReg: TempReg.
+ 		 traceStores > 0 ifTrue: [block value].
+ 		 ^objectRepresentation
+ 			genStoreImmediateInSourceReg: TempReg
+ 			slotIndex: slotIndex
+ 			destReg: ReceiverResultReg].
+ 	topReg := self allocateRegForStackTopEntryNotConflictingWith: (self registerMaskFor: ReceiverResultReg).
+ 	self ssStorePop: popBoolean toReg: topReg.
+ 	"Note that ReceiverResultReg remains live after ceStoreCheckTrampoline."
+ 	self ensureReceiverResultRegContainsSelf.
+ 	 traceStores > 0 ifTrue:
+ 		[self MoveR: topReg R: TempReg.
+ 		 block value].
+ 	^objectRepresentation
+ 		genStoreSourceReg: topReg
+ 		slotIndex: slotIndex
+ 		destReg: ReceiverResultReg
+ 		scratchReg: TempReg
+ 		inFrame: boolean!



More information about the Vm-dev mailing list