Update of /project/movitz/cvsroot/movitz In directory common-lisp.net:/tmp/cvs-serv31293
Modified Files: compiler.lisp Log Message: Fixed bug in make-store-lexical that would produce bogus code when the source was a boolean expression.
Date: Fri Sep 2 00:52:59 2005 Author: ffjeld
Index: movitz/compiler.lisp diff -u movitz/compiler.lisp:1.162 movitz/compiler.lisp:1.163 --- movitz/compiler.lisp:1.162 Thu Sep 1 00:30:55 2005 +++ movitz/compiler.lisp Fri Sep 2 00:52:58 2005 @@ -8,7 +8,7 @@ ;;;; Created at: Wed Oct 25 12:30:49 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: compiler.lisp,v 1.162 2005/08/31 22:30:55 ffjeld Exp $ +;;;; $Id: compiler.lisp,v 1.163 2005/09/01 22:52:58 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------
@@ -3833,11 +3833,37 @@ (t `((:movl ,source :eax) (,*compiler-global-segment-prefix* :call (:edi ,(global-constant-offset 'unbox-u32)))))))))) + ((eq source :boolean-cf=1) + (let ((tmp (chose-free-register protect-registers))) + `((:sbbl :ecx :ecx) + (,*compiler-local-segment-prefix* + :movl (:edi (:ecx 4) ,(global-constant-offset 'not-not-nil)) ,tmp) + ,@(make-store-lexical binding tmp shared-reference-p funobj frame-map + :protect-registers protect-registers)))) + ((eq source :boolean-cf=0) + (let ((tmp (chose-free-register protect-registers))) + `((:sbbl :ecx :ecx) + (,*compiler-local-segment-prefix* + :movl (:edi (:ecx 4) ,(global-constant-offset 'boolean-zero)) ,tmp) + ,@(make-store-lexical binding tmp shared-reference-p funobj frame-map + :protect-registers protect-registers)))) + ((and *compiler-use-cmov-p* + (member source +boolean-modes+)) + (let ((tmp (chose-free-register protect-registers))) + (append `((:movl :edi ,tmp)) + (list (cons *compiler-local-segment-prefix* + (make-cmov-on-boolean source + `(:edi ,(global-constant-offset 't-symbol)) + tmp))) + (make-store-lexical binding tmp shared-reference-p funobj frame-map + :protect-registers protect-registers)))) ((member source +boolean-modes+) (let ((tmp (chose-free-register protect-registers)) (label (gensym "store-lexical-bool-"))) (append `((:movl :edi ,tmp)) - (list (make-branch-on-boolean source label)) + (list (make-branch-on-boolean source label :invert t)) + `((,*compiler-local-segment-prefix* + :movl (:edi ,(global-constant-offset 't-symbol)) ,tmp)) (list label) (make-store-lexical binding tmp shared-reference-p funobj frame-map :protect-registers protect-registers))))