*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Sat, 28 Feb 2009 12:36:19 +0100
changeset 11605 adff1007beb2
parent 11604 64df3632e526
child 11606 f657ce220093
*** empty log message ***
LargeInteger.st
--- a/LargeInteger.st	Sat Feb 28 12:20:37 2009 +0100
+++ b/LargeInteger.st	Sat Feb 28 12:36:19 2009 +0100
@@ -871,28 +871,26 @@
     "return the bitwise-and of the receiver and the argument, anInteger"
 
 %{  /* NOCONTEXT */
-
     if (__isSmallInteger(anInteger)) {
-	INT v2 = __intVal(anInteger);
-	INT v1;
+        INT v2 = __intVal(anInteger);
+        INT v1;
 #if defined(__LSBFIRST__)
-	v1 = *(INT *)(__stringVal(__INST(digitByteArray)));
+        v1 = *(INT *)(__byteArrayVal(__INST(digitByteArray)));
 #else
-	unsigned char *digits = (unsigned char *)(__stringVal(__INST(digitByteArray)));
-
-	v1 = digits[0] & 0xFF;
-	v1 = v1 | ((digits[1] & 0xFF)<<8);
-	v1 = v1 | ((digits[2] & 0xFF)<<16);
-	v1 = v1 | ((digits[3] & 0xFF)<<24);
-	if (sizeof(unsigned INT) == 8) {
-	    v1 = v1 | ((digits[4] & 0xFF)<<32);
-	    v1 = v1 | ((digits[5] & 0xFF)<<40);
-	    v1 = v1 | ((digits[6] & 0xFF)<<48);
-	    v1 = v1 | ((digits[7] & 0xFF)<<56);
-	}
+        unsigned char *digits = (unsigned char *)(__byteArrayVal(__INST(digitByteArray)));
+
+        v1 = digits[0] & 0xFF;
+        v1 = v1 | ((digits[1] & 0xFF)<<8);
+        v1 = v1 | ((digits[2] & 0xFF)<<16);
+        v1 = v1 | ((digits[3] & 0xFF)<<24);
+# if (__POINTER_SIZE__ == 8)
+        v1 = v1 | ((digits[4] & 0xFF)<<32);
+        v1 = v1 | ((digits[5] & 0xFF)<<40);
+        v1 = v1 | ((digits[6] & 0xFF)<<48);
+        v1 = v1 | ((digits[7] & 0xFF)<<56);
+ #endif
 #endif
-
-	RETURN ( __mkSmallInteger(v1 & v2) );
+        RETURN ( __mkSmallInteger(v1 & v2) );
     }
 %}.
     ^ super bitAnd:anInteger
