X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86-64%2Fc-call.lisp;h=2fa84d07f24a04a241ea206fbe48e9f9482a092f;hb=3fe0010d2777b41e01ea9b4a0f894cfa40f7df1b;hp=05235bacdb719598a767aedf1b74202f312bfde9;hpb=dcb7dbc4a93f413d7ce2cd0d05e13c2a7e785e79;p=sbcl.git diff --git a/src/compiler/x86-64/c-call.lisp b/src/compiler/x86-64/c-call.lisp index 05235ba..2fa84d0 100644 --- a/src/compiler/x86-64/c-call.lisp +++ b/src/compiler/x86-64/c-call.lisp @@ -210,8 +210,8 @@ (dpb x (byte 32 0) -1) (ldb (byte 32 0) x))) -(define-vop (foreign-symbol-address) - (:translate foreign-symbol-address) +(define-vop (foreign-symbol-sap) + (:translate foreign-symbol-sap) (:policy :fast-safe) (:args) (:arg-types (:constant simple-string)) @@ -219,11 +219,11 @@ (:results (res :scs (sap-reg))) (:result-types system-area-pointer) (:generator 2 - (inst lea res (make-fixup (extern-alien-name foreign-symbol) :foreign)))) + (inst lea res (make-fixup foreign-symbol :foreign)))) #!+linkage-table -(define-vop (foreign-symbol-dataref-address) - (:translate foreign-symbol-dataref-address) +(define-vop (foreign-symbol-dataref-sap) + (:translate foreign-symbol-dataref-sap) (:policy :fast-safe) (:args) (:arg-types (:constant simple-string)) @@ -231,15 +231,13 @@ (:results (res :scs (sap-reg))) (:result-types system-area-pointer) (:generator 2 - (inst mov res (make-fixup (extern-alien-name foreign-symbol) :foreign-dataref)))) + (inst mov res (make-fixup foreign-symbol :foreign-dataref)))) (define-vop (call-out) (:args (function :scs (sap-reg)) (args :more t)) (:results (results :more t)) (:temporary (:sc unsigned-reg :offset rax-offset :to :result) rax) - (:temporary (:sc unsigned-reg :offset rcx-offset - :from :eval :to :result) rcx) (:ignore results) (:vop-var vop) (:save-p t) @@ -255,11 +253,10 @@ ;; To give the debugger a clue. XX not really internal-error? (note-this-location vop :internal-error) ;; FLOAT15 needs to contain FP zero in Lispland - (inst xor rcx rcx) - (inst movd (make-random-tn :kind :normal + (let ((float15 (make-random-tn :kind :normal :sc (sc-or-lose 'double-reg) - :offset float15-offset) - rcx))) + :offset float15-offset))) + (inst xorpd float15 float15)))) (define-vop (alloc-number-stack-space) (:info amount) @@ -267,15 +264,17 @@ (:generator 0 (aver (location= result rsp-tn)) (unless (zerop amount) - (let ((delta (logandc2 (+ amount 3) 3))) + (let ((delta (logandc2 (+ amount 7) 7))) (inst sub rsp-tn delta))) + ;; C stack must be 16 byte aligned + (inst and rsp-tn #xfffffff0) (move result rsp-tn))) (define-vop (dealloc-number-stack-space) (:info amount) (:generator 0 (unless (zerop amount) - (let ((delta (logandc2 (+ amount 3) 3))) + (let ((delta (logandc2 (+ amount 7) 7))) (inst add rsp-tn delta))))) (define-vop (alloc-alien-stack-space) @@ -288,13 +287,13 @@ (unless (zerop amount) (let ((delta (logandc2 (+ amount 7) 7))) (inst mov temp - (make-ea :dword + (make-ea :qword :disp (+ nil-value (static-symbol-offset '*alien-stack*) (ash symbol-tls-index-slot word-shift) (- other-pointer-lowtag)))) - (inst fs-segment-prefix) - (inst sub (make-ea :dword :scale 1 :index temp) delta))) + (inst sub (make-ea :qword :base thread-base-tn + :scale 1 :index temp) delta))) (load-tl-symbol-value result *alien-stack*)) #!-sb-thread (:generator 0 @@ -317,13 +316,13 @@ (unless (zerop amount) (let ((delta (logandc2 (+ amount 7) 7))) (inst mov temp - (make-ea :dword - :disp (+ nil-value - (static-symbol-offset '*alien-stack*) + (make-ea :qword + :disp (+ nil-value + (static-symbol-offset '*alien-stack*) (ash symbol-tls-index-slot word-shift) (- other-pointer-lowtag)))) - (inst fs-segment-prefix) - (inst add (make-ea :dword :scale 1 :index temp) delta)))) + (inst add (make-ea :qword :base thread-base-tn :scale 1 :index temp) + delta)))) #!-sb-thread (:generator 0 (unless (zerop amount)