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!