[movitz-cvs] CVS update: movitz/image.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Tue Jun 1 13:42:06 UTC 2004


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

Modified Files:
	image.lisp 
Log Message:
Added concept of "thread-atomical" code, which allows some small
section of code to run atomically with respect to the same thread
(i.e. should the thread be interrupted for whatever reason).
"Atomically" is here used in the sense all-or-nothing. Such
code-blocks can still be interrupted, but if so, it will be re-started
from some declared starting-point.

Date: Tue Jun  1 06:42:06 2004
Author: ffjeld

Index: movitz/image.lisp
diff -u movitz/image.lisp:1.31 movitz/image.lisp:1.32
--- movitz/image.lisp:1.31	Mon May 24 12:05:59 2004
+++ movitz/image.lisp	Tue Jun  1 06:42:06 2004
@@ -9,7 +9,7 @@
 ;;;; Created at:    Sun Oct 22 00:22:43 2000
 ;;;; Distribution:  See the accompanying file COPYING.
 ;;;;                
-;;;; $Id: image.lisp,v 1.31 2004/05/24 19:05:59 ffjeld Exp $
+;;;; $Id: image.lisp,v 1.32 2004/06/01 13:42:06 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -450,11 +450,39 @@
    (segment-descriptor-7
     :binary-type segment-descriptor
     :initform (make-segment-descriptor))
+   (atomically-status
+    :binary-type (define-bitfield atomically-status (lu32)
+		   (((:enum :byte (2 3))
+		     :inactive 0
+		     :restart-primitive-function 1) ; data = slot-offset of pf.
+		    ((:bits) :reset-status-p 7
+			     :eax 8
+			     :ebx 9
+			     :ecx 10
+			     :edx 11)
+		    ((:numeric :data 16 16))))
+    :initform '(:inactive))
+   (atomically-registers
+    :binary-type lu32
+    :initform 0)
    (bochs-flags
     :binary-type lu32
     :initform 0)
    )
   (:slot-align null-cons -1))
+
+(defun atomically-status-simple-pf (pf-name reset-status-p &rest registers)
+  (bt:enum-value 'movitz::atomically-status
+		 (list* :restart-primitive-function
+			(cons :reset-status-p
+			      (if reset-status-p 1 0))
+			(cons :data
+			      (truncate (+ (tag :null)
+					   (bt:slot-offset 'movitz-constant-block
+							   (intern (symbol-name pf-name)
+								   :movitz)))
+					4))
+			registers)))
 
 (defmethod movitz-object-offset ((obj movitz-constant-block)) 0)
 





More information about the Movitz-cvs mailing list