[Vm-dev] VM Maker: VMMaker-dtl.350.mcz

commits at source.squeak.org commits at source.squeak.org
Sun Sep 7 03:45:53 UTC 2014

David T. Lewis uploaded a new version of VMMaker to project VM Maker:

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

Name: VMMaker-dtl.350
Author: dtl
Time: 6 September 2014, 11:44:28.389 pm
UUID: 2ad132b0-5fb3-4580-b5a8-29af12c3cb81
Ancestors: VMMaker-dtl.349

VMMaker 4.13.6

Fix primitiveBitShift (primitive 17) for sqInt declared 64 bits, as in a VM for 64-bit image format 68002.

In image format 68002, bit shift left failed because of return type limited to a 32-bit large integer, but internally the primitive successfully shifted left into a variable declared as a 64 bit sqInt.. The simple fix (implemented here) is to declare the variable as 32 bit unsigned to agree with the 32-bit logic of the existing primitive.

Note that permitting a left shift into a 64 bit variable makes sense generally, and the primitive could be recoded to accomodate this for shift left, with the primitive answering positive64BitIntegerFor: rather than positive32BitIntegerFor: in the case of a shift left to allow for the greater range (not implemented in this update).

With this update, all KernelTests-Numbers tests pass for the 64-bit image format 68002.

=============== Diff against VMMaker-dtl.349 ===============

Item was changed:
  ----- Method: InterpreterPrimitives>>primitiveBitShift (in category 'arithmetic integer primitives') -----
  	| integerReceiver integerArgument shifted |
+ 	<var: #shifted type: 'unsigned'>
  	integerArgument := self popInteger.
  	integerReceiver := self popPos32BitInteger.
  	self successful ifTrue: [
  		integerArgument >= 0 ifTrue: [
  			"Left shift -- must fail if we lose bits beyond 32"
  			self success: integerArgument <= 31.
  			shifted := integerReceiver << integerArgument.
  			self success: (shifted >> integerArgument) = integerReceiver.
  		] ifFalse: [
  			"Right shift -- OK to lose bits"
  			self success: integerArgument >= -31.
  			shifted := integerReceiver >> (0 - integerArgument).
  	self successful
  		ifTrue: [self push: (self positive32BitIntegerFor: shifted)]
  		ifFalse: [self unPop: 2]!

Item was changed:
  ----- Method: VMMaker class>>versionString (in category 'version testing') -----
  	"VMMaker versionString"
+ 	^'4.13.6'!
- 	^'4.13.7'!

More information about the Vm-dev mailing list