Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.3293.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.3293 Author: eem Time: 12 January 2023, 2:04:39.652465 pm UUID: 6c5cfa45-6e31-404f-aa63-7340e2b32723 Ancestors: VMMaker.oscog-eem.3292
Simplify the TempVectReadBarrier testing in Stack/CoInterpreter, adding one method and deleting four, and testing TempVectReadBarrier in a single method only (albeit one that is overridden in CoInterpreter).
Fix a regression introduced in VMMaker.oscog-eem.3288/3289
=============== Diff against VMMaker.oscog-eem.3292 ===============
Item was removed: - ----- Method: CoInterpreter>>pushRemoteTemp:inVectorAt: (in category 'stack bytecodes') ----- - pushRemoteTemp: index inVectorAt: tempVectorIndex - "Override to use itemporary:in:put:" - | tempVector | - tempVector := self itemporary: tempVectorIndex in: localFP. - TempVectReadBarrier - ifTrue: - [(objectMemory isForwarded: tempVector) ifTrue: - [tempVector := self unfollowTempVector: tempVector atIndex: tempVectorIndex in: localFP]]. - self internalPush: (objectMemory fetchPointer: index ofObject: tempVector)!
Item was removed: - ----- Method: CoInterpreter>>storeRemoteTemp:inVectorAt: (in category 'stack bytecodes') ----- - storeRemoteTemp: index inVectorAt: tempVectorIndex - "Override to use itemporary:in:put:" - | tempVector | - tempVector := self itemporary: tempVectorIndex in: localFP. - TempVectReadBarrier - ifTrue: - [(objectMemory isForwarded: tempVector) ifTrue: - [tempVector := self unfollowTempVector: tempVector atIndex: tempVectorIndex in: localFP]]. - objectMemory storePointer: index ofObject: tempVector withValue: self internalStackTop!
Item was added: + ----- Method: CoInterpreter>>temporaryVector:in: (in category 'internal interpreter access') ----- + temporaryVector: tempVectorIndex in: theFP + "Override to use itemporary:in:[put:]" + <inline: true> + | tempVector | + tempVector := self itemporary: tempVectorIndex in: theFP. + (TempVectReadBarrier + and: [objectMemory isForwarded: tempVector]) ifTrue: + [tempVector := objectMemory followForwarded: tempVector. + self itemporary: tempVectorIndex in: theFP put: tempVector]. + ^tempVector!
Item was removed: - ----- Method: CoInterpreter>>unfollowTempVector:atIndex:in: (in category 'compiled methods') ----- - unfollowTempVector: tempVector atIndex: tempVectorIndex in: theFP - "override for itemporary" - <option: #TempVectReadBarrier> - <inline: #never> "So rare it mustn't bulk up the common path" - | followed | - followed := objectMemory followForwarded: tempVector. - self itemporary: tempVectorIndex in: theFP put: followed. - ^followed!
Item was changed: ----- Method: StackInterpreter>>pushRemoteTemp:inVectorAt: (in category 'stack bytecodes') ----- pushRemoteTemp: index inVectorAt: tempVectorIndex | tempVector | + tempVector := self temporaryVector: tempVectorIndex in: localFP. - tempVector := self temporary: tempVectorIndex in: localFP. - TempVectReadBarrier - ifTrue: - [(objectMemory isForwarded: tempVector) ifTrue: - [tempVector := self unfollowTempVector: tempVector atIndex: tempVectorIndex in: localFP]]. self internalPush: (objectMemory fetchPointer: index ofObject: tempVector)!
Item was changed: ----- Method: StackInterpreter>>storeRemoteTemp:inVectorAt: (in category 'stack bytecodes') ----- storeRemoteTemp: index inVectorAt: tempVectorIndex | tempVector | + tempVector := self temporaryVector: tempVectorIndex in: localFP. + objectMemory storePointer: index ofObject: tempVector withValue: self internalStackTop! - tempVector := self temporary: tempVectorIndex in: localFP. - TempVectReadBarrier - ifTrue: - [(objectMemory isForwarded: tempVector) ifTrue: - [tempVector := self unfollowTempVector: tempVector atIndex: tempVectorIndex in: localFP]]. - objectMemory storePointer: index ofObject: tempVector withValue: self internalStackTop.!
Item was added: + ----- Method: StackInterpreter>>temporaryVector:in: (in category 'internal interpreter access') ----- + temporaryVector: tempVectorIndex in: theFP + <inline: true> + | tempVector | + tempVector := self temporary: tempVectorIndex in: theFP. + (TempVectReadBarrier + and: [objectMemory isForwarded: tempVector]) ifTrue: + [tempVector := objectMemory followForwarded: tempVector. + self temporary: tempVectorIndex in: theFP put: tempVector]. + ^tempVector!
Item was removed: - ----- Method: StackInterpreter>>unfollowTempVector:atIndex:in: (in category 'compiled methods') ----- - unfollowTempVector: tempVector atIndex: tempVectorIndex in: theFP - <option: #TempVectReadBarrier> - <inline: #never> "So rare it mustn't bulk up the common path" - | followed | - followed := objectMemory followForwarded: tempVector. - self temporary: tempVectorIndex in: theFP put: followed. - ^followed!
Item was changed: ----- Method: TMethod>>inlineableSend:in: (in category 'inlining') ----- inlineableSend: aNode in: aCodeGen "Answer if the given send node is a call to a method that can be inlined."
| m | aCodeGen maybeBreakForTestToInline: aNode in: self. aNode isSend ifFalse: [^false]. m := aCodeGen methodNamed: aNode selector. "nil if builtin or external function" ^m ~= nil and: [m ~~ self - and: [m unmodifiedSelector ~= self unmodifiedSelector and: [m mayBeInlined and: [(m isComplete and: [aCodeGen mayInline: m selector]) + or: [m checkForRequiredInlinabilityIn: self]]]]! - or: [m checkForRequiredInlinabilityIn: self]]]]]!
vm-dev@lists.squeakfoundation.org