From: Nathan Froyd Date: Mon, 5 Feb 2007 03:47:01 +0000 (+0000) Subject: 1.0.2.9: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=9e3b2d87c442ee97ec249b929d13f298b437eaed;p=sbcl.git 1.0.2.9: Micro-optimizations to the bignum code: use LOGTEST and LOGBITP where appropriate. --- diff --git a/src/code/bignum.lisp b/src/code/bignum.lisp index 29a69bc..6c5fa65 100644 --- a/src/code/bignum.lisp +++ b/src/code/bignum.lisp @@ -605,7 +605,7 @@ (declare (type (unsigned-byte #.sb!vm:n-word-bits) ud vd umask imask m)) (dotimes (i digit-size) (setf umask (logior umask imask)) - (unless (zerop (logand ud umask)) + (when (logtest ud umask) (setf ud (modularly (- ud vd))) (setf m (modularly (logior m imask)))) (setf imask (modularly (ash imask 1))) @@ -634,7 +634,7 @@ (declare (type (unsigned-byte #.(integer-length #.sb!vm:n-word-bits)) d) (type (unsigned-byte #.sb!vm:n-word-bits) n)) (gcd-assert (>= d 0)) - (unless (zerop (logand (%bignum-ref u 0) n)) + (when (logtest (%bignum-ref u 0) n) (let ((tmp1-len (multiply-bignum-buffer-and-smallnum-to-buffer v v-len (logand n (bmod u @@ -1277,7 +1277,7 @@ (cond ;; Round down if round bit is 0. - ((zerop (logand round-bit low)) + ((not (logtest round-bit low)) (float-from-bits shifted len)) ;; If only round bit is set, then round to even. ((and (= low round-bit) @@ -1315,8 +1315,7 @@ (floor index digit-size) (if (>= word-index len) (not (bignum-plus-p bignum)) - (not (zerop (logand (%bignum-ref bignum word-index) - (ash 1 bit-index)))))))) + (logbitp bit-index (%bignum-ref bignum word-index)))))) (defun bignum-logcount (bignum) (declare (type bignum-type bignum)) diff --git a/version.lisp-expr b/version.lisp-expr index 5de724a..293721b 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.2.8" +"1.0.2.9"