(make-result-state))))))
(deftransform %alien-funcall ((function type &rest args))
- (assert (sb!c::constant-lvar-p type))
+ (aver (sb!c::constant-lvar-p type))
(let* ((type (sb!c::lvar-value type))
(arg-types (alien-fun-type-arg-types type))
(result-type (alien-fun-type-result-type type)))
- (assert (= (length arg-types) (length args)))
+ (aver (= (length arg-types) (length args)))
;; We need to do something special for the following argument
;; types: single-float, double-float, and 64-bit integers. For
;; results, we need something special for 64-bit integer results.
,@(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 li 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)
+ (:temporary (:scs (non-descriptor-reg)) addr)
(:generator 2
- (inst li res (make-fixup (extern-alien-name foreign-symbol)
- :foreign))))
+ (inst li addr (make-fixup foreign-symbol :foreign-dataref))
+ (loadw res addr)))
(define-vop (call-out)
(:args (function :scs (sap-reg) :target cfunc)
(when cur-nfp
(store-stack-tn nfp-save cur-nfp))
(move cfunc function)
- (inst li temp (make-fixup (extern-alien-name "call_into_c") :foreign))
+ (inst li temp (make-fixup "call_into_c" :foreign))
(inst jal lip temp)
(inst nop)
(when cur-nfp