diff --git a/compiler/srctran.lisp b/compiler/srctran.lisp
index b4a2bc18abc1d6592581c3767c9c414e6b934487..f0340e05985cf24b575e0ab9c0c369a237f1dd80 100644
--- a/compiler/srctran.lisp
+++ b/compiler/srctran.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/srctran.lisp,v 1.155 2005/02/07 17:27:16 rtoy Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/srctran.lisp,v 1.156 2005/04/23 15:04:09 rtoy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -2245,15 +2245,15 @@
   ;; Note that the body of the loop doesn't really do anything unless
   ;; ~a&~c&m is non-zero.  So, rather than start m at #x80000000, we
   ;; can start at the most significant bit where ~a&~c is non-zero.
-  (let ((m (ash 1 (1- (integer-length (logandc2 (lognot a) c))))))
+  (let ((m (ash 1 (integer-length (logandc2 (lognot a) c)))))
     (loop while (not (zerop m))
        do
        (when (/= (logand m (lognot a) (lognot c)) 0)
-	 (let ((temp (logandc2 (logior a m) m)))
+	 (let ((temp (logandc2 (logior a m) (- m 1))))
 	   (when (<= temp b)
 	     (setf a temp)
 	     (return)))
-	 (let ((temp (logandc2 (logior c m) m)))
+	 (let ((temp (logandc2 (logior c m) (- m 1))))
 	   (when (<= temp d)
 	     (setf c temp)
 	     (return))))
@@ -2265,7 +2265,7 @@
   ;; b&~d&m is non-zero or ~b&d&m is non-zero.  So, rather than start
   ;; m at #x80000000, we can start at the most significant bit where
   ;; b&~d or ~b&d is non-zero.  That is, b^d is non-zero
-  (let ((m (ash 1 (1- (integer-length (logxor b d))))))
+  (let ((m (ash 1 (integer-length (logxor b d)))))
     (loop while (not (zerop m))
        do
        (cond ((/= (logand b (lognot d) m) 0)
@@ -2286,7 +2286,7 @@
   ;; is non-zero or if ~c&a&m is non-zero.  So rather than start m at
   ;; #x80000000, we can start at the most significant bit where ~a&c
   ;; or ~c&a is non-zero, i.e., where MSB of a^c.
-  (let ((m (ash 1 (1- (integer-length (logxor a c))))))
+  (let ((m (ash 1 (integer-length (logxor a c)))))
     (loop while (not (zerop m))
        do
        (cond ((/= (logandc2 (logand c m) a) 0)
@@ -2307,7 +2307,7 @@
 (defun max-or (a b c d)
   ;; Note that the body of the loop doesn't do anything unless b&d&m
   ;; is non-zero.  That is, when the MSB of b&d is non-zero.
-  (let ((m (ash 1 (1- (integer-length (logand b d))))))
+  (let ((m (ash 1 (integer-length (logand b d)))))
     (loop while (not (zerop m))
        do
        (when (/= (logand m b d) 0)