[movitz-cvs] CVS update: movitz/losp/ll-testing.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Fri Apr 29 22:36:49 UTC 2005


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

Modified Files:
	ll-testing.lisp 
Log Message:
*** empty log message ***
Date: Sat Apr 30 00:36:49 2005
Author: ffjeld

Index: movitz/losp/ll-testing.lisp
diff -u movitz/losp/ll-testing.lisp:1.5 movitz/losp/ll-testing.lisp:1.6
--- movitz/losp/ll-testing.lisp:1.5	Wed Apr 27 01:46:13 2005
+++ movitz/losp/ll-testing.lisp	Sat Apr 30 00:36:49 2005
@@ -10,7 +10,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Thu Apr 14 08:18:43 2005
 ;;;;                
-;;;; $Id: ll-testing.lisp,v 1.5 2005/04/26 23:46:13 ffjeld Exp $
+;;;; $Id: ll-testing.lisp,v 1.6 2005/04/29 22:36:49 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -59,6 +59,8 @@
   (values))
 
 
+(defmacro control-stack-fs (stack)
+  `(stack-frame-ref ,stack 0 2))
 
 (defmacro control-stack-esp (stack)
   `(stack-frame-ref ,stack 0 1))
@@ -137,17 +139,12 @@
 		   :esi function)))
   stack)
 
-(defun test-tt ()
-  (multiple-value-bind (thread stack)
-      (muerte.init::threading)
-    (control-stack-bootstrap stack #'format t "Hello world!")))
-
-(defun make-thread (&optional (name (gensym "thread-")) (function #'invoke-debugger) &rest args)
+(defun make-thread (&key (name (gensym "thread-")) (function #'invoke-debugger) (args '(nil)))
   "Make a thread and initialize its stack to apply function to args."
-  (let* ((fs-index 8) ; a vacant spot in the global segment descriptor table..
+  (let* ((fs-index 8)			; a vacant spot in the global segment descriptor table..
 	 (fs (* 8 fs-index))
 	 (thread (muerte::clone-run-time-context :name name))
-	 (segment-descriptor-table muerte.init::*segment-descriptor-table*))
+	 (segment-descriptor-table (symbol-value 'muerte.init::*segment-descriptor-table*)))
     (setf (segment-descriptor segment-descriptor-table fs-index)
       (segment-descriptor segment-descriptor-table (truncate (segment-register :fs) 8)))
     (setf (segment-descriptor-base-location segment-descriptor-table fs-index)
@@ -157,7 +154,8 @@
 					       function args)))
       (multiple-value-bind (ebp esp)
 	  (control-stack-fixate stack)
-	(setf (control-stack-ebp stack) ebp
+	(setf (control-stack-fs stack) fs
+	      (control-stack-ebp stack) ebp
 	      (control-stack-esp stack) esp))
       (setf (%run-time-context-slot 'dynamic-env thread) 0
 	    (%run-time-context-slot 'stack-vector thread) stack
@@ -168,7 +166,7 @@
 								 (if (>= (length stack) 200)
 								     100
 								   0))))
-      (values thread fs))))
+      (values thread))))
 
 (defun stack-bootstrapper (&rest ignore)
   (declare (ignore ignore))
@@ -194,17 +192,17 @@
 		      stack)		; XXX The extra 2 words skip the frame-setup,
 					; XXX which happens to be 8 bytes..
   (control-stack-enter-frame stack #'yield)
-  (control-stack-push 0 stack)		; XXX shouldn't need this?
   stack)
   
 
-(defun yield (target-rtc fs &optional value)
+(defun yield (target-rtc &optional value)
   (declare (dynamic-extent values))
   (assert (not (eq target-rtc (current-run-time-context))))
   (let ((my-stack (%run-time-context-slot 'stack-vector))
 	(target-stack (%run-time-context-slot 'stack-vector target-rtc)))
     (assert (not (eq my-stack target-stack)))
-    (let ((esp (control-stack-esp target-stack))
+    (let ((fs (control-stack-fs target-stack))
+	  (esp (control-stack-esp target-stack))
 	  (ebp (control-stack-ebp target-stack)))
       (assert (location-in-object-p target-stack esp))
       (assert (location-in-object-p target-stack ebp))
@@ -217,7 +215,8 @@
       (setf (%run-time-context-slot 'scratch1 target-rtc) ebp
 	    (%run-time-context-slot 'scratch2 target-rtc) esp)
       ;; Enable someone to yield back here..
-      (setf (control-stack-ebp my-stack) (asm-register :ebp)
+      (setf (control-stack-fs my-stack) (segment-register :fs)
+	    (control-stack-ebp my-stack) (asm-register :ebp)
 	    (control-stack-esp my-stack) (asm-register :esp))
       (with-inline-assembly (:returns :eax)
 	(:load-lexical (:lexical-binding fs) :untagged-fixnum-ecx)




More information about the Movitz-cvs mailing list