[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