X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fx86-64%2Fsupport.lisp;h=62bc41feec88bd493d32ed6f8c9ddd5c2abb5a9a;hb=37b1ed8e9b6faa84832b8251998b5d0eb1f6b307;hp=e96ddbcb7d1d723142a557718142585de8548960;hpb=78fa16bf55be44cc16845be84d98023e83fb14bc;p=sbcl.git diff --git a/src/assembly/x86-64/support.lisp b/src/assembly/x86-64/support.lisp index e96ddbc..62bc41f 100644 --- a/src/assembly/x86-64/support.lisp +++ b/src/assembly/x86-64/support.lisp @@ -9,38 +9,31 @@ (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 - (make-ea :qword :disp (make-fixup ',name :assembly-routine))) - (inst call r13-tn)) + `((inst mov temp-reg-tn (make-fixup ',name :assembly-routine)) + (inst call temp-reg-tn)) nil)) (:full-call (values `((note-this-location ,vop :call-site) - (inst lea r13-tn - (make-ea :qword :disp (make-fixup ',name :assembly-routine))) - (inst call r13-tn) - (note-this-location ,vop :single-value-return) - (move rsp-tn rbx-tn)) + (inst mov temp-reg-tn (make-fixup ',name :assembly-routine)) + (inst call temp-reg-tn) + (note-this-location ,vop :single-value-return)) '((:save-p :compute-only)))) (:none (values - `((inst lea r13-tn - (make-ea :qword :disp (make-fixup ',name :assembly-routine))) - (inst jmp r13-tn)) + `((inst mov temp-reg-tn (make-fixup ',name :assembly-routine)) + (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)))