Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog.seperateMarking-eem.3302.mcz
==================== Summary ====================
Name: VMMaker.oscog.seperateMarking-eem.3302 Author: eem Time: 12 January 2023, 2:14:11.146706 pm UUID: 948f1623-68fa-4d7f-9286-45087a3dce60 Ancestors: VMMaker.oscog.seperateMarking-eem.3301
Merge VMMaker.oscog-eem.3293
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).
=============== Diff against VMMaker.oscog.seperateMarking-eem.3301 ===============
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>>storeLiteralVariable:withValue: (in category 'stack bytecodes') ----- storeLiteralVariable: literalIndex withValue: anObject | litVar | + "In Spur: + push/store/popLiteralVariable all fetch a literal, and either read or write the literal's value field. + The fetch of the literal needs an explicit check (otherwise we would have to scan all literals in + all methods in the stack zone, and the entire method on return, and global variables are relatively + rare; in my work image 8.7% of literals are globals)." + litVar := self followLiteral: literalIndex ofMethod: method. - litVar := self literal: literalIndex. - "push/store/popLiteralVariable all fetch a literal, and either read or write the literal's value field. - The fetch of the literal needs an explicit check (otherwise we would have to scan all literals in - all methods in the stack zone, and the entire method on return, and global variables are relatively - rare; in my work image 8.7% of literals are globals)." - - (objectMemory isForwarded: litVar) ifTrue: - [litVar := self unfollow: litVar atIndex: literalIndex]. objectMemory storePointerImmutabilityCheck: ValueIndex ofObject: litVar withValue: anObject!
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!
vm-dev@lists.squeakfoundation.org