(let ((reg-size (->size "*" info)))
(wrap-as
(cond
- ((= n 1) (as info 'byte-r0->r1-mem))
- ((= n 2) (cond ((= size 1) (append (as info 'byte-r0->r1-mem)
- (as info 'r+value 1)
- (as info 'value->r0 0)
- (as info 'byte-r0->r1-mem)))
- (else (as info 'word-r0->r1-mem))))
- ((= n 4) (as info 'long-r0->r1-mem))
- ((and (= n 8) (or (= reg-size 8)
- (= size 4)))
- (cond ((= size 4) (append (as info 'long-r0->r1-mem)
- (as info 'r+value 4)
- (as info 'value->r0 0)
- (as info 'long-r0->r1-mem)))
- ((and (= size 8) (= reg-size 8)) (as info 'quad-r0->r1-mem))
- (else (error "r0->r1-mem*n-: not supported"))))
- (else (append (let loop ((i 0))
- (if (>= i n) '()
- (append (if (= i 0) '()
- (append (as info 'r+value reg-size)
- (as info 'r0+value reg-size)))
- (case (- n i)
- ((1) (append (as info 'r+value -3)
- (as info 'r0+value -3)
- (as info 'r0-mem->r1-mem)))
- ((2) (append (as info 'r+value -2)
- (as info 'r0+value -2)
- (as info 'r0-mem->r1-mem)))
- ((3) (append (as info 'r+value -1)
- (as info 'r0+value -1)
- (as info 'r0-mem->r1-mem)))
- (else (as info 'r0-mem->r1-mem)))
- (loop (+ i reg-size)))))))))))
+ ((= n 1) (as info 'byte-r0->r1-mem))
+ ((= n 2) (cond ((= size 1) (append (as info 'byte-r0->r1-mem)
+ (as info 'r+value 1)
+ (as info 'value->r0 0)
+ (as info 'byte-r0->r1-mem)))
+ (else (as info 'word-r0->r1-mem))))
+ ((= n 4) (as info 'long-r0->r1-mem))
+ ((and (= n 8) (or (= reg-size 8)
+ (= size 4)))
+ (cond ((= size 4) (append (as info 'long-r0->r1-mem)
+ (as info 'r+value 4)
+ (as info 'value->r0 0)
+ (as info 'long-r0->r1-mem)))
+ ((and (= size 8) (= reg-size 8)) (as info 'quad-r0->r1-mem))
+ (else (error "r0->r1-mem*n-: not supported"))))
+ (else (let loop ((i 0))
+ (if (>= i n) '()
+ (case (- n i)
+ ((1) (as info 'byte-r0-mem->r1-mem))
+ ((2) (as info 'word-r0-mem->r1-mem))
+ ((3) (append (as info 'word-r0-mem->r1-mem)
+ (as info 'r+value 2)
+ (as info 'r0+value 2)
+ (loop (+ i 2))))
+ ((4) (append (as info 'long-r0-mem->r1-mem)))
+ (else (append (as info 'r0-mem->r1-mem)
+ (as info 'r+value reg-size)
+ (as info 'r0+value reg-size)
+ (loop (+ i reg-size))))))))))))
(define (r0->r1-mem*n info n size)
(append-text info (r0->r1-mem*n- info n size)))