From: Paul K. <pk...@us...> - 2010-04-26 21:51:21
|
Update of /cvsroot/sbcl/sbcl/src/compiler/x86-64 In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv31985/src/compiler/x86-64 Modified Files: call.lisp insts.lisp Log Message: 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. Index: call.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86-64/call.lisp,v retrieving revision 1.27 retrieving revision 1.28 diff -u -d -r1.27 -r1.28 --- call.lisp 21 Apr 2009 11:33:38 -0000 1.27 +++ call.lisp 26 Apr 2010 21:51:11 -0000 1.28 @@ -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) Index: insts.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86-64/insts.lisp,v retrieving revision 1.38 retrieving revision 1.39 diff -u -d -r1.38 -r1.39 --- insts.lisp 18 Mar 2010 11:17:02 -0000 1.38 +++ insts.lisp 26 Apr 2010 21:51:11 -0000 1.39 @@ -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))))))))) |