X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fx86-64%2Fcall.lisp;h=bd61005774d0d4786fea11a4bf66216e8a49da94;hb=edf8d3701ba59bd9f0c1bd027f3179b98250cfd0;hp=da925b36c1ad66fc2dd45218fd45467c80e31482;hpb=462b946eaf95cdba2648a67ad2bc3b06b7c7a4f2;p=sbcl.git diff --git a/src/compiler/x86-64/call.lisp b/src/compiler/x86-64/call.lisp index da925b3..bd61005 100644 --- a/src/compiler/x86-64/call.lisp +++ b/src/compiler/x86-64/call.lisp @@ -285,8 +285,7 @@ (count-okay (gen-label))) (note-this-location vop :unknown-return) ;; Branch off to the MV case. - (inst nop) - (inst jmp-short regs-defaulted) + (inst jmp :c regs-defaulted) ;; Default the register args, and set up the stack as if we ;; entered the MV return point. @@ -797,7 +796,7 @@ do (noise `(loadw ,name new-fp ,index))) (noise)) '((if (zerop nargs) - (inst xor rcx rcx) + (zeroize rcx) (inst mov rcx (fixnumize nargs))))) ,@(cond ((eq return :tail) '(;; Python has figured out what frame we should @@ -1032,7 +1031,7 @@ ;; Establish the values pointer and values count. (move rbx rbp-tn) (if (zerop nvals) - (inst xor rcx rcx) ; smaller + (zeroize rcx) ; smaller (inst mov rcx (fixnumize nvals))) ;; Restore the frame pointer. (move rbp-tn old-fp) @@ -1194,7 +1193,7 @@ ;; We need to copy from downwards up to avoid overwriting some of ;; the yet uncopied args. So we need to use R9 as the copy index ;; and RCX as the loop counter, rather than using RCX for both. - (inst xor copy-index copy-index) + (zeroize copy-index) ;; We used to use REP MOVS here, but on modern x86 it performs ;; much worse than an explicit loop for small blocks. @@ -1296,7 +1295,7 @@ ;; Check to see whether there are no args, and just return NIL if so. (inst mov result nil-value) (inst jecxz done) - (inst lea dst (make-ea :qword :index rcx :scale 2)) + (inst lea dst (make-ea :qword :base rcx :index rcx)) (maybe-pseudo-atomic stack-allocate-p (allocation dst dst node stack-allocate-p) (inst lea dst (make-ea :byte :base dst :disp list-pointer-lowtag))