[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