(values vector index))
(values array index)))
-(defun %simple-vector-compare-and-swap (vector index old new)
- #!+(or x86 x86-64)
- (%simple-vector-compare-and-swap vector index old new)
- #!-(or x86 x86-64)
- (let ((n-old (svref vector index)))
- (when (eq old n-old)
- (setf (svref vector index) new))
- n-old))
-
;;; It'd waste space to expand copies of error handling in every
;;; inline %WITH-ARRAY-DATA, so we have them call this function
;;; instead. This is just a wrapper which is known never to return.
(:little-endian
(- sb!vm:other-pointer-lowtag))
(:big-endian
- ;; I'm not completely sure of what this
- ;; 3 represents symbolically. It's
- ;; just what all the LOAD-TYPE vops
- ;; are doing.
- (- 3 sb!vm:other-pointer-lowtag)))))
+ (- (1- sb!vm:n-word-bytes) sb!vm:other-pointer-lowtag)))))
;; WIDETAG-OF needs extra code to handle
;; LIST and FUNCTION lowtags. We're only
;; dispatching on other pointers, so let's
(defun data-vector-ref (array index)
(hairy-data-vector-ref array index))
+(defun data-vector-ref-with-offset (array index offset)
+ (hairy-data-vector-ref array (+ index offset)))
+
;;; SUBSCRIPTS has a dynamic-extent list structure and is destroyed
(defun %array-row-major-index (array subscripts
&optional (invalid-index-error-p t))