X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-sap.lisp;h=17f71910b4fa836b2541a097dc46f785f55acac6;hb=271f699422601e56a04cb8f65bedaa5c38ea24ca;hp=13b50374a226af2e321bef4535fb3131843acd4f;hpb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;p=sbcl.git diff --git a/src/code/target-sap.lisp b/src/code/target-sap.lisp index 13b5037..17f7191 100644 --- a/src/code/target-sap.lisp +++ b/src/code/target-sap.lisp @@ -41,7 +41,7 @@ ;;; Return a new SAP, OFFSET bytes from SAP. (defun sap+ (sap offset) (declare (type system-area-pointer sap) - (fixnum offset)) + (type (signed-byte #.sb!vm:n-word-bits) offset)) (sap+ sap offset)) ;;; Return the byte offset between SAP1 and SAP2. @@ -65,6 +65,14 @@ (fixnum offset)) (sap-ref-8 sap offset)) +(defun sap-ref-octets (sap offset count) + (declare (type system-area-pointer sap) + (fixnum offset count)) + (let ((buffer (make-array count :element-type '(unsigned-byte 8)))) + (dotimes (i count) + (setf (aref buffer i) (sap-ref-8 sap (+ offset i)))) + buffer)) + ;;; Return the 16-bit word at OFFSET bytes from SAP. (defun sap-ref-16 (sap offset) (declare (type system-area-pointer sap) @@ -95,6 +103,12 @@ (fixnum offset)) (sap-ref-sap sap offset)) +;; Return the LISPOBJ at OFFSET bytes from SAP. +(defun sap-ref-lispobj (sap offset) + (declare (type system-area-pointer sap) + (fixnum offset)) + (sap-ref-lispobj sap offset)) + ;;; Return the 32-bit SINGLE-FLOAT at OFFSET bytes from SAP. (defun sap-ref-single (sap offset) (declare (type system-area-pointer sap) @@ -209,6 +223,12 @@ (fixnum offset)) (setf (sap-ref-sap sap offset) new-value)) +(defun %set-sap-ref-lispobj (sap offset new-value) + (declare (type system-area-pointer sap) + (fixnum offset) + (t new-value)) + (setf (sap-ref-lispobj sap offset) new-value)) + (defun %set-sap-ref-single (sap offset new-value) (declare (type system-area-pointer sap) (fixnum offset)