Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv19046
Modified Files:
memref.lisp
Log Message:
Completed (setf memref :code-vector).
Date: Wed Feb 2 08:47:34 2005
Author: ffjeld
Index: movitz/losp/muerte/memref.lisp
diff -u movitz/losp/muerte/memref.lisp:1.42 movitz/losp/muerte/memref.lisp:1.43
--- movitz/losp/muerte/memref.lisp:1.42 Tue Jan 25 14:51:36 2005
+++ movitz/losp/muerte/memref.lisp Wed Feb 2 08:47:34 2005
@@ -10,7 +10,7 @@
;;;; Author: Frode Vatvedt Fjeld <frodef(a)acm.org>
;;;; Created at: Tue Mar 6 21:25:49 2001
;;;;
-;;;; $Id: memref.lisp,v 1.42 2005/01/25 13:51:36 ffjeld Exp $
+;;;; $Id: memref.lisp,v 1.43 2005/02/02 07:47:34 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -774,11 +774,10 @@
(:ebx :ecx ,(movitz:movitz-eval offset env)))
(,prefixes
:addl :eax (:ebx :ecx ,(movitz:movitz-eval offset env)))))))
- (t (error "variable (setf memref) type :code-vector not implemented.")
- #+ignore
- (let ((value-var (gensym "memref-value-"))
+ (t (let ((value-var (gensym "memref-value-"))
(object-var (gensym "memref-object-")))
- `(let ((,value-var ,value) (,object-var ,object))
+ `(let ((,value-var ,value)
+ (,object-var ,object))
(with-inline-assembly (:returns :eax)
(:compile-two-forms (:untagged-fixnum-ecx :ebx) ,offset ,index)
(:load-lexical (:lexical-binding ,value-var) :eax)
@@ -786,7 +785,8 @@
`((:sarl ,(cl:- movitz::+movitz-fixnum-shift+ 2)) :ebx))
(:addl :ebx :ecx) ; index += offset
(:load-lexical (:lexical-binding ,object-var) :ebx)
- (:movl :eax (:ebx :ecx)))))))))
+ (:movl ,movitz:+code-vector-word-offset+ (:ebx :ecx))
+ (,prefixes :addl :eax (:ebx :ecx)))))))))
(t ;; (warn "Can't handle inline MEMREF: ~S" form)
form))))
@@ -812,7 +812,11 @@
(:lisp
(if localp
(setf (memref object offset :index index :localp t) value)
- (setf (memref object offset :index index :localp nil) value)))))
+ (setf (memref object offset :index index :localp nil) value)))
+ (:code-vector
+ (if localp
+ (setf (memref object offset :index index :localp t :type :code-vector) value)
+ (setf (memref object offset :index index :localp nil :type :code-vector) value)))))
(define-compiler-macro memref-int
(&whole form address &key (offset 0) (index 0) (type :unsigned-byte32) (physicalp t)