From: Paul Khuong Date: Mon, 26 Apr 2010 21:51:11 +0000 (+0000) Subject: 1.0.37.69: Avoid emitting instructions (LODS, MOVSXD) that confuse others X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=ca1c88c96f67da3dae46c5c92bc58c9f0784ccc7;p=sbcl.git 1.0.37.69: Avoid emitting instructions (LODS, MOVSXD) that confuse others * LODS is probably slow nowadays, and isn't supported by valgrind. Remove one use in calling VOPs. * Some disassemblers don't like useless (e.g. 32 bit to 32 bit) MOVSXD. Convert them to MOV. --- diff --git a/NEWS b/NEWS index 46ab8eb..0c99a05 100644 --- a/NEWS +++ b/NEWS @@ -45,6 +45,8 @@ changes relative to sbcl-1.0.37: x87's transcendentals (instead of returning 0). (lp#327192) * enhancement: eliminate some spurious TYPE-WARNINGs. Should help with some of CL-PPCRE's macros. (lp#570079) + * enhancement: our machine code is slightly less hostile to valgrind on + x86-64. * bug fix: correct restart text for the continuable error in MAKE-PACKAGE. * bug fix: a rare case of startup-time page table corruption. * bug fix: a semaphore with multiple waiters and some of them unwinding due diff --git a/src/compiler/x86-64/call.lisp b/src/compiler/x86-64/call.lisp index b57642a..24dde9d 100644 --- a/src/compiler/x86-64/call.lisp +++ b/src/compiler/x86-64/call.lisp @@ -1187,7 +1187,8 @@ (storew dst dst -1 list-pointer-lowtag) (emit-label enter) ;; Grab one value and stash it in the car of this cons. - (inst lods rax) + (inst mov rax (make-ea :qword :base src)) + (inst sub src n-word-bytes) (storew rax dst 0 list-pointer-lowtag) ;; Go back for more. (inst sub rcx n-word-bytes) diff --git a/src/compiler/x86-64/insts.lisp b/src/compiler/x86-64/insts.lisp index 78ee46b..fef01fe 100644 --- a/src/compiler/x86-64/insts.lisp +++ b/src/compiler/x86-64/insts.lisp @@ -1884,7 +1884,7 @@ (cond (ea-p (ea-base src)) ((tn-p src) src) (t nil))) - (emit-byte segment #x63) ;movsxd + (emit-byte segment (if signed-p #x63 #x8b)) ;movsxd or straight mov ;;(emit-byte segment opcode) (emit-ea segment src (reg-tn-encoding dst))))))))) diff --git a/version.lisp-expr b/version.lisp-expr index dbb4b45..8c91b92 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".) -"1.0.37.68" +"1.0.37.69"