X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86-64%2Fcall.lisp;h=6676cc47a1308333aa44c7a7cd7c07866b3d795e;hb=0c8643845555805048f50c783e118762e2c43a26;hp=4242c9968108ef1fd1b3c2e5f415502203a13b58;hpb=508d38dc908e6d9f951d539874bf87bd85f8c902;p=sbcl.git diff --git a/src/compiler/x86-64/call.lisp b/src/compiler/x86-64/call.lisp index 4242c99..6676cc4 100644 --- a/src/compiler/x86-64/call.lisp +++ b/src/compiler/x86-64/call.lisp @@ -356,7 +356,8 @@ ;; Restore EDI, and reset the stack. (emit-label restore-edi) (loadw rdi-tn rbx-tn (- (1+ 1))) - (inst mov rsp-tn rbx-tn)))) + (inst mov rsp-tn rbx-tn) + (inst cld)))) (values)) ;;;; unknown values receiving @@ -1270,9 +1271,6 @@ (inst mov value (make-ea :qword :base object :index value)))) ;;; Turn more arg (context, count) into a list. -(defoptimizer (%listify-rest-args stack-allocate-result) ((&rest args)) - t) - (define-vop (listify-rest-args) (:translate %listify-rest-args) (:policy :safe) @@ -1297,8 +1295,7 @@ (inst jrcxz done) (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)) + (allocation dst dst node stack-allocate-p list-pointer-lowtag) (inst shr rcx (1- n-lowtag-bits)) ;; Set decrement mode (successive args at lower addresses) (inst std) @@ -1320,7 +1317,8 @@ (inst sub rcx 1) (inst jmp :nz loop) ;; NIL out the last cons. - (storew nil-value dst 1 list-pointer-lowtag)) + (storew nil-value dst 1 list-pointer-lowtag) + (inst cld)) (emit-label done)))) ;;; Return the location and size of the &MORE arg glob created by @@ -1364,7 +1362,7 @@ (:save-p :compute-only) (:generator 3 (let ((err-lab - (generate-error-code vop invalid-arg-count-error nargs))) + (generate-error-code vop 'invalid-arg-count-error nargs))) (if (zerop count) (inst test nargs nargs) ; smaller instruction (inst cmp nargs (fixnumize count))) @@ -1382,7 +1380,7 @@ (:vop-var vop) (:save-p :compute-only) (:generator 1000 - (error-call vop ,error ,@args))))) + (error-call vop ',error ,@args))))) (def arg-count-error invalid-arg-count-error sb!c::%arg-count-error nargs) (def type-check-error object-not-type-error sb!c::%type-check-error