[Vm-dev] VM Maker: VMMaker.oscog-eem.1435.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Aug 18 00:10:21 UTC 2015


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1435.mcz

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

Name: VMMaker.oscog-eem.1435
Author: eem
Time: 17 August 2015, 5:08:53.21 pm
UUID: 114c4214-dede-4f25-9bbb-c912623d0ef4
Ancestors: VMMaker.oscog-eem.1434

...and don't break it for the 32-bit VMs.

=============== Diff against VMMaker.oscog-eem.1434 ===============

Item was changed:
  ----- Method: InterpreterPrimitives>>primitiveBitShift (in category 'arithmetic integer primitives') -----
+ primitiveBitShift
+ 	"Perform a bitShift.  In 32-bits deal only with non-negative 32-bit integers.
+ 	  In 64-bits deal with signed 64-bit quantities (max (2^63)-1)."
- 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:
  					[^self primitiveFail]]
  			ifFalse: "Right shift -- OK to lose bits"
  				[integerArgument >= objectMemory numSmallIntegerBits negated ifFalse:
  					[^self primitiveFail].
+ 				 shifted := objectMemory wordSize = 4
+ 								ifTrue: [integerReceiver >> (0 - integerArgument)]
+ 								ifFalse: [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