- (:translate data-vector-set)
- (:policy :fast-safe)
- (:args (object :scs (descriptor-reg))
- (value :scs (unsigned-reg zero immediate) :target result))
- (:arg-types ,type
- (:constant index)
- positive-fixnum)
- (:info index)
- (:results (result :scs (unsigned-reg)))
- (:result-types positive-fixnum)
- (:temporary (:scs (non-descriptor-reg)) old)
- (:temporary (:scs (interior-reg)) lip)
- (:generator 20
- (multiple-value-bind (word extra) (floor index ,elements-per-word)
- (let ((offset (- (* (+ word vector-data-offset) n-word-bytes)
- other-pointer-lowtag)))
- (cond ((typep offset '(signed-byte 14))
- (inst ldw offset object old))
- (t
- (inst move object lip)
- (inst addil (ldb (byte 21 11) offset) lip)
- (inst ldw (ldb (byte 11 0) offset) lip old)))
- (inst dep (sc-case value
- (immediate (tn-value value))
- (t value))
- (+ (* extra ,bits) ,(1- bits))
- ,bits
- old)
- (if (typep offset '(signed-byte 14))
- (inst stw old offset object)
- (inst stw old (ldb (byte 11 0) offset) lip)))
- (sc-case value
- (immediate
- (inst li (tn-value value) result))
- (t
- (move value result))))))))))
+ (:translate data-vector-set)
+ (:policy :fast-safe)
+ (:args (object :scs (descriptor-reg))
+ (value :scs (unsigned-reg zero immediate) :target result))
+ (:arg-types ,type
+ (:constant index)
+ positive-fixnum)
+ (:info index)
+ (:results (result :scs (unsigned-reg)))
+ (:result-types positive-fixnum)
+ (:temporary (:scs (non-descriptor-reg)) old)
+ (:temporary (:scs (interior-reg)) lip)
+ (:generator 20
+ (multiple-value-bind (word extra) (floor index ,elements-per-word)
+ (let ((offset (- (* (+ word vector-data-offset) n-word-bytes)
+ other-pointer-lowtag)))
+ (cond ((typep offset '(signed-byte 14))
+ (inst ldw offset object old))
+ (t
+ (inst move object lip)
+ (inst addil (ldb (byte 21 11) offset) lip)
+ (inst ldw (ldb (byte 11 0) offset) lip old)))
+ (inst dep (sc-case value
+ (immediate (tn-value value))
+ (t value))
+ (+ (* extra ,bits) ,(1- bits))
+ ,bits
+ old)
+ (if (typep offset '(signed-byte 14))
+ (inst stw old offset object)
+ (inst stw old (ldb (byte 11 0) offset) lip)))
+ (sc-case value
+ (immediate
+ (inst li (tn-value value) result))
+ (t
+ (move value result))))))))))