[movitz-cvs] CVS update: movitz/losp/muerte/integers.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Fri Sep 16 22:05:47 UTC 2005


Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv31870

Modified Files:
	integers.lisp 
Log Message:
Fixed bug in ldb%byte that would erroneously return 0 for byte-positions
above #x4000.

Date: Sat Sep 17 00:05:46 2005
Author: ffjeld

Index: movitz/losp/muerte/integers.lisp
diff -u movitz/losp/muerte/integers.lisp:1.110 movitz/losp/muerte/integers.lisp:1.111
--- movitz/losp/muerte/integers.lisp:1.110	Thu Sep  1 00:34:14 2005
+++ movitz/losp/muerte/integers.lisp	Sat Sep 17 00:05:46 2005
@@ -9,7 +9,7 @@
 ;;;; Created at:    Wed Nov  8 18:44:57 2000
 ;;;; Distribution:  See the accompanying file COPYING.
 ;;;;                
-;;;; $Id: integers.lisp,v 1.110 2005/08/31 22:34:14 ffjeld Exp $
+;;;; $Id: integers.lisp,v 1.111 2005/09/16 22:05:46 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -1053,6 +1053,10 @@
 			(i 0 (+ i 29)))
 		       ((>= i length) (bignum-canonicalize r))
 		     (bignum-set-zerof tmp)
+		     (when (get 'foo 'foo)
+		       (format t "~&i: ~D, y: #x~X ~S/~S~%" i (ldb (byte 29 i) y) 
+			       (integer-length x)
+			       (integer-length y)))
 		     (bignum-addf r (bignum-shift-leftf (bignum-mulf (bignum-addf tmp x)
 								     (ldb (byte 29 i) y))
 							i)))
@@ -1797,7 +1801,8 @@
 		 (:sarl 5 :ecx)
 		 (:andl -4 :ecx)
 		 (:addl 4 :ecx)
-		 (:cmpl #x4000 :ecx)
+		 (:cmpl ,(* #x4000 movitz:+movitz-fixnum-factor+)
+			:ecx)
 		 (:jae 'position-outside-integer)
 		 (:cmpw :cx (:ebx (:offset movitz-bignum length)))
 		 (:jc '(:sub-program (position-outside-integer)
@@ -2173,7 +2178,14 @@
 
 (defun expt (base-number power-number)
   "Take base-number to the power-number."
-  (do ((i 0 (1+ i))
-       (r 1 (* r base-number)))
-      ((>= i power-number) r)))
+  (etypecase power-number
+    (positive-fixnum
+     (do ((i 0 (1+ i))
+	  (r 1 (* r base-number)))
+	 ((>= i power-number) r)
+       (declare (index i))))
+    (positive-bignum
+     (do ((i 0 (1+ i))
+	  (r 1 (* r base-number)))
+	 ((>= i power-number) r)))))
   




More information about the Movitz-cvs mailing list