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

commits at source.squeak.org commits at source.squeak.org
Tue Feb 4 00:34:28 UTC 2020


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2701.mcz

==================== Summary ====================

Name: VMMaker.oscog-eem.2701
Author: eem
Time: 3 February 2020, 4:34:10.823106 pm
UUID: 1a142e3b-1246-43e2-b1ec-4d20f7edc92d
Ancestors: VMMaker.oscog-eem.2700

Slang: Fix segregateByGroupingSizeAndVisibility: for plugins (sizeof: #sqInt = 6).

=============== Diff against VMMaker.oscog-eem.2700 ===============

Item was changed:
  ----- Method: CCodeGenerator>>segregateByGroupingSizeAndVisibility: (in category 'utilities') -----
  segregateByGroupingSizeAndVisibility: variables
  	"Sort variables by grouping (clusteredVariables first), by size (pointer & integer
  	 vars sorted from defaultWordSize to bytes), and finally by size, public last.  The
  	 intent is to group smaller variables together for better locality (because we can)."
  	| clusteredVariableNames streams defaultStream defaultWordSize groupedBySize privateStream publicStream |
+ 	defaultWordSize := vmClass ifNotNil: [vmClass objectMemoryClass wordSize] ifNil: 8. "We now live in a 64-bit"
  	clusteredVariableNames := ([vmClass clusteredVariableNames]
  									on: MessageNotUnderstood
  									do: [:ex| #()]).
  	streams := (1 to: 8) collect: [:i| i isPowerOfTwo ifTrue: [(Array new: variables size // 2) writeStream]].
+ 	streams at: 6 put: (streams at: defaultWordSize). "In plugin land sqInt has size 6..."
  	defaultStream := (Array new: variables size // 2) writeStream.
- 	defaultWordSize := vmClass ifNotNil: [vmClass objectMemoryClass wordSize] ifNil: 8. "We now live in a 64-bit"
  	variables do:
  		[:varName| | type |
  		(clusteredVariableNames includes: varName) ifFalse:
  			[type := variableDeclarations
  						at: varName
  						ifPresent: [:decl| self extractTypeFor: varName fromDeclaration: decl]
  						ifAbsent: [#sqInt].
  			 ((self isSimpleType: type)
  				ifTrue: [streams at: ((self isPointerCType: type)
  										ifTrue: [defaultWordSize]
  										ifFalse: [self sizeOfIntegralCType: type])]
  				ifFalse: [defaultStream])
  					nextPut: varName]].
  	groupedBySize := Array new: variables size streamContents:
  						[:varStream|
  						varStream
  							nextPutAll: clusteredVariableNames;
  							nextPutAll: (streams at: defaultWordSize) contents;
  							nextPutAll: (streams at: (defaultWordSize = 8 ifTrue: [4] ifFalse: [8])) contents;
  							nextPutAll: (streams at: 2) contents;
  							nextPutAll: (streams at: 1) contents;
  							nextPutAll: defaultStream contents].
  	publicStream := (Array new: variables size // 2) writeStream.
  	privateStream := (Array new: variables size // 2) writeStream.
  	groupedBySize do:
  		[:varName|
  		(((self mustBeGlobal: varName) or: [clusteredVariableNames includes: varName])
  			ifTrue: [publicStream]
  			ifFalse: [privateStream]) nextPut: varName].
  	^privateStream contents, publicStream contents!



More information about the Vm-dev mailing list