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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Thu Jun 10 19:26:33 UTC 2004


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

Modified Files:
	functions.lisp 
Log Message:
(setf funobj-constant-ref) had a nasty bug wrt. jumpers: The jumper
would be off-by-2, causing very 'interesting' effects.

Date: Thu Jun 10 12:26:33 2004
Author: ffjeld

Index: movitz/losp/muerte/functions.lisp
diff -u movitz/losp/muerte/functions.lisp:1.12 movitz/losp/muerte/functions.lisp:1.13
--- movitz/losp/muerte/functions.lisp:1.12	Thu Jun 10 05:09:15 2004
+++ movitz/losp/muerte/functions.lisp	Thu Jun 10 12:26:33 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.12 2004/06/10 12:09:15 ffjeld Exp $
+;;;; $Id: functions.lisp,v 1.13 2004/06/10 19:26:33 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -312,16 +312,16 @@
       (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)))
-      (progn ;; without-gc
+      (progn ;; XXX without-gc
        (with-inline-assembly (:returns :nothing)
-	 (: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)
+	 (:compile-two-forms (:eax :edx) funobj index)
+	 (:compile-form (:result-mode :ecx) value)
+	 (:movl #.movitz:+code-vector-transient-word+ :ebx)
 	 (:addl (:eax #.(bt:slot-offset 'movitz:movitz-funobj 'movitz:code-vector))
-		:ecx)
-	 (:movl :ecx (:ebx))
-	 (:xorl :ebx :ebx)))
+		:ebx)			; code-vector (word) into ebx
+	 (:shrl #.movitz:+movitz-fixnum-shift+ :ecx) ; value
+	 (:movl :ecx (:eax :edx #.(bt:slot-offset 'movitz:movitz-funobj 'movitz::constant0)))
+	 (:addl :ebx (:eax :edx #.(bt:slot-offset 'movitz:movitz-funobj 'movitz::constant0)))))
       value)))
 
 (defun funobj-debug-info (funobj)





More information about the Movitz-cvs mailing list