(inst or ndescr ndescr type)
;; Remove the extraneous fixnum tag bits because TYPE and RANK
;; were fixnums
- (inst srl ndescr ndescr fixnum-tag-bits)
+ (inst srl ndescr ndescr n-fixnum-tag-bits)
(storew ndescr header 0 other-pointer-lowtag))
(move result header)))
(loadw temp x 0 other-pointer-lowtag)
(inst sra temp n-widetag-bits)
(inst sub temp (1- array-dimensions-offset))
- (inst sll res temp fixnum-tag-bits)))
+ (inst sll res temp n-fixnum-tag-bits)))
\f
(:temporary (:scs (non-descriptor-reg) :to (:result 0)) temp result)
(:generator 20
(inst srl temp index ,bit-shift)
- (inst sll temp fixnum-tag-bits)
+ (inst sll temp n-fixnum-tag-bits)
(inst add temp (- (* vector-data-offset n-word-bytes)
other-pointer-lowtag))
(inst ld result object temp)
(:result-types positive-fixnum)
(:temporary (:scs (non-descriptor-reg)) temp)
(:generator 15
- (multiple-value-bind (word extra) (floor index ,elements-per-word)
+ (multiple-value-bind (word extra)
+ (floor index ,elements-per-word)
(setf extra (logxor extra (1- ,elements-per-word)))
(let ((offset (- (* (+ word vector-data-offset) n-word-bytes)
other-pointer-lowtag)))
(inst li temp offset)
(inst ld result object temp))))
(unless (zerop extra)
- (inst srl result
- (logxor (* extra ,bits) ,(1- elements-per-word))))
+ (inst srl result (* extra ,bits)))
(unless (= extra ,(1- elements-per-word))
(inst and result ,(1- (ash 1 bits)))))))
(define-vop (,(symbolicate 'data-vector-set/ type))
(:temporary (:scs (non-descriptor-reg) :from (:argument 1)) shift)
(:generator 25
(inst srl offset index ,bit-shift)
- (inst sll offset fixnum-tag-bits)
+ (inst sll offset n-fixnum-tag-bits)
(inst add offset (- (* vector-data-offset n-word-bytes)
other-pointer-lowtag))
(inst ld old object offset)