(inst addu header rank (fixnumize (1- array-dimensions-offset)))
(inst sll header n-widetag-bits)
(inst or header header type)
(inst addu header rank (fixnumize (1- array-dimensions-offset)))
(inst sll header n-widetag-bits)
(inst or header header type)
(loadw temp x 0 other-pointer-lowtag)
(inst sra temp n-widetag-bits)
(inst subu temp (1- array-dimensions-offset))
(loadw temp x 0 other-pointer-lowtag)
(inst sra temp n-widetag-bits)
(inst subu temp (1- array-dimensions-offset))
(:temporary (:scs (non-descriptor-reg) :to (:result 0)) temp result)
(:generator 20
(inst srl temp index ,bit-shift)
(:temporary (:scs (non-descriptor-reg) :to (:result 0)) temp result)
(:generator 20
(inst srl temp index ,bit-shift)
`((inst sll temp ,(1- (integer-length bits)))))
(inst srl result temp)
(inst and result ,(1- (ash 1 bits)))
`((inst sll temp ,(1- (integer-length bits)))))
(inst srl result temp)
(inst and result ,(1- (ash 1 bits)))
(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)
(:temporary (:scs (non-descriptor-reg) :from (:argument 1)) shift)
(:generator 25
(inst srl temp index ,bit-shift)
(:temporary (:scs (non-descriptor-reg) :from (:argument 1)) shift)
(:generator 25
(inst srl temp index ,bit-shift)
(inst addu lip object shift)
(let ((real-tn (complex-double-reg-real-tn value)))
(ld-double real-tn lip (- (* vector-data-offset n-word-bytes)
(inst addu lip object shift)
(let ((real-tn (complex-double-reg-real-tn value)))
(ld-double real-tn lip (- (* vector-data-offset n-word-bytes)
(inst addu lip object shift)
(let ((value-real (complex-double-reg-real-tn value))
(result-real (complex-double-reg-real-tn result)))
(inst addu lip object shift)
(let ((value-real (complex-double-reg-real-tn value))
(result-real (complex-double-reg-real-tn result)))