- ,@(when translate
- `((:translate ,translate)))
- (:policy :fast-safe)
- (:args (object :scs (descriptor-reg)))
- (:info index)
- (:arg-types ,type
- (:constant (load/store-index ,scale
- ,(eval lowtag)
- ,(eval offset))))
- (:results (value :scs ,scs))
- (:result-types ,el-type)
- (:temporary (:sc non-descriptor-reg) temp)
- (:temporary (:sc non-descriptor-reg) temp1)
- (:generator 4
- ,@(ecase size
- (:byte
- (if signed
- `((inst ldq_u temp (- (+ (* ,offset n-word-bytes)
- (* index ,scale)) ,lowtag)
- object)
- (inst lda temp1 (1+ (- (+ (* ,offset n-word-bytes)
- (* index ,scale)) ,lowtag))
- object)
- (inst extqh temp temp1 temp)
- (inst sra temp 56 value))
- `((inst ldq_u temp (- (+ (* ,offset n-word-bytes)
- (* index ,scale)) ,lowtag)
- object)
- (inst lda temp1 (- (+ (* ,offset n-word-bytes)
- (* index ,scale)) ,lowtag)
- object)
- (inst extbl temp temp1 value))))
- (:short
- (if signed
- `((inst ldq_u temp (- (+ (* ,offset n-word-bytes)
- (* index ,scale)) ,lowtag)
- object)
- (inst lda temp1 (- (+ (* ,offset n-word-bytes)
- (* index ,scale)) ,lowtag)
- object)
- (inst extwl temp temp1 temp)
- (inst sll temp 48 temp)
- (inst sra temp 48 value))
- `((inst ldq_u temp (- (+ (* ,offset n-word-bytes)
- (* index ,scale)) ,lowtag)
- object)
- (inst lda temp1 (- (+ (* ,offset n-word-bytes)
- (* index ,scale)) ,lowtag)
- object)
- (inst extwl temp temp1 value))))))))))
+ ,@(when translate
+ `((:translate ,translate)))
+ (:policy :fast-safe)
+ (:args (object :scs (descriptor-reg)))
+ (:info index)
+ (:arg-types ,type
+ (:constant (load/store-index ,scale
+ ,(eval lowtag)
+ ,(eval offset))))
+ (:results (value :scs ,scs))
+ (:result-types ,el-type)
+ (:temporary (:sc non-descriptor-reg) temp)
+ (:temporary (:sc non-descriptor-reg) temp1)
+ (:generator 4
+ ,@(ecase size
+ (:byte
+ (if signed
+ `((inst ldq_u temp (- (+ (* ,offset n-word-bytes)
+ (* index ,scale)) ,lowtag)
+ object)
+ (inst lda temp1 (1+ (- (+ (* ,offset n-word-bytes)
+ (* index ,scale)) ,lowtag))
+ object)
+ (inst extqh temp temp1 temp)
+ (inst sra temp 56 value))
+ `((inst ldq_u temp (- (+ (* ,offset n-word-bytes)
+ (* index ,scale)) ,lowtag)
+ object)
+ (inst lda temp1 (- (+ (* ,offset n-word-bytes)
+ (* index ,scale)) ,lowtag)
+ object)
+ (inst extbl temp temp1 value))))
+ (:short
+ (if signed
+ `((inst ldq_u temp (- (+ (* ,offset n-word-bytes)
+ (* index ,scale)) ,lowtag)
+ object)
+ (inst lda temp1 (- (+ (* ,offset n-word-bytes)
+ (* index ,scale)) ,lowtag)
+ object)
+ (inst extwl temp temp1 temp)
+ (inst sll temp 48 temp)
+ (inst sra temp 48 value))
+ `((inst ldq_u temp (- (+ (* ,offset n-word-bytes)
+ (* index ,scale)) ,lowtag)
+ object)
+ (inst lda temp1 (- (+ (* ,offset n-word-bytes)
+ (* index ,scale)) ,lowtag)
+ object)
+ (inst extwl temp temp1 value))))))))))