[squeak-dev] The Trunk: System-ul.714.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Apr 1 21:19:47 UTC 2015


Levente Uzonyi uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-ul.714.mcz

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

Name: System-ul.714
Author: ul
Time: 1 April 2015, 11:19:18.334 pm
UUID: 85f78b85-369c-4bd7-8e6d-52c9e63f27c1
Ancestors: System-ul.713

Avoid LargeInteger arithmetic in ThirtyTwoBitRegister>>leftRotateBy:.

=============== Diff against System-ul.713 ===============

Item was changed:
  ----- Method: ThirtyTwoBitRegister>>leftRotateBy: (in category 'accumulator ops') -----
  leftRotateBy: bits
  	"Rotate my contents left by the given number of bits, retaining exactly 32 bits."
+ 	"Details: Perform this operation with no LargeInteger arithmetic."
- 	"Details: Perform this operation with as little LargeInteger arithmetic as possible."
  
+ 	| bitCount newHi |
+ 	bitCount := bits.
+ 	bitCount >= 32 ifTrue: [ bitCount := bitCount \\ 32 ].
+ 	bitCount >= 16 ifTrue: [
+ 		newHi := low.
+ 		low := hi.
+ 		hi := newHi.
+ 		bitCount := bitCount - 16 ].
+ 	bitCount >= 15 ifTrue: [
+ 		newHi := ((hi bitAnd: 16r1) bitShift: 15) bitOr: (low bitShift: -1).
+ 		low := ((low bitAnd: 16r1) bitShift: 15) bitOr: (hi bitShift: -1).
+ 		hi := newHi.
+ 		^self ].
+ 	bitCount >= 1 ifTrue: [
+ 		| shift |
+ 		shift := bitCount - 16.
+ 		newHi := ((hi bitShift: bitCount) bitAnd: 16rFFFF) bitOr: (low bitShift: shift).
+ 		low := ((low bitShift: bitCount) bitAnd: 16rFFFF) bitOr: (hi bitShift: shift).
+ 		hi := newHi ]!
- 	| bitCount s1 s2 newHi |
- 	"ensure bitCount is in range [0..31]"
- 	bitCount := bits \\ 32.
- 	bitCount > 16
- 		ifTrue: [
- 			s1 := bitCount - 16.
- 			s2 := s1 - 16.
- 			newHi := ((low bitShift: s1) bitAnd: 16rFFFF) bitOr: (hi bitShift: s2).
- 			low := ((hi bitShift: s1) bitAnd: 16rFFFF) bitOr: (low bitShift: s2).
- 			hi := newHi]
- 		ifFalse: [
- 			s1 := bitCount.
- 			s2 := s1 - 16.
- 			newHi := ((hi bitShift: s1) bitAnd: 16rFFFF) bitOr: (low bitShift: s2).
- 			low := ((low bitShift: s1) bitAnd: 16rFFFF) bitOr: (hi bitShift: s2).
- 			hi := newHi]
- !



More information about the Squeak-dev mailing list