@@ -918,9 +916,9 @@
              is free to choose any internal representation for integers)"
 
 %{  /* NOCONTEXT */
-
     if (__isSmallInteger(anIntegerIndex)) {
         INT idx = __smallIntegerVal(anIntegerIndex) - 1;
+
         if (idx >= 0) {
             int v1;
             int byteOffset = idx / 8;
@@ -930,7 +928,7 @@
                 RETURN(__mkSmallInteger(0));
             }
 
-            v1 = ((unsigned char *)(__stringVal(__INST(digitByteArray))))[byteOffset];
+            v1 = (__byteArrayVal(__INST(digitByteArray)))[byteOffset];
             if (v1 & (1 << (idx % 8))) {
                 RETURN(__mkSmallInteger(1));
             } else {
@@ -942,14 +940,14 @@
     ^ super bitAt:anIntegerIndex
 
     "
-     16rFFFFFFFFFF01 bitAt:0
-     16rFFFFFFFFFF01 bitAt:49
-     16rFFFFFFFFFF01 bitAt:1
-     16rFFFFFFFFFF01 bitAt:2
-     16rFFFFFFFFFF02 bitAt:2
-     16rFFFFFFFF01FF bitAt:8
-     16rFFFFFFFF01FF bitAt:9
-     16rFFFFFFFF01FF bitAt:10
+     TestCase should:[ 16rFFFFFFFFFF01 bitAt:0 ] raise:Error
+     TestCase assert:( 16rFFFFFFFFFF01 bitAt:49 ) == 0
+     TestCase assert:( 16rFFFFFFFFFF01 bitAt:1  ) == 1
+     TestCase assert:( 16rFFFFFFFFFF01 bitAt:2  ) == 0
+     TestCase assert:( 16rFFFFFFFFFF02 bitAt:2  ) == 1
+     TestCase assert:( 16rFFFFFFFF01FF bitAt:8  ) == 1
+     TestCase assert:( 16rFFFFFFFF01FF bitAt:9  ) == 1
+     TestCase assert:( 16rFFFFFFFF01FF bitAt:10 ) == 0
     "
 !
 
@@ -1012,99 +1010,99 @@
      * quickly advance over full 0-words
      */
     if (__isByteArray(__INST(digitByteArray))) {
-	int __sz = __intVal(sz);
-	unsigned char *__bP = (unsigned char *)(__byteArrayVal(__INST(digitByteArray)));
-	unsigned char *__bP0 = __bP;
+        int __sz = __intVal(sz);
+        unsigned char *__bP = __byteArrayVal(__INST(digitByteArray));
+        unsigned char *__bP0 = __bP;
 
 #ifdef __UNROLL_LOOPS__
-	while (__sz > (sizeof(INT) * 4)) {
-	    if ( ((INT *)__bP)[0] != 0 ) break;
-	    if ( ((INT *)__bP)[1] != 0 ) {
-		__sz -= sizeof(INT);
-		__bP += sizeof(INT);
-		break;
-	    }
-	    if ( ((INT *)__bP)[2] != 0 ) {
-		__sz -= sizeof(INT) * 2;
-		__bP += sizeof(INT) * 2;
-		break;
-	    }
-	    if ( ((INT *)__bP)[3] != 0 ) {
-		__sz -= sizeof(INT) * 3;
-		__bP += sizeof(INT) * 3;
-		break;
-	    }
-	    __sz -= sizeof(INT) * 4;
-	    __bP += sizeof(INT) * 4;
-	}
+        while (__sz > (sizeof(INT) * 4)) {
+            if ( ((INT *)__bP)[0] != 0 ) break;
+            if ( ((INT *)__bP)[1] != 0 ) {
+                __sz -= sizeof(INT);
+                __bP += sizeof(INT);
+                break;
+            }
+            if ( ((INT *)__bP)[2] != 0 ) {
+                __sz -= sizeof(INT) * 2;
+                __bP += sizeof(INT) * 2;
+                break;
+            }
+            if ( ((INT *)__bP)[3] != 0 ) {
+                __sz -= sizeof(INT) * 3;
+                __bP += sizeof(INT) * 3;
+                break;
+            }
+            __sz -= sizeof(INT) * 4;
+            __bP += sizeof(INT) * 4;
+        }
 #endif
-	while (__sz > sizeof(INT)) {
-	    if ( ((INT *)__bP)[0] != 0 ) break;
-	    __sz -= sizeof(INT);
-	    __bP += sizeof(INT);
-	}
-	while (__sz > 0) {
-	    unsigned int c;
-
-	    if ( (c = *__bP) != 0 ) {
-		int bitIdx = (__bP - __bP0) * 8;
+        while (__sz > sizeof(INT)) {
+            if ( ((INT *)__bP)[0] != 0 ) break;
+            __sz -= sizeof(INT);
+            __bP += sizeof(INT);
+        }
+        while (__sz > 0) {
+            unsigned int c;
+
+            if ( (c = *__bP) != 0 ) {
+                int bitIdx = (__bP - __bP0) * 8;
 #ifdef __BSF
-		{
-		    int index;
-		    int t = c;
-
-		    index = __BSF(t);
-		    RETURN ( __mkSmallInteger(index + 1 + bitIdx) );
-		}
+                {
+                    int index;
+                    int t = c;
+
+                    index = __BSF(t);
+                    RETURN ( __mkSmallInteger(index + 1 + bitIdx) );
+                }
 #else
-		if (c & 0x0F) {
-		    if (c & 0x03) {
-			if (c & 0x01) {
-			    RETURN ( __mkSmallInteger( bitIdx + 1) );
-			} else {
-			    RETURN ( __mkSmallInteger( bitIdx + 2) );
-			}
-		    } else {
-			if (c & 0x04) {
-			    RETURN ( __mkSmallInteger( bitIdx + 3) );
-			} else {
-			    RETURN ( __mkSmallInteger( bitIdx + 4) );
-			}
-		    }
-		} else {
-		    if (c & 0x30) {
-			if (c & 0x10) {
-			    RETURN ( __mkSmallInteger( bitIdx + 5) );
-			} else {
-			    RETURN ( __mkSmallInteger( bitIdx + 6) );
-			}
-		    } else {
-			if (c & 0x40) {
-			    RETURN ( __mkSmallInteger( bitIdx + 7) );
-			} else {
-			    RETURN ( __mkSmallInteger( bitIdx + 8) );
-			}
-		    }
-		}
+                if (c & 0x0F) {
+                    if (c & 0x03) {
+                        if (c & 0x01) {
+                            RETURN ( __mkSmallInteger( bitIdx + 1) );
+                        } else {
+                            RETURN ( __mkSmallInteger( bitIdx + 2) );
+                        }
+                    } else {
+                        if (c & 0x04) {
+                            RETURN ( __mkSmallInteger( bitIdx + 3) );
+                        } else {
+                            RETURN ( __mkSmallInteger( bitIdx + 4) );
+                        }
+                    }
+                } else {
+                    if (c & 0x30) {
+                        if (c & 0x10) {
+                            RETURN ( __mkSmallInteger( bitIdx + 5) );
+                        } else {
+                            RETURN ( __mkSmallInteger( bitIdx + 6) );
+                        }
+                    } else {
+                        if (c & 0x40) {
+                            RETURN ( __mkSmallInteger( bitIdx + 7) );
+                        } else {
+                            RETURN ( __mkSmallInteger( bitIdx + 8) );
+                        }
+                    }
+                }
 #endif
-		break;
-	    }
-	    __sz--;
-	    __bP++;
-	}
-	idx0 = __mkSmallInteger( __bP - __bP0 + 1 );
+                break;
+            }
+            __sz--;
+            __bP++;
+        }
+        idx0 = __mkSmallInteger( __bP - __bP0 + 1 );
     }
 %}.
     "/ never actually reached
     idx0 to:sz do:[:digitIndex |
-	(byte := digitByteArray at:digitIndex) ~~ 0 ifTrue:[
-	    ^ (digitIndex-1)*8 + (byte lowBit)
-	]
+        (byte := digitByteArray at:digitIndex) ~~ 0 ifTrue:[
+            ^ (digitIndex-1)*8 + (byte lowBit)
+        ]
     ].
     ^ 0 "/ should not happen
 
     "
-     (1 bitShift:0) lowBit
+     (1 bitShift:0) lowBit     
      (1 bitShift:10) lowBit
      (1 bitShift:20) lowBit
      (1 bitShift:30) lowBit
@@ -1116,31 +1114,31 @@
      (1 bitShift:33) lowBit
      (1 bitShift:33) highBit
      (1 bitShift:64) lowBit
-     (1 bitShift:64) highBit
+     (1 bitShift:64) highBit  
      (1 bitShift:1000) lowBit
      (1 bitShift:1000) highBit
      ((1 bitShift:64)-1) lowBit
      ((1 bitShift:64)-1) highBit
 
      1 to:1000 do:[:idx |
-	self assert:(( 1 bitShift:idx) lowBit = (idx+1)).
-	self assert:(( 1 bitShift:idx) lowBit = ( 1 bitShift:idx) highBit).
-	self assert:(( 3 bitShift:idx) lowBit = (idx+1)).
-	self assert:(( 7 bitShift:idx) lowBit = (idx+1)).
-	self assert:(( 15 bitShift:idx) lowBit = (idx+1)).
-	self assert:(( 31 bitShift:idx) lowBit = (idx+1)).
-	self assert:(( 63 bitShift:idx) lowBit = (idx+1)).
-	self assert:(( 127 bitShift:idx) lowBit = (idx+1)).
-	self assert:(( 255 bitShift:idx) lowBit = (idx+1)).
+        self assert:(( 1 bitShift:idx) lowBit = (idx+1)).
+        self assert:(( 1 bitShift:idx) lowBit = ( 1 bitShift:idx) highBit).
+        self assert:(( 3 bitShift:idx) lowBit = (idx+1)).
+        self assert:(( 7 bitShift:idx) lowBit = (idx+1)).
+        self assert:(( 15 bitShift:idx) lowBit = (idx+1)).
+        self assert:(( 31 bitShift:idx) lowBit = (idx+1)).
+        self assert:(( 63 bitShift:idx) lowBit = (idx+1)).
+        self assert:(( 127 bitShift:idx) lowBit = (idx+1)).
+        self assert:(( 255 bitShift:idx) lowBit = (idx+1)).
      ]
 
      |num|
 
      num := (1 bitShift:1000).
      Time millisecondsToRun:[
-	100000 timesRepeat:[
-	    num lowBit
-	]
+        100000 timesRepeat:[
+            num lowBit
+        ]
      ]
     "
 
@@ -4824,5 +4822,5 @@
 !LargeInteger class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.191 2009-02-28 11:20:37 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.192 2009-02-28 11:36:19 cg Exp $'
 ! !