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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Thu Jun 9 22:19:11 UTC 2005


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

Modified Files:
	typep.lisp 
Log Message:
Starting to support adjustable and displaced vectors.

Date: Fri Jun 10 00:19:10 2005
Author: ffjeld

Index: movitz/losp/muerte/typep.lisp
diff -u movitz/losp/muerte/typep.lisp:1.44 movitz/losp/muerte/typep.lisp:1.45
--- movitz/losp/muerte/typep.lisp:1.44	Tue May 24 08:33:46 2005
+++ movitz/losp/muerte/typep.lisp	Fri Jun 10 00:19:10 2005
@@ -9,7 +9,7 @@
 ;;;; Created at:    Fri Dec  8 11:07:53 2000
 ;;;; Distribution:  See the accompanying file COPYING.
 ;;;;                
-;;;; $Id: typep.lisp,v 1.44 2005/05/24 06:33:46 ffjeld Exp $
+;;;; $Id: typep.lisp,v 1.45 2005/06/09 22:19:10 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -127,6 +127,50 @@
 		  (:jnz 'vector-typep-failed)
 		  (:cmpw ,type-code (:eax ,movitz:+other-type-offset+))
 		 vector-typep-failed))))
+	 (make-vector-typep (element-type)
+	   (assert (= 1 (- (bt:slot-offset 'movitz::movitz-basic-vector 'movitz::element-type)
+			   (bt:slot-offset 'movitz::movitz-basic-vector 'movitz::type))))
+	   (let ((basic-type-code
+		  (dpb (bt:enum-value 'movitz::movitz-vector-element-type element-type)
+		       (byte 8 8)
+		       (movitz:tag :basic-vector)))
+		 (indirect-type-code
+		  (logior (ash (movitz:tag :basic-vector) 0)
+			  (ash (bt:enum-value 'movitz::movitz-vector-element-type :indirects) 8)
+			  (ash (bt:enum-value 'movitz::movitz-vector-element-type element-type) 24))))
+	     `(with-inline-assembly-case ()
+		(do-case (:boolean-branch-on-false :same :labels (vector-typep-no-branch))
+		  (:compile-form (:result-mode :eax) ,object)
+		  (:leal (:eax ,(- (movitz::tag :other))) :ecx)
+		  (:testb 7 :cl)
+		  (:branch-when :boolean-zf=0)
+		  (:movl (:eax ,movitz:+other-type-offset+) :ecx)
+		  (:cmpw ,basic-type-code :cx)
+		  (:je 'vector-typep-no-branch)
+		  (:cmpl ,indirect-type-code :ecx)
+		  (:branch-when :boolean-zf=0)
+		 vector-typep-no-branch)
+		(do-case (:boolean-branch-on-true :same :labels (vector-typep-failed))
+		  (:compile-form (:result-mode :eax) ,object)
+		  (:leal (:eax ,(- (movitz::tag :other))) :ecx)
+		  (:testb 7 :cl)
+		  (:jnz 'vector-typep-failed)
+		  (:movl (:eax ,movitz:+other-type-offset+) :ecx)
+		  (:cmpw ,basic-type-code :cx)
+		  (:branch-when :boolean-zf=1)
+		  (:cmpl ,indirect-type-code :ecx)
+		  (:branch-when :boolean-zf=1)
+		 vector-typep-failed)
+		(do-case (t :boolean-zf=1 :labels (vector-typep-done))
+		  (:compile-form (:result-mode :eax) ,object)
+		  (:leal (:eax ,(- (movitz::tag :other))) :ecx)
+		  (:testb 7 :cl)
+		  (:jnz 'vector-typep-done)
+		  (:movl (:eax ,movitz:+other-type-offset+) :ecx)
+		  (:cmpw ,basic-type-code :cx)
+		  (:je 'vector-typep-done)
+		  (:cmpl ,indirect-type-code :ecx)
+		 vector-typep-done))))
 	 (make-function-typep (funobj-type)
 	   (assert (= 1 (- (bt:slot-offset 'movitz::movitz-funobj 'movitz::funobj-type)
 			   (bt:slot-offset 'movitz::movitz-funobj 'movitz::type))))
@@ -242,23 +286,20 @@
 		    (:cmpb ,(movitz:tag :character) :al)))
 		((function compiled-function)
 		 (make-other-typep :funobj))
-		((basic-vector)
-		 (break "Basic-vector typep?")
-		 (make-other-typep :basic-vector))
-		((vector simple-array array)
+		((vector)
 		 (make-other-typep :basic-vector))
+		(indirect-vector
+		 (make-basic-vector-typep :indirects))
 		(simple-vector
 		 (make-basic-vector-typep :any-t))
-		((string simple-string)
+		(simple-string
 		 (make-basic-vector-typep :character))
-		((bit-vector simple-bit-vector)
+		(string
+		 (make-vector-typep :character))
+		(simple-bit-vector
 		 (make-basic-vector-typep :bit))
-		(vector-u8
-		 (make-basic-vector-typep :u8))
-		(vector-u16
-		 (make-basic-vector-typep :u16))
-		(vector-u32
-		 (make-basic-vector-typep :u32))
+		(bit-vector
+		 (make-vector-typep :bit))
 		(code-vector
 		 (make-basic-vector-typep :code))
 		(unbound-value




More information about the Movitz-cvs mailing list