- (inst addi ndescr rank (fixnumize (1- sb!vm:array-dimensions-offset)))
- (inst slwi ndescr ndescr sb!vm:n-widetag-bits)
+ (inst addi ndescr rank (fixnumize (1- array-dimensions-offset)))
+ (inst slwi ndescr ndescr n-widetag-bits)
(:policy :fast-safe)
(:args (x :scs (descriptor-reg)))
(:temporary (:scs (non-descriptor-reg)) temp)
(:results (res :scs (any-reg descriptor-reg)))
(:generator 6
(:policy :fast-safe)
(:args (x :scs (descriptor-reg)))
(:temporary (:scs (non-descriptor-reg)) temp)
(:results (res :scs (any-reg descriptor-reg)))
(:generator 6
- (loadw temp x 0 sb!vm:other-pointer-lowtag)
- (inst srawi temp temp sb!vm:n-widetag-bits)
- (inst subi temp temp (1- sb!vm:array-dimensions-offset))
+ (loadw temp x 0 other-pointer-lowtag)
+ (inst srawi temp temp n-widetag-bits)
+ (inst subi temp temp (1- array-dimensions-offset))
(define-vop (,(symbolicate "DATA-VECTOR-REF/" (string type))
,(symbolicate (string variant) "-REF"))
(:note "inline array access")
(define-vop (,(symbolicate "DATA-VECTOR-REF/" (string type))
,(symbolicate (string variant) "-REF"))
(:note "inline array access")
(:translate data-vector-ref)
(:arg-types ,type positive-fixnum)
(:results (value :scs ,scs))
(:translate data-vector-ref)
(:arg-types ,type positive-fixnum)
(:results (value :scs ,scs))
(define-vop (,(symbolicate "DATA-VECTOR-SET/" (string type))
,(symbolicate (string variant) "-SET"))
(:note "inline array store")
(define-vop (,(symbolicate "DATA-VECTOR-SET/" (string type))
,(symbolicate (string variant) "-SET"))
(:note "inline array store")
(:translate data-vector-set)
(:arg-types ,type positive-fixnum ,element-type)
(:args (object :scs (descriptor-reg))
(:translate data-vector-set)
(:arg-types ,type positive-fixnum ,element-type)
(:args (object :scs (descriptor-reg))
(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))
(inst lwzx result object temp)
(inst andi. temp index ,(1- elements-per-word))
(inst xori temp temp ,(1- elements-per-word))
(inst lwzx result object temp)
(inst andi. temp index ,(1- elements-per-word))
(inst xori temp temp ,(1- elements-per-word))
(multiple-value-bind (word extra)
(floor index ,elements-per-word)
(setf extra (logxor extra (1- ,elements-per-word)))
(multiple-value-bind (word extra)
(floor index ,elements-per-word)
(setf extra (logxor extra (1- ,elements-per-word)))
(:generator 25
(inst srwi offset index ,bit-shift)
(inst slwi offset offset 2)
(:generator 25
(inst srwi offset index ,bit-shift)
(inst slwi offset offset 2)
(inst lwzx old object offset)
(inst andi. shift index ,(1- elements-per-word))
(inst xori shift shift ,(1- elements-per-word))
(inst lwzx old object offset)
(inst andi. shift index ,(1- elements-per-word))
(inst xori shift shift ,(1- elements-per-word))
(:temporary (:scs (non-descriptor-reg)) offset-reg temp old)
(:generator 20
(multiple-value-bind (word extra) (floor index ,elements-per-word)
(:temporary (:scs (non-descriptor-reg)) offset-reg temp old)
(:generator 20
(multiple-value-bind (word extra) (floor index ,elements-per-word)
(inst stfsx value object offset)
(unless (location= result value)
(inst frsp result value))))
(inst stfsx value object offset)
(unless (location= result value)
(inst frsp result value))))
(inst stfdx value object offset)
(unless (location= result value)
(inst fmr result value))))
(inst stfdx value object offset)
(unless (location= result value)
(inst fmr result value))))
(let ((value-real (complex-single-reg-real-tn value))
(result-real (complex-single-reg-real-tn result)))
(inst slwi offset index 1)
(let ((value-real (complex-single-reg-real-tn value))
(result-real (complex-single-reg-real-tn result)))
(inst slwi offset index 1)
(inst stfsx value-real object offset)
(unless (location= result-real value-real)
(inst frsp result-real value-real)))
(let ((value-imag (complex-single-reg-imag-tn value))
(result-imag (complex-single-reg-imag-tn result)))
(inst stfsx value-real object offset)
(unless (location= result-real value-real)
(inst frsp result-real value-real)))
(let ((value-imag (complex-single-reg-imag-tn value))
(result-imag (complex-single-reg-imag-tn result)))
(inst stfsx value-imag object offset)
(unless (location= result-imag value-imag)
(inst frsp result-imag value-imag)))))
(inst stfsx value-imag object offset)
(unless (location= result-imag value-imag)
(inst frsp result-imag value-imag)))))
(let ((value-real (complex-double-reg-real-tn value))
(result-real (complex-double-reg-real-tn result)))
(inst slwi offset index 2)
(let ((value-real (complex-double-reg-real-tn value))
(result-real (complex-double-reg-real-tn result)))
(inst slwi offset index 2)
(inst stfdx value-real object offset)
(unless (location= result-real value-real)
(inst fmr result-real value-real)))
(let ((value-imag (complex-double-reg-imag-tn value))
(result-imag (complex-double-reg-imag-tn result)))
(inst stfdx value-real object offset)
(unless (location= result-real value-real)
(inst fmr result-real value-real)))
(let ((value-imag (complex-double-reg-imag-tn value))
(result-imag (complex-double-reg-imag-tn result)))
(inst stfdx value-imag object offset)
(unless (location= result-imag value-imag)
(inst fmr result-imag value-imag)))))
(inst stfdx value-imag object offset)
(unless (location= result-imag value-imag)
(inst fmr result-imag value-imag)))))
(:arg-types * positive-fixnum unsigned-num)
(:results (result :scs (unsigned-reg)))
(:result-types unsigned-num)
(:arg-types * positive-fixnum unsigned-num)
(:results (result :scs (unsigned-reg)))
(:result-types unsigned-num)
(define-vop (data-vector-ref/simple-array-signed-byte-8 signed-byte-index-ref)
(:note "inline array access")
(define-vop (data-vector-ref/simple-array-signed-byte-8 signed-byte-index-ref)
(:note "inline array access")
(:translate data-vector-ref)
(:arg-types simple-array-signed-byte-8 positive-fixnum)
(:results (value :scs (signed-reg)))
(:translate data-vector-ref)
(:arg-types simple-array-signed-byte-8 positive-fixnum)
(:results (value :scs (signed-reg)))
(:translate data-vector-set)
(:arg-types simple-array-signed-byte-8 positive-fixnum tagged-num)
(:args (object :scs (descriptor-reg))
(:translate data-vector-set)
(:arg-types simple-array-signed-byte-8 positive-fixnum tagged-num)
(:args (object :scs (descriptor-reg))
(define-vop (data-vector-ref/simple-array-signed-byte-16
signed-halfword-index-ref)
(:note "inline array access")
(define-vop (data-vector-ref/simple-array-signed-byte-16
signed-halfword-index-ref)
(:note "inline array access")
(:translate data-vector-ref)
(:arg-types simple-array-signed-byte-16 positive-fixnum)
(:results (value :scs (signed-reg)))
(:translate data-vector-ref)
(:arg-types simple-array-signed-byte-16 positive-fixnum)
(:results (value :scs (signed-reg)))
(define-vop (data-vector-set/simple-array-signed-byte-16 halfword-index-set)
(:note "inline array store")
(define-vop (data-vector-set/simple-array-signed-byte-16 halfword-index-set)
(:note "inline array store")
(:translate data-vector-set)
(:arg-types simple-array-signed-byte-16 positive-fixnum tagged-num)
(:args (object :scs (descriptor-reg))
(:translate data-vector-set)
(:arg-types simple-array-signed-byte-16 positive-fixnum tagged-num)
(:args (object :scs (descriptor-reg))