X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fx86-64%2Fsupport.lisp;h=c56bf7657edb8b1b15543fd8ee459067dd95aa61;hb=ded09c061bb9cb4f6829c532c1c6f09637a46477;hp=8f5e2390a00e4f8f908910f599d04c8df0538c66;hpb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;p=sbcl.git diff --git a/src/assembly/x86-64/support.lisp b/src/assembly/x86-64/support.lisp index 8f5e239..c56bf76 100644 --- a/src/assembly/x86-64/support.lisp +++ b/src/assembly/x86-64/support.lisp @@ -9,38 +9,35 @@ (in-package "SB!VM") -(!def-vm-support-routine generate-call-sequence (name style vop) +(defun generate-call-sequence (name style vop) (ecase style (:raw (values - `((inst lea r13-tn + `((inst lea temp-reg-tn (make-ea :qword :disp (make-fixup ',name :assembly-routine))) - (inst call r13-tn)) + (inst call temp-reg-tn)) nil)) (:full-call (values `((note-this-location ,vop :call-site) - (inst lea r13-tn + (inst lea temp-reg-tn (make-ea :qword :disp (make-fixup ',name :assembly-routine))) - (inst call r13-tn) + (inst call temp-reg-tn) (note-this-location ,vop :single-value-return) - (move rsp-tn rbx-tn)) + (inst cmov :c rsp-tn rbx-tn)) '((:save-p :compute-only)))) (:none (values - `((inst lea r13-tn + `((inst lea temp-reg-tn (make-ea :qword :disp (make-fixup ',name :assembly-routine))) - (inst jmp r13-tn)) + (inst jmp temp-reg-tn)) nil)))) -(!def-vm-support-routine generate-return-sequence (style) +(defun generate-return-sequence (style) (ecase style (:raw `(inst ret)) (:full-call - `( - (inst pop rax-tn) - - (inst add rax-tn 3) - (inst jmp rax-tn))) + `((inst clc) + (inst ret))) (:none)))