From: Alexey Dejneka Date: Thu, 15 Apr 2004 17:47:13 +0000 (+0000) Subject: 0.8.9.47: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=ba2143e06b11101674720393e6f6c30a23113a4b;p=sbcl.git 0.8.9.47: * Merged patch by Lutz Euler for the bug 245a. --- diff --git a/BUGS b/BUGS index 6f793ac..5dd6895 100644 --- a/BUGS +++ b/BUGS @@ -882,7 +882,6 @@ WORKAROUND: ; The variable Y is defined but never used. 245: bugs in disassembler - a. On X86 an immediate operand for IMUL is printed incorrectly. b. On X86 operand size prefix is not recognized. 251: diff --git a/src/compiler/disassem.lisp b/src/compiler/disassem.lisp index 785c81f..5332dea 100644 --- a/src/compiler/disassem.lisp +++ b/src/compiler/disassem.lisp @@ -347,6 +347,7 @@ (let* ((old-arg (car this-arg-temps)) (new-arg (find (arg-name old-arg) args :key #'arg-name))) (and new-arg + (= (arg-position old-arg) (arg-position new-arg)) (every (lambda (this-kind-temps) (funcall (find-arg-form-checker (car this-kind-temps)) diff --git a/src/compiler/x86/insts.lisp b/src/compiler/x86/insts.lisp index 29cb698..ebfa2b8 100644 --- a/src/compiler/x86/insts.lisp +++ b/src/compiler/x86/insts.lisp @@ -264,6 +264,14 @@ +default-operand-size+))) (sb!disassem:read-suffix (width-bits width) dstate)))) +(sb!disassem:define-arg-type signed-imm-word + :prefilter (lambda (value dstate) + (declare (ignore value)) ; always nil anyway + (let ((width + (or (sb!disassem:dstate-get-prop dstate 'word-width) + +default-operand-size+))) + (sb!disassem:read-signed-suffix (width-bits width) dstate)))) + ;;; needed for the ret imm16 instruction (sb!disassem:define-arg-type imm-word-16 :prefilter (lambda (value dstate) @@ -1272,7 +1280,8 @@ (define-instruction imul (segment dst &optional src1 src2) (:printer accum-reg/mem ((op '(#b1111011 #b101)))) (:printer ext-reg-reg/mem ((op #b1010111))) - (:printer reg-reg/mem ((op #b0110100) (width 1) (imm nil :type 'imm-word)) + (:printer reg-reg/mem ((op #b0110100) (width 1) + (imm nil :type 'signed-imm-word)) '(:name :tab reg ", " reg/mem ", " imm)) (:printer reg-reg/mem ((op #b0110101) (width 1) (imm nil :type 'signed-imm-byte)) diff --git a/version.lisp-expr b/version.lisp-expr index 365812f..e18de08 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.8.9.46" +"0.8.9.47"