X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fx86-64%2Fassem-rtns.lisp;h=dea6cbb3f02feba64365ef0f7d265817f2af8105;hb=ed891a4fd882d1b9fe066ab14bcf2107aea95baa;hp=bd708897ff279b329da9c151791a251528d7a1ce;hpb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;p=sbcl.git diff --git a/src/assembly/x86-64/assem-rtns.lisp b/src/assembly/x86-64/assem-rtns.lisp index bd70889..dea6cbb 100644 --- a/src/assembly/x86-64/assem-rtns.lisp +++ b/src/assembly/x86-64/assem-rtns.lisp @@ -31,7 +31,7 @@ (:temp edi unsigned-reg rdi-offset)) ;; Pick off the cases where everything fits in register args. - (inst jecxz ZERO-VALUES) + (inst jrcxz ZERO-VALUES) (inst cmp ecx (fixnumize 1)) (inst jmp :e ONE-VALUE) (inst cmp ecx (fixnumize 2)) @@ -54,6 +54,7 @@ (inst lea edi (make-ea :qword :base ebx :disp (- n-word-bytes))) (inst rep) (inst movs :qword) + (inst cld) ;; Restore the count. (inst mov ecx edx) @@ -67,6 +68,7 @@ (loadw esi ebx -3) ;; And back we go. + (inst stc) (inst jmp eax) ;; Handle the register arg cases. @@ -75,13 +77,14 @@ (inst mov edx nil-value) (inst mov edi edx) (inst mov esi edx) + (inst stc) (inst jmp eax) ONE-VALUE ; Note: we can get this, because the return-multiple vop ; doesn't check for this case when size > speed. (loadw edx esi -1) (inst mov rsp-tn ebx) - (inst add eax 3) + (inst clc) (inst jmp eax) TWO-VALUES @@ -89,6 +92,7 @@ (loadw edi esi -2) (inst mov esi nil-value) (inst lea rsp-tn (make-ea :qword :base ebx :disp (* -2 n-word-bytes))) + (inst stc) (inst jmp eax) THREE-VALUES @@ -96,6 +100,7 @@ (loadw edi esi -2) (loadw esi esi -3) (inst lea rsp-tn (make-ea :qword :base ebx :disp (* -3 n-word-bytes))) + (inst stc) (inst jmp eax)) ;;;; TAIL-CALL-VARIABLE @@ -126,7 +131,7 @@ (move ecx esi) (inst sub ecx rsp-tn) - ;; Check for all the args fitting the the registers. + ;; Check for all the args fitting the registers. (inst cmp ecx (fixnumize 3)) (inst jmp :le REGISTER-ARGS) @@ -146,6 +151,7 @@ (inst sub esi (fixnumize 1)) (inst rep) (inst movs :qword) + (inst cld) ;; Load the register arguments carefully. (loadw edx rbp-tn -1) @@ -165,10 +171,10 @@ (inst push ebx) ;; And jump into the function. - (inst jmp - (make-ea :byte :base eax - :disp (- (* closure-fun-slot n-word-bytes) - fun-pointer-lowtag))) + (inst jmp + (make-ea :byte :base eax + :disp (- (* closure-fun-slot n-word-bytes) + fun-pointer-lowtag))) ;; All the arguments fit in registers, so load them. REGISTER-ARGS @@ -201,7 +207,7 @@ LOOP - (let ((error (generate-error-code nil unseen-throw-tag-error target))) + (let ((error (generate-error-code nil 'unseen-throw-tag-error target))) (inst or catch catch) ; check for NULL pointer (inst jmp :z error)) @@ -228,7 +234,7 @@ (:temp uwp unsigned-reg rsi-offset)) (declare (ignore start count)) - (let ((error (generate-error-code nil invalid-unwind-error))) + (let ((error (generate-error-code nil 'invalid-unwind-error))) (inst or block block) ; check for NULL pointer (inst jmp :z error))