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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Fri May 21 09:41:39 UTC 2004


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

Modified Files:
	defstruct.lisp 
Log Message:
The layout of heap objects has been changed such that the type-code is
now the "first" byte in the object.

Date: Fri May 21 05:41:39 2004
Author: ffjeld

Index: movitz/losp/muerte/defstruct.lisp
diff -u movitz/losp/muerte/defstruct.lisp:1.7 movitz/losp/muerte/defstruct.lisp:1.8
--- movitz/losp/muerte/defstruct.lisp:1.7	Mon Apr 19 18:38:16 2004
+++ movitz/losp/muerte/defstruct.lisp	Fri May 21 05:41:39 2004
@@ -9,7 +9,7 @@
 ;;;; Created at:    Mon Jan 22 13:10:59 2001
 ;;;; Distribution:  See the accompanying file COPYING.
 ;;;;                
-;;;; $Id: defstruct.lisp,v 1.7 2004/04/19 22:38:16 ffjeld Exp $
+;;;; $Id: defstruct.lisp,v 1.8 2004/05/21 09:41:39 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -44,52 +44,54 @@
     (:leal (:eax #.(cl:- (movitz:tag :other))) :ecx)
     (:testb 7 :cl)
     (:jnz 'fail)
-    (:cmpb #.(movitz:tag :defstruct) (-2 :eax))
+    (:cmpb #.(movitz:tag :defstruct) (:eax #.movitz:+other-type-offset+))
     (:jne 'fail)
     (:load-constant struct-name :ebx)
     (:cmpl :ebx (:eax #.(bt:slot-offset 'movitz::movitz-struct 'movitz::name)))
     fail))
 
 (defun structure-ref (object slot-number)
-  (macrolet ((do-it ()
-	       `(with-inline-assembly (:returns :eax)
-		  ;; type test
-		  (:compile-form (:result-mode :eax) object)
-		  (:leal (:eax ,(- (movitz:tag :other))) :ecx)
-		  (:testb 7 :cl)
-		  (:jne '(:sub-program (type-error) (:int 66)))
-		  (:cmpb ,(movitz:tag :defstruct) (-2 :eax))
-		  (:jne '(:sub-program (type-error) (:int 66)))
-		  ;; type test passed, read slot
-		  ,@(if (= 4 movitz::+movitz-fixnum-factor+)
-			`((:compile-form  (:result-mode :ebx) slot-number)
-			  (:movl (:eax :ebx #.(bt:slot-offset 'movitz::movitz-struct 'movitz::slot0))
-				 :eax))
-		      `((:compile-form  (:result-mode :untagged-fixnum-ecx) slot-number)
-			(:movl (:eax (:ecx 4) #.(bt:slot-offset 'movitz::movitz-struct 'movitz::slot0))
-			       :eax))))))
+  (macrolet
+      ((do-it ()
+	 `(with-inline-assembly (:returns :eax)
+	    ;; type test
+	    (:compile-form (:result-mode :eax) object)
+	    (:leal (:eax ,(- (movitz:tag :other))) :ecx)
+	    (:testb 7 :cl)
+	    (:jne '(:sub-program (type-error) (:int 66)))
+	    (:cmpb ,(movitz:tag :defstruct) (:eax ,movitz:+other-type-offset+))
+	    (:jne '(:sub-program (type-error) (:int 66)))
+	    ;; type test passed, read slot
+	    ,@(if (= 4 movitz::+movitz-fixnum-factor+)
+		  `((:compile-form  (:result-mode :ebx) slot-number)
+		    (:movl (:eax :ebx #.(bt:slot-offset 'movitz::movitz-struct 'movitz::slot0))
+			   :eax))
+		`((:compile-form  (:result-mode :untagged-fixnum-ecx) slot-number)
+		  (:movl (:eax (:ecx 4) #.(bt:slot-offset 'movitz::movitz-struct 'movitz::slot0))
+			 :eax))))))
     (do-it)))
 
 (defun (setf structure-ref) (value object slot-number)
-  (macrolet ((do-it ()
-	       (assert (= 4 movitz::+movitz-fixnum-factor+))
-	       `(with-inline-assembly (:returns :eax)
-		  ;; type test
-		  (:compile-two-forms (:eax :ebx) object slot-number)
-		  (:leal (:eax ,(- (movitz:tag :other))) :ecx)
-		  (:testb 7 :cl)
-		  (:jne '(:sub-program (type-error) (:int 66)))
-		  (:cmpb ,(movitz:tag :defstruct) (-2 :eax))
-		  (:jne '(:sub-program (type-error) (:int 66)))
-		  (:movzxw (:eax ,(bt:slot-offset 'movitz::movitz-struct 'movitz::length)) :ecx)
-		  (:leal ((:ecx ,movitz::+movitz-fixnum-factor+)) :ecx)
-		  (:testb ,movitz::+movitz-fixnum-zmask+ :bl)
-		  (:jnz '(:sub-program (not-fixnum) (:int 107)))
-		  (:cmpl :ecx :ebx)
-		  (:jae '(:sub-program (out-of-range) (:int 61)))
-		  ;; type test passed, read slot
-		  (:compile-form (:result-mode :ecx) value)
-		  (:movl :ecx (:eax :ebx #.(bt:slot-offset 'movitz::movitz-struct 'movitz::slot0))))))
+  (macrolet
+      ((do-it ()
+	 (assert (= 4 movitz::+movitz-fixnum-factor+))
+	 `(with-inline-assembly (:returns :eax)
+	    ;; type test
+	    (:compile-two-forms (:eax :ebx) object slot-number)
+	    (:leal (:eax ,(- (movitz:tag :other))) :ecx)
+	    (:testb 7 :cl)
+	    (:jne '(:sub-program (type-error) (:int 66)))
+	    (:cmpb ,(movitz:tag :defstruct) (:eax ,movitz:+other-type-offset+))
+	    (:jne '(:sub-program (type-error) (:int 66)))
+	    (:movzxw (:eax ,(bt:slot-offset 'movitz::movitz-struct 'movitz::length)) :ecx)
+	    (:leal ((:ecx ,movitz::+movitz-fixnum-factor+)) :ecx)
+	    (:testb ,movitz::+movitz-fixnum-zmask+ :bl)
+	    (:jnz '(:sub-program (not-fixnum) (:int 107)))
+	    (:cmpl :ecx :ebx)
+	    (:jae '(:sub-program (out-of-range) (:int 61)))
+	    ;; type test passed, read slot
+	    (:compile-form (:result-mode :ecx) value)
+	    (:movl :ecx (:eax :ebx #.(bt:slot-offset 'movitz::movitz-struct 'movitz::slot0))))))
     (do-it)))
 
 (defun struct-accessor-prototype (object)
@@ -100,7 +102,7 @@
     (:leal (:eax #.(cl:- (movitz:tag :other))) :ecx)
     (:testb 7 :cl)
     (:jne '(:sub-program (type-error) (:int 66)))
-    (:cmpb #.(movitz:tag :defstruct) (-2 :eax))
+    (:cmpb #.(movitz:tag :defstruct) (:eax #.movitz:+other-type-offset+))
     (:jne '(:sub-program (type-error) (:int 66)))
     (:load-constant struct-name :ebx)
     (:cmpl :ebx (:eax #.(bt:slot-offset 'movitz::movitz-struct 'movitz::name)))
@@ -119,7 +121,7 @@
     (:leal (:ebx #.(cl:- (movitz:tag :other))) :ecx)
     (:testb 7 :cl)
     (:jnz '(:sub-program (type-error) (:int 66)))
-    (:cmpb #.(movitz:tag :defstruct) (-2 :ebx))
+    (:cmpb #.(movitz:tag :defstruct) (:ebx #.movitz:+other-type-offset+))
     (:jne '(:sub-program (type-error) (:int 66)))
     (:load-constant struct-name :ecx)
     (:cmpl :ecx (:ebx #.(bt:slot-offset 'movitz::movitz-struct 'movitz::name)))





More information about the Movitz-cvs mailing list