(inst addq rank (fixnumize (1- array-dimensions-offset)) header)
(inst sll header n-widetag-bits header)
(inst bis header type header)
(inst addq rank (fixnumize (1- array-dimensions-offset)) header)
(inst sll header n-widetag-bits header)
(inst bis header type header)
(loadw temp x 0 other-pointer-lowtag)
(inst sra temp n-widetag-bits temp)
(inst subq temp (1- array-dimensions-offset) temp)
(loadw temp x 0 other-pointer-lowtag)
(inst sra temp n-widetag-bits temp)
(inst subq temp (1- array-dimensions-offset) temp)
(define-full-reffer ,(symbolicate "DATA-VECTOR-REF/" type)
,type
vector-data-offset other-pointer-lowtag
(define-full-reffer ,(symbolicate "DATA-VECTOR-REF/" type)
,type
vector-data-offset other-pointer-lowtag
,(1- (integer-length bits)) temp)))
(inst srl result temp result)
(inst and result ,(1- (ash 1 bits)) result)
,(1- (integer-length bits)) temp)))
(inst srl result temp result)
(inst and result ,(1- (ash 1 bits)) result)
(define-vop (,(symbolicate 'data-vector-ref-c/ type))
(:translate data-vector-ref)
(:policy :fast-safe)
(define-vop (,(symbolicate 'data-vector-ref-c/ type))
(:translate data-vector-ref)
(:policy :fast-safe)
:from (:argument 1)) shift)
(:generator 25
(inst srl index ,bit-shift temp)
:from (:argument 1)) shift)
(:generator 25
(inst srl index ,bit-shift temp)
(:generator 20
(multiple-value-bind (word extra)
(floor index ,elements-per-word)
(:generator 20
(multiple-value-bind (word extra)
(floor index ,elements-per-word)
(def-partial-data-vector-frobs simple-array-unsigned-byte-8 positive-fixnum
:byte nil unsigned-reg signed-reg)
(def-partial-data-vector-frobs simple-array-unsigned-byte-8 positive-fixnum
:byte nil unsigned-reg signed-reg)
(def-partial-data-vector-frobs simple-array-unsigned-byte-16 positive-fixnum
:short nil unsigned-reg signed-reg)
(def-partial-data-vector-frobs simple-array-unsigned-byte-16 positive-fixnum
:short nil unsigned-reg signed-reg)
(def-full-data-vector-frobs simple-array-signed-byte-30 tagged-num any-reg)
(def-full-data-vector-frobs simple-array-signed-byte-32 signed-num
(def-full-data-vector-frobs simple-array-signed-byte-30 tagged-num any-reg)
(def-full-data-vector-frobs simple-array-signed-byte-32 signed-num
other-pointer-lowtag) lip)
(unless (location= result value)
(inst fmove value result))))
other-pointer-lowtag) lip)
(unless (location= result value)
(inst fmove value result))))
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