0.8.21.48:
[sbcl.git] / src / compiler / x86 / c-call.lisp
index cb7f2da..627fc83 100644 (file)
                                     ,@(new-args))))))
         (sb!c::give-up-ir1-transform))))
 
-
-
-
 (define-vop (foreign-symbol-address)
   (:translate foreign-symbol-address)
   (:policy :fast-safe)
   (:args)
-  (:arg-types (:constant simple-base-string))
+  (:arg-types (:constant simple-string))
+  (:info foreign-symbol)
+  (:results (res :scs (sap-reg)))
+  (:result-types system-area-pointer)
+  (:generator 2
+   (inst lea res (make-fixup foreign-symbol :foreign))))
+
+#!+linkage-table
+(define-vop (foreign-symbol-dataref-address)
+  (:translate foreign-symbol-dataref-address)
+  (:policy :fast-safe)
+  (:args)
+  (:arg-types (:constant simple-string))
   (:info foreign-symbol)
   (:results (res :scs (sap-reg)))
   (:result-types system-area-pointer)
   (:generator 2
-   (inst lea res (make-fixup (extern-alien-name foreign-symbol) :foreign))))
+   (inst mov res (make-fixup foreign-symbol :foreign-dataref))))
 
 (define-vop (call-out)
   (:args (function :scs (sap-reg))
   (:generator 0
     (cond ((policy node (> space speed))
           (move eax function)
-          (inst call (make-fixup (extern-alien-name "call_into_c") :foreign)))
+          (inst call (make-fixup "call_into_c" :foreign)))
          (t
           ;; Setup the NPX for C; all the FP registers need to be
           ;; empty; pop them all.
       (let ((delta (logandc2 (+ amount 3) 3)))
        (inst add esp-tn delta)))
     (when (policy node (= sb!c::float-accuracy 3))
+      (inst fnstcw (make-ea :word :base esp-tn))
+      (inst wait)
       (inst and (make-ea :word :base esp-tn) #xfeff)
       (inst fldcw (make-ea :word :base esp-tn))
       (inst wait)