1.0.37.69: Avoid emitting instructions (LODS, MOVSXD) that confuse others
authorPaul Khuong <pvk@pvk.ca>
Mon, 26 Apr 2010 21:51:11 +0000 (21:51 +0000)
committerPaul Khuong <pvk@pvk.ca>
Mon, 26 Apr 2010 21:51:11 +0000 (21:51 +0000)
 * 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.

NEWS
src/compiler/x86-64/call.lisp
src/compiler/x86-64/insts.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index 46ab8eb..0c99a05 100644 (file)
--- 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
index b57642a..24dde9d 100644 (file)
        (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)
index 78ee46b..fef01fe 100644 (file)
                                    (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)))))))))
 
index dbb4b45..8c91b92 100644 (file)
@@ -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"