diff --git a/compiler/x86/arith.lisp b/compiler/x86/arith.lisp index e5eceebba57fea58c8f03af1fabb52a6ee6d07a2..04a3ffd0b8616236c6efa9ee31bfa9dcc7720297 100644 --- a/compiler/x86/arith.lisp +++ b/compiler/x86/arith.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/arith.lisp,v 1.15 2003/08/03 11:27:45 gerd Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/arith.lisp,v 1.16 2003/09/11 11:39:07 gerd Exp $") ;;; ;;; ********************************************************************** ;;; @@ -321,14 +321,16 @@ (:result-types unsigned-num) (:note "inline (unsigned-byte 32) arithmetic") (:generator 4 - (cond ((and (sc-is x unsigned-reg) (sc-is r unsigned-reg) - (not (location= x r))) + (cond ((and (sc-is x unsigned-reg) + (sc-is r unsigned-reg) + (not (location= x r)) + (valid-displacement-p y)) (inst lea r (make-ea :dword :base x :disp y))) (t (move r x) (if (= y 1) (inst inc r) - (inst add r y)))))) + (inst add r y)))))) ;;;; Special logand cases: (logand signed unsigned) => unsigned diff --git a/compiler/x86/insts.lisp b/compiler/x86/insts.lisp index 2fd6170349013804a0396d0b55fec1a8ed5c99bc..dda179ee8ce9a69cecc50768ebfc9bfa932297a4 100644 --- a/compiler/x86/insts.lisp +++ b/compiler/x86/insts.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/insts.lisp,v 1.30 2003/04/26 12:53:24 toy Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/insts.lisp,v 1.31 2003/09/11 11:39:07 gerd Exp $") ;;; ;;; ********************************************************************** ;;; @@ -89,6 +89,9 @@ (scale 1 :type (member 1 2 4 8)) (disp 0 :type (or (signed-byte 32) fixup))) +(defun valid-displacement-p (x) + (typep x '(or (signed-byte 32) fixup))) + (defun %print-ea (ea stream depth) (declare (ignore depth)) (cond ((or *print-escape* *print-readably*)