X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86-64%2Ftarget-insts.lisp;h=916971a919d991c7253feb0250aa47bb9984e575;hb=9a97f246037c49025a2aaf56f544bbb03f6170c3;hp=5411762a26fd57173228ea5982ab85fd647e1a77;hpb=6e89948ce34d63b35eea687ca7cde0f2876c3062;p=sbcl.git diff --git a/src/compiler/x86-64/target-insts.lisp b/src/compiler/x86-64/target-insts.lisp index 5411762..916971a 100644 --- a/src/compiler/x86-64/target-insts.lisp +++ b/src/compiler/x86-64/target-insts.lisp @@ -24,58 +24,59 @@ ;;; :QWORD and a corresponding size indicator is printed first. (defun print-mem-access (value width stream dstate) (declare (type list value) - (type (member nil :byte :word :dword :qword) width) - (type stream stream) - (type sb!disassem:disassem-state dstate)) + (type (member nil :byte :word :dword :qword) width) + (type stream stream) + (type sb!disassem:disassem-state dstate)) (when width (princ width stream) (princ '| PTR | stream)) (write-char #\[ stream) (let ((firstp t) (rip-p nil)) (macrolet ((pel ((var val) &body body) - ;; Print an element of the address, maybe with - ;; a leading separator. - `(let ((,var ,val)) - (when ,var - (unless firstp - (write-char #\+ stream)) - ,@body - (setq firstp nil))))) + ;; Print an element of the address, maybe with + ;; a leading separator. + `(let ((,var ,val)) + (when ,var + (unless firstp + (write-char #\+ stream)) + ,@body + (setq firstp nil))))) (pel (base-reg (first value)) - (cond ((eql 'rip base-reg) - (setf rip-p t) - (princ base-reg stream)) - (t - (print-addr-reg base-reg stream dstate)))) + (cond ((eql 'rip base-reg) + (setf rip-p t) + (princ base-reg stream)) + (t + (print-addr-reg base-reg stream dstate)))) (pel (index-reg (third value)) - (print-addr-reg index-reg stream dstate) - (let ((index-scale (fourth value))) - (when (and index-scale (not (= index-scale 1))) - (write-char #\* stream) - (princ index-scale stream)))) + (print-addr-reg index-reg stream dstate) + (let ((index-scale (fourth value))) + (when (and index-scale (not (= index-scale 1))) + (write-char #\* stream) + (princ index-scale stream)))) (let ((offset (second value))) - (when (and offset (or firstp (not (zerop offset)))) - (unless (or firstp (minusp offset)) - (write-char #\+ stream)) - (cond - (rip-p - (princ offset stream) - (let ((addr (+ offset (sb!disassem:dstate-next-addr dstate)))) - (or (nth-value 1 - (sb!disassem::note-code-constant-absolute - addr dstate)) - (sb!disassem:maybe-note-assembler-routine addr - nil - dstate)))) - (firstp - (progn - (sb!disassem:princ16 offset stream) - (or (minusp offset) - (nth-value 1 - (sb!disassem::note-code-constant-absolute offset dstate)) - (sb!disassem:maybe-note-assembler-routine offset - nil - dstate)))) + (when (and offset (or firstp (not (zerop offset)))) + (unless (or firstp (minusp offset)) + (write-char #\+ stream)) + (cond + (rip-p + (princ offset stream) + (let ((addr (+ offset (sb!disassem:dstate-next-addr dstate)))) + (when (plusp addr) + (or (nth-value 1 + (sb!disassem::note-code-constant-absolute + addr dstate)) + (sb!disassem:maybe-note-assembler-routine addr + nil + dstate))))) + (firstp + (progn + (sb!disassem:princ16 offset stream) + (or (minusp offset) + (nth-value 1 + (sb!disassem::note-code-constant-absolute offset dstate)) + (sb!disassem:maybe-note-assembler-routine offset + nil + dstate)))) (t (princ offset stream))))))) (write-char #\] stream))