(: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))
(loadw esi ebx -3)
;; And back we go.
+ (inst stc)
(inst jmp eax)
;; Handle the register arg cases.
(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
(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
(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))
\f
;;;; TAIL-CALL-VARIABLE
(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)