[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:
http://source.squeak.org/VMMaker/VMMaker-dtl.350.mcz
==================== 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') -----
primitiveBitShift
| 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') -----
versionString
"VMMaker versionString"
+ ^'4.13.6'!
- ^'4.13.7'!
More information about the Vm-dev
mailing list