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]!
vm-dev@lists.squeakfoundation.org