X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcode%2Fcross-sap.lisp;h=46f72deb7451da176645c8f192c0fc1f8d614d0a;hb=18dc0069cd514c976042766ab9a785c970fe1603;hp=d4fcfe90c87b25010b813f49b7f49e5b26a08a5c;hpb=a530bbe337109d898d5b4a001fc8f1afa3b5dc39;p=sbcl.git diff --git a/src/code/cross-sap.lisp b/src/code/cross-sap.lisp index d4fcfe9..46f72de 100644 --- a/src/code/cross-sap.lisp +++ b/src/code/cross-sap.lisp @@ -12,52 +12,55 @@ (in-package "SB!SYS") -(file-comment - "$Header$") - -;;; SYSTEM-AREA-POINTER is not a primitive type in ANSI Common Lisp, so we -;;; need a compound type to represent it in the host Common Lisp at -;;; cross-compile time: -(defstruct (system-area-pointer (:constructor make-sap) (:conc-name "SAP-")) +;;; SYSTEM-AREA-POINTER is not a primitive type in ANSI Common Lisp, +;;; so we need a compound type to represent it in the host Common Lisp +;;; at cross-compile time: +(defstruct (system-area-pointer (:constructor make-sap) + (:conc-name "SAP-")) ;; the integer representation of the address - (int (error "missing SAP-INT argument") :type sap-int-type :read-only t)) + (int (error "missing SAP-INT argument") :type sap-int :read-only t)) ;;; cross-compilation-host analogues of target-CMU CL primitive SAP operations (defun int-sap (int) (make-sap :int int)) (defun sap+ (sap offset) - (declare (type system-area-pointer sap) (type sap-int-type offset)) + (declare (type system-area-pointer sap) (type sap-int offset)) (make-sap :int (+ (sap-int sap) offset))) #.`(progn ,@(mapcar (lambda (info) - (destructuring-bind (sap-fun int-fun) info - `(defun ,sap-fun (x y) - (,int-fun (sap-int x) (sap-int y))))) - '((sap< <) (sap<= <=) (sap= =) (sap>= >=) (sap> >) (sap- -)))) + (destructuring-bind (sap-fun int-fun) info + `(defun ,sap-fun (x y) + (,int-fun (sap-int x) (sap-int y))))) + '((sap< <) (sap<= <=) (sap= =) (sap>= >=) (sap> >) (sap- -)))) -;;; dummies, defined so that we can declare they never return and thereby -;;; eliminate a thundering herd of optimization notes a la "can't optimize this -;;; expression because we don't know the return type of SAP-REF-8" +;;; dummies, defined so that we can declare they never return and +;;; thereby eliminate a thundering herd of optimization notes along +;;; the lines of "can't optimize this expression because we don't know +;;; the return type of SAP-REF-8" (defun sap-ref-stub (name) (error "~S doesn't make sense on cross-compilation host." name)) #.`(progn ,@(mapcan (lambda (name) - `((declaim (ftype (function (system-area-pointer fixnum) nil) - ,name)) - (defun ,name (sap offset) - (declare (ignore sap offset)) - (sap-ref-stub ',name)) - ,@(let ((setter-stub (gensym "SAP-SETTER-STUB-"))) - `((defun ,setter-stub (foo sap offset) - (declare (ignore foo sap offset)) - (sap-ref-stub '(setf ,name))) - (defsetf ,name ,setter-stub))))) - '(sap-ref-8 - sap-ref-16 - sap-ref-32 - sap-ref-sap - sap-ref-single - sap-ref-double - signed-sap-ref-8 - signed-sap-ref-16 - signed-sap-ref-32))) + `((declaim (ftype (function (system-area-pointer fixnum) nil) + ,name)) + (defun ,name (sap offset) + (declare (ignore sap offset)) + (sap-ref-stub ',name)) + ,@(let ((setter-stub (gensym "SETTER-STUB-"))) + `((defun ,setter-stub (foo sap offset) + (declare (ignore foo sap offset)) + (sap-ref-stub '(setf ,name))) + (defsetf ,name ,setter-stub))))) + '(sap-ref-8 + sap-ref-16 + sap-ref-32 + sap-ref-64 + sap-ref-sap + sap-ref-word + sap-ref-single + sap-ref-double + signed-sap-ref-8 + signed-sap-ref-16 + signed-sap-ref-32 + signed-sap-ref-64 + signed-sap-ref-word)))