[Vm-dev] VM Maker: VMMaker.oscogSPC-eem.2125.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Feb 9 01:31:43 UTC 2017
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscogSPC-eem.2125.mcz
==================== Summary ====================
Name: VMMaker.oscogSPC-eem.2125
Author: eem
Time: 8 February 2017, 5:30:53.044288 pm
UUID: c99756cb-c65f-480e-86bb-408657e31e7c
Ancestors: VMMaker.oscogSPC-eem.2124, VMMaker.oscog-cb.2117
Merge with VMMaker.oscog-cb.2117.
Better code for RegisterAllocatingCogit popStoreTemp of a constant.
=============== Diff against VMMaker.oscogSPC-eem.2124 ===============
Item was changed:
----- Method: CoInterpreter>>ceCannotAssignTo:withIndex:valueToAssign: (in category 'trampolines') -----
ceCannotAssignTo: immutableObject withIndex: index valueToAssign: valueToAssign
+ "index is unboxed and 0-based. The call-back expects 1-based value (to perform the operation with instVarAt:put:"
- "index is unboxed."
<api>
<option: #IMMUTABILITY>
instructionPointer := self popStack.
self push: immutableObject.
self push: valueToAssign.
+ self push: (objectMemory integerObjectOf: index + 1).
- self push: (objectMemory integerObjectOf: index).
self push: instructionPointer.
^ self
ceSendAbort: (objectMemory splObj: SelectorAttemptToAssign)
to: immutableObject
numArgs: 2!
Item was changed:
----- Method: RegisterAllocatingCogit>>genStorePop:TemporaryVariable: (in category 'bytecode generator support') -----
genStorePop: popBoolean TemporaryVariable: tempIndex
<inline: false>
| srcRegOrNone destReg |
self ssFlushUpThroughTemporaryVariable: tempIndex.
"To avoid a stall writing through destReg, remember srcReg before the potential ssPop: 1 in ssStorePop:toReg:"
srcRegOrNone := self ssTop registerOrNone.
"ssStorePop:toPreferredReg: will allocate a register, and indeed may allocate ReceiverResultReg
if, for example, the ssEntry to be popped is already in ReceiverResultReg (as the result of a send).
ReceiverResultReg is not a good choice for a temporary variable; it has other uses. So if the ssEntry
at top of stack has ReceiverResultReg as its live variable, try and allocate an alternative."
+ ((self ssTop type = SSConstant
+ or: [self ssTop registerMaskOrNone anyMask: self registerMaskUndesirableForTempVars])
- ((self ssTop registerMaskOrNone anyMask: self registerMaskUndesirableForTempVars)
and: [(destReg := self availableRegOrNoneNotConflictingWith: (self registerMaskUndesirableForTempVars bitOr: self liveRegisters)) ~= NoReg])
ifTrue: [self ssStorePop: popBoolean toReg: destReg]
ifFalse: [destReg := self ssStorePop: popBoolean toPreferredReg: TempReg].
self MoveR: (srcRegOrNone ~= NoReg ifTrue: [srcRegOrNone] ifFalse: [destReg])
Mw: (self frameOffsetOfTemporary: tempIndex)
r: FPReg.
destReg ~= TempReg ifTrue:
[(self simStackAt: tempIndex) liveRegister: destReg.
self copyLiveRegisterToCopiesOf: (self simStackAt: tempIndex)].
^0!
More information about the Vm-dev
mailing list