[Vm-dev] VM Maker: ImageFormat-dtl.26.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Jul 25 18:03:25 UTC 2017


David T. Lewis uploaded a new version of ImageFormat to project VM Maker:
http://source.squeak.org/VMMaker/ImageFormat-dtl.26.mcz

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

Name: ImageFormat-dtl.26
Author: dtl
Time: 25 July 2017, 8:11:17.418 am
UUID: f97d3f06-0bf7-4472-aecd-0a750c9d7ca1
Ancestors: ImageFormat-dtl.25

Bit 17 of the image format number may be used as a test for 64-bit-ness for both Spur and V3. Add testBit17AsTestFor64BitImages to document this.

The changes in ImageFormat-dtl.20 for format numbers 68019 and 68021 were missing test support, add it here.

=============== Diff against ImageFormat-dtl.25 ===============

Item was changed:
  ----- Method: ImageFormat class>>knownVersionNumbers (in category 'initialize-release') -----
  knownVersionNumbers
  	"Version numbers currently in use or likely to be used (e.g. 64-bit Cog formats)"
  
  	"ImageFormat knownVersionNumbers collect: [:e | (ImageFormat fromInteger: e) description]"
  
+ 	^ self baseVersionNumbers, "the original format number variants"
- 	^ self baseVersionNumbers, "the original four variants"
  		{
  			6505 .	"Cog and StackVM"
+ 			68004 .	"Cog and StackVM running 64-bit image"
- 			68003 .	"Cog and StackVM running 64-bit image"
  			6521 .	"Spur 32 bit object memory"
  			68019 .	"Spur 64 bit object memory (early)"
  			68021 .	"Spur 64 bit object memory"
  				" ... add others here as bits are allocated to represent requirements of other image formats"
  		}
  !

Item was changed:
  ----- Method: ImageFormatTest>>testAsInteger (in category 'testing') -----
  testAsInteger
  
  	self assert: (ImageFormat fromInteger: 6502) asInteger = 6502.
  	self assert: (ImageFormat fromInteger: 6504) asInteger = 6504.
  	self assert: (ImageFormat fromInteger: 68000) asInteger = 68000.
  	self assert: (ImageFormat fromInteger: 68002) asInteger = 68002.
  	self assert: (ImageFormat fromInteger: 6521) asInteger = 6521.
  	self assert: (ImageFormat fromInteger: 68019) asInteger = 68019.
+ 	self assert: (ImageFormat fromInteger: 68021) asInteger = 68021.
  	!

Item was added:
+ ----- Method: ImageFormatTest>>testBit17AsTestFor64BitImages (in category 'testing') -----
+ testBit17AsTestFor64BitImages
+ 	"If bit 17 of the version number is 1, then the image is a 64-bit image."
+ 
+ 	ImageFormat knownVersionNumbers do: [ :versionNumber | | is64 bit17 |
+ 		is64 := (ImageFormat fromInteger: versionNumber) is64Bit.
+ 		bit17 := versionNumber bitAt: 17.
+ 		self assert: bit17 = 1 equals:is64
+ 	].
+ !

Item was changed:
  ----- Method: ImageFormatTest>>testIs32Bit (in category 'testing') -----
  testIs32Bit
  
  	self assert: (ImageFormat wordSize: 4) is32Bit.
  	self assert: (ImageFormat new fromInteger: 6504) is32Bit.
  	self deny: (ImageFormat wordSize: 8) is32Bit.
  	self deny: (ImageFormat new fromInteger: 68002) is32Bit.
  	self deny: (ImageFormat fromInteger: 6521) is64Bit.
  	self assert: (ImageFormat new fromInteger: 68019) is64Bit.
+ 	self assert: (ImageFormat new fromInteger: 68021) is64Bit.
  !

Item was changed:
  ----- Method: ImageFormatTest>>testIs64Bit (in category 'testing') -----
  testIs64Bit
  
  	self deny: (ImageFormat wordSize: 4) is64Bit.
  	self deny: (ImageFormat new fromInteger: 6504) is64Bit.
  	self assert: (ImageFormat wordSize: 8) is64Bit.
  	self assert: (ImageFormat new fromInteger: 68002) is64Bit.
  	self deny: (ImageFormat fromInteger: 6521) is64Bit.
  	self assert: (ImageFormat new fromInteger: 68019) is64Bit.
+ 	self assert: (ImageFormat new fromInteger: 68021) is64Bit.
  !

