X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fsaptran.lisp;h=80b5e581469e229dc22e03e2196b105ad97e0aa2;hb=b83353d9f998e5c0e34604b5593df70c66d2c510;hp=2e6b50897ae09daf176bc0e8fc33e88c3a6d66eb;hpb=179812c3ad5dad69239c625ec929a7d486cf568f;p=sbcl.git diff --git a/src/compiler/saptran.lisp b/src/compiler/saptran.lisp index 2e6b508..80b5e58 100644 --- a/src/compiler/saptran.lisp +++ b/src/compiler/saptran.lisp @@ -14,9 +14,13 @@ ;;;; DEFKNOWNs #!+linkage-table -(deftransform foreign-symbol-address ((symbol &optional datap) (simple-string boolean)) - (if (and (constant-lvar-p symbol) (constant-lvar-p datap)) - `(sap-int (foreign-symbol-sap symbol datap)) +(deftransform foreign-symbol-address ((symbol &optional datap) (simple-string boolean) + * :important t :policy :fast-safe) + (if (and (constant-lvar-p symbol) + (constant-lvar-p datap) + #!+sb-dynamic-core (not (lvar-value datap))) + `(values (sap-int (foreign-symbol-sap symbol datap)) + (or #!+sb-dynamic-core t)) (give-up-ir1-transform))) (deftransform foreign-symbol-sap ((symbol &optional datap) @@ -27,13 +31,18 @@ `(foreign-symbol-sap symbol)) #!+linkage-table (if (and (constant-lvar-p symbol) (constant-lvar-p datap)) - (let ((name (lvar-value symbol)) + (let (#!-sb-dynamic-core (name (lvar-value symbol)) (datap (lvar-value datap))) + #!-sb-dynamic-core (if (or #+sb-xc-host t ; only static symbols on host (not datap) (find-foreign-symbol-in-table name *static-foreign-symbols*)) `(foreign-symbol-sap ,name) ; VOP - `(foreign-symbol-dataref-sap ,name))) ; VOP + `(foreign-symbol-dataref-sap ,name)) ; VOP + #!+sb-dynamic-core + (if datap + `(foreign-symbol-dataref-sap symbol) + `(foreign-symbol-sap symbol))) (give-up-ir1-transform))) (defknown (sap< sap<= sap= sap>= sap>)