Index: /trunk/ccl/level-0/l0-bignum64.lisp
===================================================================
--- /trunk/ccl/level-0/l0-bignum64.lisp	(revision 5583)
+++ /trunk/ccl/level-0/l0-bignum64.lisp	(revision 5584)
@@ -1850,5 +1850,5 @@
 	     (v-trailing-0-digits (ash v-trailing-0-bits -5)))
 	(declare (fixnum u-trailing-0-bits v-trailing-0-bits))
-	(unless (zerop u-trailing-0-digits)
+	(unless (zerop u-trailing-0-bits)
 	  (bignum-shift-right-loop-1
 	   (logand u-trailing-0-bits 31)
@@ -1904,15 +1904,16 @@
 			 u-trailing-0-digits
 			 (ash u-trailing-0-bits -5))
-		   (%init-misc 0 u2)
-		   (bignum-shift-right-loop-1
-		    (logand u-trailing-0-bits 31)
-		    u2
-		    u
-		    (the fixnum (1- (the fixnum (- u-len
-						   u-trailing-0-digits))))
-		    u-trailing-0-digits)
-		   (rotatef u u2)
-		   (%mostly-normalize-bignum-macro u)
-		   (setq u-len (%bignum-length u)))
+                   (unless (zerop u-trailing-0-bits)
+                     (%init-misc 0 u2)
+                     (bignum-shift-right-loop-1
+                      (logand u-trailing-0-bits 31)
+                      u2
+                      u
+                      (the fixnum (1- (the fixnum (- u-len
+                                                     u-trailing-0-digits))))
+                      u-trailing-0-digits)
+                     (rotatef u u2)
+                     (%mostly-normalize-bignum-macro u)
+                     (setq u-len (%bignum-length u))))
 		  (t			; (> v u)
 		   (bignum-subtract-loop v v-len u u-len v)
@@ -1923,14 +1924,15 @@
 			 v-trailing-0-digits
 			 (ash v-trailing-0-bits -5))
-		   (%init-misc 0 v2)
-		   (bignum-shift-right-loop-1
-		    (logand v-trailing-0-bits 31)
-		    v2
-		    v
-		    (the fixnum (1- (the fixnum (- v-len v-trailing-0-digits))))
-		    v-trailing-0-digits)
-		   (rotatef v v2)
-		   (%mostly-normalize-bignum-macro v)
-		   (setq v-len (%bignum-length v)))))))))))
+                   (unless (zerop v-trailing-0-bits)
+                     (%init-misc 0 v2)
+                     (bignum-shift-right-loop-1
+                      (logand v-trailing-0-bits 31)
+                      v2
+                      v
+                      (the fixnum (1- (the fixnum (- v-len v-trailing-0-digits))))
+                      v-trailing-0-digits)
+                     (rotatef v v2)
+                     (%mostly-normalize-bignum-macro v)
+                     (setq v-len (%bignum-length v))))))))))))
 
 (defun %bignum-bignum-gcd (u v)
@@ -1939,11 +1941,10 @@
 
 
-;;; nbits can't be zero here.
 (defun bignum-shift-right-loop-1 (nbits result source len idx)
   (declare (type bignum-type result source)
            (type (mod 32) nbits)
            (type bignum-index idx len))
-  (let* ((rbits (logand 31 (the (mod 32) (- 32 nbits)))))
-    (declare (type (mod 32) rbits))
+  (let* ((rbits (- 32 nbits)))
+    (declare (type (mod 33) rbits))
     (dotimes (j len)
       (let* ((x (bignum-ref source idx)))