Item was changed:
  ----- Method: ImageFormatTest>>testIsValidVersionNumber (in category 'testing') -----
  testIsValidVersionNumber
  
  	self should: [ImageFormat fromInteger: 0] raise: Error.
  	self should: [ImageFormat fromInteger: (6502 bitAnd: 16r80000000)] raise: Error.
  	self should: [ImageFormat fromInteger: (6502 bitAt: 31 put: 1)] raise: Error.
  	self should: [ImageFormat fromInteger: 6500] raise: Error.
  	self should: [ImageFormat fromInteger: 6501] raise: Error.
  	self should: [ImageFormat fromInteger: 6503] raise: Error. "Cog requires both capabilities"
  	self should: [ImageFormat fromInteger: 68001] raise: Error. "Cog requires both capabilities"
  
  	self assert: ImageFormat default isValidVersionNumber.
  	self assert: (ImageFormat wordSize: 4 closures: false) isValidVersionNumber.
  	self assert: (ImageFormat wordSize: 4 closures: true) isValidVersionNumber.
  	self assert: (ImageFormat wordSize: 8 closures: false) isValidVersionNumber.
  	self assert: (ImageFormat wordSize: 8 closures: true) isValidVersionNumber.
  	self assert: (ImageFormat fromInteger: 6502) isValidVersionNumber.
  	self assert: (ImageFormat fromInteger: (6502 bitAt: 31 put: 0)) isValidVersionNumber.
  	self assert: (ImageFormat fromInteger: 6521) isValidVersionNumber.
+ 	self assert: (ImageFormat fromInteger:68000) isValidVersionNumber.
+ 	self assert: (ImageFormat fromInteger:68002) isValidVersionNumber.
+ 	self assert: (ImageFormat fromInteger:68004) isValidVersionNumber.
+ 	self assert: (ImageFormat fromInteger:68003) isValidVersionNumber. "valid but unused, as with 68019"
  	self assert: (ImageFormat fromInteger: 68019) isValidVersionNumber.
+ 	self assert: (ImageFormat fromInteger: 68021) isValidVersionNumber.
  
  !

Item was changed:
  ----- Method: ImageFormatTest>>testRequiresNativeFloatWordOrder (in category 'testing') -----
  testRequiresNativeFloatWordOrder
  	"Required for Cog and StackInterpreter"
  
  	| v |
  	v := ImageFormat wordSize: 4.
  	self deny: v requiresNativeFloatWordOrder.
  	v setCogSupportRequirement: false.
  	self assert: v asInteger = 6502.
  	self deny: v requiresNativeFloatWordOrder.
  	v setCogSupportRequirement: true.
  	self assert: v asInteger = 6505.
  	self assert: v requiresNativeFloatWordOrder.
  	v setSpurSupportRequirement: true.
  	self assert: v asInteger = 6521.
  
  	v := ImageFormat wordSize: 8.
  	self deny: v requiresNativeFloatWordOrder.
  	v setCogSupportRequirement: false.
  	self assert: v asInteger = 68000.
  	self deny: v requiresNativeFloatWordOrder.
  	v setCogSupportRequirement: true.
  	self assert: v asInteger = 68003.
  	self assert: v requiresNativeFloatWordOrder.
  	v setSpurSupportRequirement: true.
  	self assert: v asInteger = 68019.
  	
  	self deny: (ImageFormat wordSize: 4 cog: false) requiresNativeFloatWordOrder.
  	self deny: (ImageFormat wordSize: 4 cog: false) requiresClosureSupport.
  	self deny: (ImageFormat wordSize: 8 cog: false) requiresNativeFloatWordOrder.
  	self deny: (ImageFormat wordSize: 8 cog: false) requiresClosureSupport.
  	self assert: (ImageFormat wordSize: 4 cog: true) requiresNativeFloatWordOrder.
  	self assert: (ImageFormat wordSize: 4 cog: true) requiresClosureSupport.
  	self assert: (ImageFormat wordSize: 8 cog: true) requiresNativeFloatWordOrder.
  	self assert: (ImageFormat wordSize: 8 cog: true) requiresClosureSupport.
  	self assert: (ImageFormat fromInteger: 6521) requiresNativeFloatWordOrder.
  	self assert: (ImageFormat fromInteger: 6521) requiresClosureSupport.
  	self assert: (ImageFormat fromInteger: 68019) requiresNativeFloatWordOrder.
  	self assert: (ImageFormat fromInteger: 68019) requiresClosureSupport.
+ 	self assert: (ImageFormat fromInteger: 68021) requiresNativeFloatWordOrder.
+ 	self assert: (ImageFormat fromInteger: 68021) requiresClosureSupport.
+ 
  !



More information about the Vm-dev mailing list