1 ;;;; support for System Area Pointers (SAPs) in the target machine
3 ;;;; This software is part of the SBCL system. See the README file for
6 ;;;; This software is derived from the CMU CL system, which was
7 ;;;; written at Carnegie Mellon University and released into the
8 ;;;; public domain. The software is in the public domain and is
9 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
10 ;;;; files for more information.
12 (in-package "SB!KERNEL")
14 ;;; Return T iff the SAP X points to a smaller address then the SAP Y.
16 (declare (type system-area-pointer x y))
19 ;;; Return T iff the SAP X points to a smaller or the same address as
22 (declare (type system-area-pointer x y))
25 ;;; Return T iff the SAP X points to the same address as the SAP Y.
27 (declare (type system-area-pointer x y))
30 ;;; Return T iff the SAP X points to a larger or the same address as
33 (declare (type system-area-pointer x y))
36 ;;; Return T iff the SAP X points to a larger address then the SAP Y.
38 (declare (type system-area-pointer x y))
41 ;;; Return a new SAP, OFFSET bytes from SAP.
42 (defun sap+ (sap offset)
43 (declare (type system-area-pointer sap)
47 ;;; Return the byte offset between SAP1 and SAP2.
48 (defun sap- (sap1 sap2)
49 (declare (type system-area-pointer sap1 sap2))
52 ;;; Convert SAP into an integer.
54 (declare (type system-area-pointer sap))
57 ;;; Convert an integer into a SAP.
59 (declare (type sap-int int))
62 ;;; Return the 8-bit byte at OFFSET bytes from SAP.
63 (defun sap-ref-8 (sap offset)
64 (declare (type system-area-pointer sap)
66 (sap-ref-8 sap offset))
68 ;;; Return the 16-bit word at OFFSET bytes from SAP.
69 (defun sap-ref-16 (sap offset)
70 (declare (type system-area-pointer sap)
72 (sap-ref-16 sap offset))
74 ;;; Returns the 32-bit dualword at OFFSET bytes from SAP.
75 (defun sap-ref-32 (sap offset)
76 (declare (type system-area-pointer sap)
78 (sap-ref-32 sap offset))
80 ;;; Return the 64-bit quadword at OFFSET bytes from SAP.
82 (defun sap-ref-64 (sap offset)
83 (declare (type system-area-pointer sap)
85 (sap-ref-64 sap offset))
87 ;;; Return the 32-bit SAP at OFFSET bytes from SAP.
88 (defun sap-ref-sap (sap offset)
89 (declare (type system-area-pointer sap)
91 (sap-ref-sap sap offset))
93 ;;; Return the 32-bit SINGLE-FLOAT at OFFSET bytes from SAP.
94 (defun sap-ref-single (sap offset)
95 (declare (type system-area-pointer sap)
97 (sap-ref-single sap offset))
99 ;;; Return the 64-bit DOUBLE-FLOAT at OFFSET bytes from SAP.
100 (defun sap-ref-double (sap offset)
101 (declare (type system-area-pointer sap)
103 (sap-ref-double sap offset))
105 ;;; Return the LONG-FLOAT at OFFSET bytes from SAP.
106 #!+(or x86 long-float)
107 (defun sap-ref-long (sap offset)
108 (declare (type system-area-pointer sap)
110 (sap-ref-long sap offset))
112 ;;; Return the signed 8-bit byte at OFFSET bytes from SAP.
113 (defun signed-sap-ref-8 (sap offset)
114 (declare (type system-area-pointer sap)
116 (signed-sap-ref-8 sap offset))
118 ;;; Return the signed 16-bit word at OFFSET bytes from SAP.
119 (defun signed-sap-ref-16 (sap offset)
120 (declare (type system-area-pointer sap)
122 (signed-sap-ref-16 sap offset))
124 ;;; Return the signed 32-bit dualword at OFFSET bytes from SAP.
125 (defun signed-sap-ref-32 (sap offset)
126 (declare (type system-area-pointer sap)
128 (signed-sap-ref-32 sap offset))
130 ;;; Return the signed 64-bit quadword at OFFSET bytes from SAP.
132 (defun signed-sap-ref-64 (sap offset)
133 (declare (type system-area-pointer sap)
135 (signed-sap-ref-64 sap offset))
137 (defun %set-sap-ref-8 (sap offset new-value)
138 (declare (type system-area-pointer sap)
140 (type (unsigned-byte 8) new-value))
141 (setf (sap-ref-8 sap offset) new-value))
143 (defun %set-sap-ref-16 (sap offset new-value)
144 (declare (type system-area-pointer sap)
146 (type (unsigned-byte 16) new-value))
147 (setf (sap-ref-16 sap offset) new-value))
149 (defun %set-sap-ref-32 (sap offset new-value)
150 (declare (type system-area-pointer sap)
152 (type (unsigned-byte 32) new-value))
153 (setf (sap-ref-32 sap offset) new-value))
156 (defun %set-sap-ref-64 (sap offset new-value)
157 (declare (type system-area-pointer sap)
159 (type (unsigned-byte 64) new-value))
160 (setf (sap-ref-64 sap offset) new-value))
162 (defun %set-signed-sap-ref-8 (sap offset new-value)
163 (declare (type system-area-pointer sap)
165 (type (signed-byte 8) new-value))
166 (setf (signed-sap-ref-8 sap offset) new-value))
168 (defun %set-signed-sap-ref-16 (sap offset new-value)
169 (declare (type system-area-pointer sap)
171 (type (signed-byte 16) new-value))
172 (setf (signed-sap-ref-16 sap offset) new-value))
174 (defun %set-signed-sap-ref-32 (sap offset new-value)
175 (declare (type system-area-pointer sap)
177 (type (signed-byte 32) new-value))
178 (setf (signed-sap-ref-32 sap offset) new-value))
181 (defun %set-signed-sap-ref-64 (sap offset new-value)
182 (declare (type system-area-pointer sap)
184 (type (signed-byte 64) new-value))
185 (setf (signed-sap-ref-64 sap offset) new-value))
187 (defun %set-sap-ref-sap (sap offset new-value)
188 (declare (type system-area-pointer sap new-value)
190 (setf (sap-ref-sap sap offset) new-value))
192 (defun %set-sap-ref-single (sap offset new-value)
193 (declare (type system-area-pointer sap)
195 (type single-float new-value))
196 (setf (sap-ref-single sap offset) new-value))
198 (defun %set-sap-ref-double (sap offset new-value)
199 (declare (type system-area-pointer sap)
201 (type double-float new-value))
202 (setf (sap-ref-double sap offset) new-value))
205 (defun %set-sap-ref-long (sap offset new-value)
206 (declare (type system-area-pointer sap)
208 (type long-float new-value))
209 (setf (sap-ref-long sap offset) new-value))