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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Mon Jul 12 11:09:34 UTC 2004


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

Modified Files:
	scavenge.lisp 
Log Message:
Changed the low-level formatting of bignums: Now the number of bigits
is stored as factors of 4. This restricts the number of bigits to
(1- (expt 2 14)), which is still plenty.

Date: Mon Jul 12 04:09:34 2004
Author: ffjeld

Index: movitz/losp/muerte/scavenge.lisp
diff -u movitz/losp/muerte/scavenge.lisp:1.14 movitz/losp/muerte/scavenge.lisp:1.15
--- movitz/losp/muerte/scavenge.lisp:1.14	Mon Jul 12 00:56:45 2004
+++ movitz/losp/muerte/scavenge.lisp	Mon Jul 12 04:09:34 2004
@@ -10,7 +10,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Mon Mar 29 14:54:08 2004
 ;;;;                
-;;;; $Id: scavenge.lisp,v 1.14 2004/07/12 07:56:45 ffjeld Exp $
+;;;; $Id: scavenge.lisp,v 1.15 2004/07/12 11:09:34 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -44,12 +44,12 @@
 		 `(with-inline-assembly (:returns :boolean-zf=1)
 		    (:compile-form (:result-mode :eax) ,x)
 		    (:cmpw ,code :ax))))
-	     (word-upper16 (x)
-	       "Consider x as a 32-bit integer, and return the upper 16 bits (as a fixnum)."
+	     (word-bigits (x)
+	       "If x is a bignum header word, return the number of bigits."
 	       `(with-inline-assembly (:returns :eax)
 		  (:compile-form (:result-mode :eax) ,x)
-		  (:andl #xffff0000 :eax)
-		  (:shrl ,(- 16 movitz:+movitz-fixnum-shift+) :eax))))
+		  (:andl #xfffc0000 :eax)
+		  (:shrl 16 :eax))))
     (do ((*scan-last* nil)		; Last scanned object, for debugging.
 	 (scan start-location (1+ scan)))
 	((>= scan end-location))
@@ -65,7 +65,7 @@
 	  (assert (evenp scan) ()
 	    "Scanned #x~Z at odd address #x~X." x scan)
 	  ;; Just skip the bigits
-	  (let* ((bigits (word-upper16 x))
+	  (let* ((bigits (word-bigits x))
 		 (delta (1+ (logand bigits -2))))
 	    (setf *scan-last* (%word-offset scan #.(movitz:tag :other)))
 	    (incf scan delta)))





More information about the Movitz-cvs mailing list