[Vm-dev] VM Maker: VMMaker.oscog-eem.3293.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Jan 12 22:05:02 UTC 2023


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]]]]]!



More information about the Vm-dev mailing list