X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fx86-64%2Fmacros.lisp;h=781a270d1bcf1acff64802186813a6ad21810350;hb=b83353d9f998e5c0e34604b5593df70c66d2c510;hp=e77d9c186073c94da5d4acd21efc6e5f9a516767;hpb=b22eea4bad3a458034301e1643eecc60c1b6f9a2;p=sbcl.git diff --git a/src/compiler/x86-64/macros.lisp b/src/compiler/x86-64/macros.lisp index e77d9c1..781a270 100644 --- a/src/compiler/x86-64/macros.lisp +++ b/src/compiler/x86-64/macros.lisp @@ -28,6 +28,14 @@ ((double-reg complex-double-reg) (aver (xmm-register-p src)) (inst movapd dst src)) + #!+sb-simd-pack + ((int-sse-reg sse-reg) + (aver (xmm-register-p src)) + (inst movdqa dst src)) + #!+sb-simd-pack + ((single-sse-reg double-sse-reg) + (aver (xmm-register-p src)) + (inst movaps dst src)) (t (inst mov dst src))))) @@ -53,6 +61,14 @@ (defmacro popw (ptr &optional (slot 0) (lowtag 0)) `(inst pop (make-ea-for-object-slot ,ptr ,slot ,lowtag))) + +(defun call-indirect (offset) + (typecase offset + ((signed-byte 32) + (inst call (make-ea :qword :disp offset))) + (t + (inst mov temp-reg-tn offset) + (inst call (make-ea :qword :base temp-reg-tn))))) ;;;; macros to generate useful values @@ -152,9 +168,8 @@ ;;; object. (defun allocation-tramp (alloc-tn size lowtag) (inst push size) - (inst lea temp-reg-tn (make-ea :qword - :disp (make-fixup "alloc_tramp" :foreign))) - (inst call temp-reg-tn) + (inst mov alloc-tn (make-fixup "alloc_tramp" :foreign)) + (inst call alloc-tn) (inst pop alloc-tn) (when lowtag (inst lea alloc-tn (make-ea :byte :base alloc-tn :disp lowtag)))