lowtag-mask)
bytes)
(inst li (lognot lowtag-mask) header)
(inst and bytes header bytes)
(inst addq rank (fixnumize (1- array-dimensions-offset)) header)
lowtag-mask)
bytes)
(inst li (lognot lowtag-mask) header)
(inst and bytes header bytes)
(inst addq rank (fixnumize (1- array-dimensions-offset)) header)
- array-dimensions-offset other-pointer-type
- (any-reg) positive-fixnum sb!impl::%set-array-dimension #+gengc nil)
+ array-dimensions-offset other-pointer-lowtag
+ (any-reg) positive-fixnum sb!impl::%set-array-dimension #!+gengc nil)
- vector-data-offset other-pointer-type
- ,(remove-if #'(lambda (x) (member x '(null zero))) scs)
+ vector-data-offset other-pointer-lowtag
+ ,(remove-if (lambda (x) (member x '(null zero))) scs)
- ,size ,signed vector-data-offset other-pointer-type ,scs
+ ,size ,signed vector-data-offset other-pointer-lowtag ,scs
,element-type data-vector-ref)
(define-partial-setter ,(symbolicate "DATA-VECTOR-SET/" type)
,type
,element-type data-vector-ref)
(define-partial-setter ,(symbolicate "DATA-VECTOR-SET/" type)
,type
,element-type data-vector-set)))
(def-small-data-vector-frobs (type bits)
,element-type data-vector-set)))
(def-small-data-vector-frobs (type bits)
(bit-shift (1- (integer-length elements-per-word))))
`(progn
(define-vop (,(symbolicate 'data-vector-ref/ type))
(bit-shift (1- (integer-length elements-per-word))))
`(progn
(define-vop (,(symbolicate 'data-vector-ref/ type))
(floor index ,elements-per-word)
(loadw result object (+ word
vector-data-offset)
(floor index ,elements-per-word)
(loadw result object (+ word
vector-data-offset)
(unless (zerop extra)
(inst srl result (* extra ,bits) result))
(unless (= extra ,(1- elements-per-word))
(unless (zerop extra)
(inst srl result (* extra ,bits) result))
(unless (= extra ,(1- elements-per-word))
(floor index ,elements-per-word)
(inst ldl object
(- (* (+ word vector-data-offset)
(floor index ,elements-per-word)
(inst ldl object
(- (* (+ word vector-data-offset)
lip)
(unless (location= result-real value-real)
(inst fmove value-real result-real)))
(let ((value-imag (complex-single-reg-imag-tn value))
(result-imag (complex-single-reg-imag-tn result)))
(inst sts value-imag
lip)
(unless (location= result-real value-real)
(inst fmove value-real result-real)))
(let ((value-imag (complex-single-reg-imag-tn value))
(result-imag (complex-single-reg-imag-tn result)))
(inst sts value-imag
lip)
(unless (location= result-real value-real)
(inst fmove value-real result-real)))
(let ((value-imag (complex-double-reg-imag-tn value))
(result-imag (complex-double-reg-imag-tn result)))
(inst stt value-imag
lip)
(unless (location= result-real value-real)
(inst fmove value-real result-real)))
(let ((value-imag (complex-double-reg-imag-tn value))
(result-imag (complex-double-reg-imag-tn result)))
(inst stt value-imag
;;; These vops are useful for accessing the bits of a vector irrespective of
;;; what type of vector it is.
;;;
;;; These vops are useful for accessing the bits of a vector irrespective of
;;; what type of vector it is.
;;;