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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Wed Apr 14 12:25:28 UTC 2004


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

Modified Files:
	functions.lisp 
Log Message:
Slight rewrite of some funobj accessors. This still needs work, though.

Date: Wed Apr 14 08:25:28 2004
Author: ffjeld

Index: movitz/losp/muerte/functions.lisp
diff -u movitz/losp/muerte/functions.lisp:1.7 movitz/losp/muerte/functions.lisp:1.8
--- movitz/losp/muerte/functions.lisp:1.7	Sun Mar 28 12:31:41 2004
+++ movitz/losp/muerte/functions.lisp	Wed Apr 14 08:25:27 2004
@@ -10,7 +10,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Tue Mar 12 22:58:54 2002
 ;;;;                
-;;;; $Id: functions.lisp,v 1.7 2004/03/28 17:31:41 ffjeld Exp $
+;;;; $Id: functions.lisp,v 1.8 2004/04/14 12:25:27 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -84,14 +84,13 @@
 
 (defun funobj-code-vector (funobj)
   (check-type funobj compiled-function)
-  (%word-offset (memref funobj #.(bt:slot-offset 'movitz:movitz-funobj 'movitz::code-vector) 0 :lisp)
-		-2))
+  (memref funobj #.(bt:slot-offset 'movitz:movitz-funobj 'movitz::code-vector) 0 :code-vector))
 
 (defun (setf funobj-code-vector) (code-vector funobj)
   (check-type funobj compiled-function)
   (check-type code-vector vector-u8)
-  (setf (memref funobj #.(bt:slot-offset 'movitz:movitz-funobj 'movitz::code-vector) 0 :lisp)
-    (%word-offset code-vector 2)))
+  (setf (memref funobj #.(bt:slot-offset 'movitz:movitz-funobj 'movitz::code-vector) 0 :code-vector)
+    code-vector))
 
 (defun funobj-code-vector%1op (funobj)
   "This slot is not a lisp value, it is a direct address to code entry point. In practice it is either
@@ -274,16 +273,18 @@
     "Index ~D out of range, ~S has ~D constants." index funobj (funobj-num-constants funobj))
   (if (>= index (funobj-num-jumpers funobj))
       (memref funobj #.(bt:slot-offset 'movitz:movitz-funobj 'movitz:constant0) index :lisp)
-    (without-gc
-     (with-inline-assembly (:returns :eax)
-       (:compile-two-forms (:eax :untagged-fixnum-ecx) funobj index)
-       (:movl (:eax #.(bt:slot-offset 'movitz:movitz-funobj 'movitz:code-vector))
-	      :ebx)
-       (:negl :ebx)
-       (:addl ((:ecx 4) :eax #.(bt:slot-offset 'movitz:movitz-funobj 'movitz:constant0))
-	      :ebx)
-       (:leal ((:ebx #.movitz:+movitz-fixnum-factor+)) :eax)
-       (:xorl :ebx :ebx)))))
+    ;; For a jumper, return its offset relative to the code-vector.
+    ;; This is tricky wrt. to potential GC interrupts, because we're doing
+    ;; pointer arithmetics.
+    (with-inline-assembly (:returns :eax)
+      (:compile-two-forms (:eax :ecx) funobj index)
+      (:movl #.movitz:+code-vector-transient-word+ :ebx)
+      (:addl (:eax #.(bt:slot-offset 'movitz:movitz-funobj 'movitz:code-vector))
+	     :ebx)			; code-vector (word) into ebx
+      (:subl (:eax :ecx #.(bt:slot-offset 'movitz:movitz-funobj 'movitz:constant0))
+	     :ebx)
+      (:negl :ebx)
+      (:leal ((:ebx #.movitz:+movitz-fixnum-factor+)) :eax))))
 
 (defun (setf funobj-constant-ref) (value funobj index)
   (check-type funobj compiled-function)
@@ -297,10 +298,10 @@
       (assert (below value (length (funobj-code-vector funobj))) (value)
 	"The jumper value ~D is invalid because the code-vector's size is ~D."
 	value (length (funobj-code-vector funobj)))
-      (without-gc
+      (progn ;; without-gc
        (with-inline-assembly (:returns :nothing)
-	 (:compile-two-forms (:eax :untagged-fixnum-ecx) funobj index)
-	 (:leal ((:ecx 4) :eax #.(bt:slot-offset 'movitz:movitz-funobj 'movitz:constant0))
+	 (:compile-two-forms (:eax :ecx) funobj index)
+	 (:leal (:ecx :eax #.(bt:slot-offset 'movitz:movitz-funobj 'movitz:constant0))
 		:ebx)			; dest. address into ebx.
 	 (:compile-form (:result-mode :untagged-fixnum-ecx) value)
 	 (:addl (:eax #.(bt:slot-offset 'movitz:movitz-funobj 'movitz:code-vector))





More information about the Movitz-cvs mailing list