0.9.2.40:
[sbcl.git] / src / compiler / x86-64 / c-call.lisp
index 99b1525..2fa84d0 100644 (file)
       (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))
   (: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))
   (: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)
     ;; 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)
     (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
     (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)