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!
vm-dev@lists.squeakfoundation.org