[Vm-dev] VM Maker: VMMaker.oscog-eem.1434.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Aug 17 23:56:34 UTC 2015
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1434.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1434
Author: eem
Time: 17 August 2015, 4:55:04.843 pm
UUID: 34b0a129-6a56-4023-94d1-50a55188b497
Ancestors: VMMaker.oscog-eem.1433
Fix negative 64-bit shift in the 64-bit Spur interpreter.
=============== Diff against VMMaker.oscog-eem.1433 ===============
Item was changed:
----- Method: InterpreterPrimitives>>primitiveBitShift (in category 'arithmetic integer primitives') -----
primitiveBitShift
| integerReceiver integerArgument shifted |
<var: #integerReceiver type: #sqInt>
integerArgument := self stackTop.
(objectMemory isIntegerObject: integerArgument) ifFalse:
[^self primitiveFail].
integerReceiver := self stackValue: 1.
objectMemory wordSize = 4
ifTrue:
[integerReceiver := self positive32BitValueOf: integerReceiver]
ifFalse:
[integerReceiver := self signed64BitValueOf: integerReceiver].
self successful ifTrue:
[(integerArgument := objectMemory integerValueOf: integerArgument) >= 0
ifTrue: "Left shift -- must fail bits would be lost"
[integerArgument <= objectMemory numSmallIntegerBits ifFalse:
[^self primitiveFail].
shifted := integerReceiver << integerArgument.
integerReceiver = (objectMemory wordSize = 4
ifTrue: [shifted >> integerArgument]
+ ifFalse: [shifted >>> integerArgument]) ifFalse:
- ifFalse: [shifted >>> integerArgument]) ifFalse:
[^self primitiveFail]]
ifFalse: "Right shift -- OK to lose bits"
[integerArgument >= objectMemory numSmallIntegerBits negated ifFalse:
[^self primitiveFail].
+ shifted := integerReceiver >>> (0 - integerArgument)].
- shifted := integerReceiver >> (0 - integerArgument)].
shifted := objectMemory wordSize = 4
ifTrue: [self positive32BitIntegerFor: shifted]
ifFalse:
[(objectMemory isIntegerValue: shifted)
ifTrue: [objectMemory integerObjectOf: shifted]
ifFalse: [self signed64BitIntegerFor: shifted]].
self pop: 2 thenPush: shifted]!
More information about the Vm-dev
mailing list