[movitz-cvs] CVS update: movitz/losp/los0-gc.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Mon Jul 12 07:59:04 UTC 2004


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

Modified Files:
	los0-gc.lisp 
Log Message:
Added some (commented out) debugging code to stop-and-copy.

Date: Mon Jul 12 00:59:04 2004
Author: ffjeld

Index: movitz/losp/los0-gc.lisp
diff -u movitz/losp/los0-gc.lisp:1.21 movitz/losp/los0-gc.lisp:1.22
--- movitz/losp/los0-gc.lisp:1.21	Thu Jul  8 11:59:51 2004
+++ movitz/losp/los0-gc.lisp	Mon Jul 12 00:59:04 2004
@@ -10,7 +10,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Sat Feb 21 17:48:32 2004
 ;;;;                
-;;;; $Id: los0-gc.lisp,v 1.21 2004/07/08 18:59:51 ffjeld Exp $
+;;;; $Id: los0-gc.lisp,v 1.22 2004/07/12 07:59:04 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -54,8 +54,8 @@
     (setf (space-other space1) space2)
     space1))
 
-(defun space-cons-pointer ()
-  (aref (%run-time-context-slot 'nursery-space) 0))
+;;;(defun space-cons-pointer ()
+;;;  (aref (%run-time-context-slot 'nursery-space) 0))
 
 (defun test ()
   (warn "install..")
@@ -329,8 +329,11 @@
       (map-stack-words #'zap-oldspace (current-stack-frame))
       (initialize-space oldspace)
       (values))))
-  
+
+(defparameter *x* #500())
+
 (defun stop-and-copy (&optional evacuator)
+  (setf (fill-pointer *x*) 0)
   (let* ((space0 (%run-time-context-slot 'nursery-space))
 	 (space1 (space-other space0)))
     (check-type space0 vector-u32)
@@ -349,14 +352,29 @@
 		 (lambda (x location)
 		   "If x is in oldspace, migrate it to newspace."
 		   (declare (ignore location))
-		   (if (not (object-in-space-p oldspace x))
-		       x
-		     (let ((forwarded-x (memref (object-location x) 0 1 :lisp)))
-		       (if (object-in-space-p newspace forwarded-x)
-			   forwarded-x
-			 (let ((forward-x (shallow-copy x)))
-			   (setf (memref (object-location x) 0 1 :lisp) forward-x)
-			   forward-x))))))))
+		   (cond
+		    ((not (object-in-space-p oldspace x))
+		     x)
+		    #+ignore
+		    ((typep x 'muerte::tag6)
+		     (let ((fwi (position (object-location x) *x* :test #'eq)))
+		       (if fwi
+			   (muerte::%word-offset (aref *x* (1+ fwi)) 6)
+			 (let ((fw (shallow-copy x)))
+			   (vector-push (object-location x) *x*)
+			   (vector-push (object-location fw) *x*)
+			   fw))))
+		    (t (let ((forwarded-x (memref (object-location x) 0 1 :lisp)))
+			 (if (object-in-space-p newspace forwarded-x)
+			     (progn
+			       (assert (eq (object-tag forwarded-x)
+					   (object-tag x)))
+			       forwarded-x)
+			   (let ((forward-x (shallow-copy x)))
+			     (when (typep x 'muerte::bignum)
+			       (assert (= x forward-x)))
+			     (setf (memref (object-location x) 0 1 :lisp) forward-x)
+			     forward-x)))))))))
 	;; Scavenge roots
 	(map-heap-words evacuator 0 (+ (malloc-buffer-start)
 				       (* 2 (malloc-cons-pointer))))
@@ -370,6 +388,17 @@
 			       (+ newspace-location scan-pointer)
 			       (+ newspace-location (space-fresh-pointer newspace)))
 	       (setf scan-pointer fresh-pointer))
+
+	(dotimes (i (truncate (length *x*) 2))
+	  (let ((x (muerte::%word-offset (aref *x* (* i 2)) 6))
+		(y (muerte::%word-offset (aref *x* (1+ (* i 2))) 6)))
+	    (assert (and (object-in-space-p newspace y)
+			 (object-in-space-p oldspace x)
+			 (or (typep x 'muerte::std-instance)
+			     (equalp x y)))
+		()
+	      "Fail: i=~D, x: ~S/~Z, y: ~S/~Z, o: ~Z, n: ~Z" i x x y y oldspace newspace)))
+
 	;; GC completed, oldspace is evacuated.
 	(let ((old-size (truncate (- (space-fresh-pointer oldspace) 2) 2))
 	      (new-size (truncate (- (space-fresh-pointer newspace) 2) 2)))





More information about the Movitz-cvs mailing list