[Vm-dev] VM Maker: Cog-eem.397.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Feb 10 01:38:39 UTC 2020


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

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

Name: Cog-eem.397
Author: eem
Time: 9 February 2020, 5:38:36.722575 pm
UUID: b1ce51e7-354e-4614-b5ab-0f910c320450
Ancestors: Cog-eem.396

Finish the mechanics of the 64-to-32-bit converter.  The resulting image doesn't yet run.  So more work to do.

=============== Diff against Cog-eem.396 ===============

Item was added:
+ ----- Method: Spur32to64BitImageConverter>>sixtyFourBitHeap (in category 'private-accessing') -----
+ sixtyFourBitHeap
+ 	^targetHeap!

Item was changed:
  ----- Method: Spur64to32BitImageConverter>>ensureSmallFloatInClassTable (in category 'bootstrap image') -----
  ensureSmallFloatInClassTable
  	"it should already be there..."
+ 	self assert: (targetHeap hashBitsOf: self smallFloatClass) = self sixtyFourBitHeap smallFloatTag!
- 	self assert: (targetHeap hashBitsOf: self smallFloatClass) = targetHeap smallFloatTag!

Item was changed:
  ----- Method: Spur64to32BitImageConverter>>mapSourceOop: (in category 'bootstrap image') -----
  mapSourceOop: sourceObj
  	"sourceInterpreter printOop: sourceObj"
  	"Map in-range Floats to SmallFloat64's, and in-range LargePointiveIntegers and LargeNegativeIntegers to SmallInteger"
  	^map
  		at: sourceObj
  		ifAbsent:
  			[| value box |
  			 self assert: (sourceHeap isImmediate: sourceObj).
  			 (sourceHeap isImmediateCharacter: sourceObj)
  				ifTrue: [targetHeap characterObjectOf: (sourceHeap characterValueOf: sourceObj)]
  				ifFalse:
  					[(sourceHeap isIntegerObject: sourceObj)
  						ifTrue:
  							[(targetHeap isIntegerValue: (value := sourceHeap integerValueOf: sourceObj))
  								ifTrue: [targetHeap integerObjectOf: value]
  								ifFalse:
  									[box := targetHeap
  													allocateSlots: 2
  													format: (targetHeap byteFormatForNumBytes: value digitLength)
  													classIndex: (value < 0
  																	ifTrue: [ClassLargeNegativeIntegerCompactIndex]
  																	ifFalse: [ClassLargePositiveIntegerCompactIndex]).
  									 targetHeap storeLong64: 0 ofObject: box withValue: value abs.
  									 box]]
  						ifFalse:
  							[self assert: (sourceHeap isImmediateFloat: sourceObj).
  							 box := targetHeap
  											allocateSlots: 2
+ 											format: targetHeap firstLongFormat
+ 											classIndex: ClassFloatCompactIndex.
- 											format: (targetHeap byteFormatForNumBytes: value digitLength)
- 											classIndex: (value < 0
- 															ifTrue: [ClassLargeNegativeIntegerCompactIndex]
- 															ifFalse: [ClassLargePositiveIntegerCompactIndex]).
  							 targetHeap storeLong64: 0 ofObject: box withValue: (sourceHeap smallFloatBitsOf: sourceObj).
  							 box]]]!

Item was added:
+ ----- Method: Spur64to32BitImageConverter>>sixtyFourBitHeap (in category 'private-accessing') -----
+ sixtyFourBitHeap
+ 	^sourceHeap!

Item was changed:
  ----- Method: SpurMtoNBitImageConverter>>fillInBitsObject:from: (in category 'bootstrap image') -----
  fillInBitsObject: targetObj from: sourceObj
+ 	0 to: (sourceHeap num32BitUnitsOf: sourceObj) - 1 do:
- 	0 to: (sourceHeap numBytesOf: sourceObj) - 1 do:
  		[:i|
  		targetHeap
+ 			storeLong32: i
- 			storeByte: i
  			ofObject: targetObj
+ 			withValue: (sourceHeap fetchLong32: i ofObject: sourceObj)]!
- 			withValue: (sourceHeap fetchByte: i ofObject: sourceObj)]!

Item was changed:
  ----- Method: SpurMtoNBitImageConverter>>fillInObjects (in category 'bootstrap image') -----
  fillInObjects
  	"sourceInterpreter printOop: sourceObj"
+ 	| i freeListsObject |
- 	| i |
  	{sourceHeap markStack. sourceHeap weaklingStack. sourceHeap mournQueue} do:
  		[:obj|
  		obj ~= sourceHeap nilObject ifTrue:
  			[map at: obj put: (map at: sourceHeap nilObject)]].
  	i := 0.
+ 	freeListsObject := sourceHeap freeListsObject.
  	sourceHeap allObjectsDo:
  		[:sourceObj|
  		(i := i + 1) >= 10000 ifTrue:
  			[Transcript nextPut: $.; flush. i := 0].
  		(map at: sourceObj ifAbsent: nil)
  			ifNotNil:
  				[:targetObj| | format classIndex |
  				(targetHeap numSlotsOf: targetObj) > 0 ifTrue: "filter-out filtered objStack pages"
  					[format := sourceHeap formatOf: sourceObj.
  					 (targetHeap isPointersFormat: format)
  						ifTrue:
  							[((targetHeap isIndexableFormat: format)
  								and: [(classIndex := targetHeap classIndexOf: targetObj) <= ClassBlockClosureCompactIndex
  								and: [classIndex >= ClassMethodContextCompactIndex]])
  								ifTrue: [self fillInPointerObjectWithPC: targetObj from: sourceObj]
  								ifFalse: [self fillInPointerObject: targetObj from: sourceObj]]
  						ifFalse:
  							[(targetHeap isCompiledMethodFormat: format)
  								ifTrue: [self fillInCompiledMethod: targetObj from: sourceObj]
+ 								ifFalse:
+ 									[sourceObj ~= freeListsObject ifTrue:
+ 										[self fillInBitsObject: targetObj from: sourceObj]]]]]
- 								ifFalse: [self fillInBitsObject: targetObj from: sourceObj]]]]
  			ifNil: [self assert: (self isUnmappedObject: sourceObj)]]!

Item was added:
+ ----- Method: SpurMtoNBitImageConverter>>sixtyFourBitHeap (in category 'private-accessing') -----
+ sixtyFourBitHeap
+ 	self subclassResponsibility!

Item was changed:
  ----- Method: SpurMtoNBitImageConverter>>smallFloatClass (in category 'bootstrap image') -----
  smallFloatClass
+ 	^targetHeap fetchPointer: sourceHeap smallFloatTag ofObject: targetHeap classTableFirstPage!
- 	self subclassResponsibility!



More information about the Vm-dev mailing list