[Vm-dev] VM Maker: VMMaker.oscog-cb.1894.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Jun 30 12:03:49 UTC 2016
ClementBera uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-cb.1894.mcz
==================== Summary ====================
Name: VMMaker.oscog-cb.1894
Author: cb
Time: 30 June 2016, 2:02:37.049787 pm
UUID: b3c32cc0-576b-4a14-9572-b5323dfa774f
Ancestors: VMMaker.oscog-eem.1893
Accesses on remote instance variables can't be done on forwarders: to happen, the method with the inst var access needs to be inlined hence there's either a guard ensuring the object is not a forwarder or the type of the object is known (immutable literal, inlined object allocation such as Array, FullBlockClosure, immediate rcvr, etc.)
=============== Diff against VMMaker.oscog-eem.1893 ===============
Item was added:
+ ----- Method: StackToRegisterMappingCogit>>genLoadTemp:in: (in category 'bytecode generator support') -----
+ genLoadTemp: objectIndex in: destReg
+ destReg = ReceiverResultReg ifTrue: [ optStatus isReceiverResultRegLive: false ].
+ self ssAllocateRequiredReg: destReg.
+ self MoveMw: (self frameOffsetOfTemporary: objectIndex) r: FPReg R: destReg.!
Item was removed:
- ----- Method: StackToRegisterMappingCogit>>genLoadUnFwdTemp:in: (in category 'bytecode generator support') -----
- genLoadUnFwdTemp: objectIndex in: destReg
- destReg = ReceiverResultReg ifTrue: [ optStatus isReceiverResultRegLive: false ].
- self ssAllocateRequiredReg: destReg.
- self MoveMw: (self frameOffsetOfTemporary: objectIndex) r: FPReg R: destReg.
- objectRepresentation
- genEnsureOopInRegNotForwarded: destReg
- scratchReg: TempReg.!
Item was changed:
----- Method: StackToRegisterMappingCogit>>genPushMaybeContextRemoteInstVar:inObjectAt: (in category 'bytecode generator support') -----
genPushMaybeContextRemoteInstVar: slotIndex inObjectAt: index
<inline: false>
self ssAllocateCallReg: ReceiverResultReg and: SendNumArgsReg.
+ self genLoadTemp: index in: ReceiverResultReg.
- self genLoadUnFwdTemp: index in: ReceiverResultReg.
^ self genPushMaybeContextSlotIndex: slotIndex!
Item was changed:
----- Method: StackToRegisterMappingCogit>>genPushRemoteInstVar:inObjectAt: (in category 'bytecode generator support') -----
genPushRemoteInstVar: index inObjectAt: objectIndex
<inline: false>
| objectReg resultReg |
self assert: needsFrame.
objectReg := self allocateRegNotConflictingWith: 0.
+ self genLoadTemp: objectIndex in: objectReg.
- self genLoadUnFwdTemp: objectIndex in: objectReg.
resultReg := self availableRegOrNoneNotConflictingWith: (self registerMaskFor: objectReg).
resultReg = NoReg ifTrue: [resultReg := objectReg].
objectRepresentation
genLoadSlot: byte1
sourceReg: objectReg
destReg: resultReg.
^self ssPushRegister: resultReg!
Item was changed:
----- Method: StackToRegisterMappingCogit>>genStorePop:MaybeContextRemoteInstVar:ofObjectAt:needsStoreCheck: (in category 'bytecode generator support') -----
genStorePop: popBoolean MaybeContextRemoteInstVar: slotIndex ofObjectAt: objectIndex needsStoreCheck: needsStoreCheck
<inline: false>
"The reason we need a frame here is that assigning to an inst var of a context may
involve wholesale reorganization of stack pages, and the only way to preserve the
execution state of an activation in that case is if it has a frame."
self assert: needsFrame.
+ self genLoadTemp: objectIndex in: ReceiverResultReg.
- self genLoadUnFwdTemp: objectIndex in: ReceiverResultReg.
self genStorePop: popBoolean MaybeContextSlotIndex: slotIndex needsStoreCheck: needsStoreCheck.
^ 0!
Item was changed:
----- Method: StackToRegisterMappingCogit>>genStorePop:RemoteInstVar:ofObjectAt:needsStoreCheck: (in category 'bytecode generator support') -----
genStorePop: popBoolean RemoteInstVar: slotIndex ofObjectAt: objectIndex needsStoreCheck: needsStoreCheck
<inline: false>
self assert: needsFrame.
+ self genLoadTemp: objectIndex in: ReceiverResultReg.
- self genLoadUnFwdTemp: objectIndex in: ReceiverResultReg.
self
genStorePop: popBoolean
slotIndex: slotIndex
destReg: ReceiverResultReg
needsStoreCheck: needsStoreCheck
needsRestoreRcvr: false.
^ 0!
More information about the Vm-dev
mailing list