[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