I don't know what you want to do, but this code:
(declare (standard-bindings) (extended-bindings) (not interrupts-enabled) (not safe))
(define (u8transfer in out) (do ((i (fx- (u8vector-length in) 1) (fx- i 1))) ((fx< i 0)) (u8vector-set! out i (u8vector-ref in i))))
expands to
[Bradley-Luciers-MacBook-Pro:~/Downloads] lucier% gsc -cc-options "-save-temps" -keep-c -expansion fxtest.scm Expansion:
(define u8transfer (lambda (in out) (letrec ((do-temp.0 (lambda (in out i) (if ('#<procedure #2 ##fx<> i 0) #!void (let ((begin-temp.1 ('#<procedure #3 ##u8vector-set!> out i ('#<procedure #4 ##u8vector-ref> in i)))) (do-temp.0 in out ('#<procedure #5 ##fx-> i 1))))))) (let ((i ('#<procedure #5 ##fx-> ('#<procedure #6 ##u8vector-length> in) 1))) (if ('#<procedure #2 ##fx<> i 0) #!void (let ((begin-temp.1 ('#<procedure #3 ##u8vector-set!> out i ('#<procedure #4 ##u8vector-ref> in i)))) (do-temp.0 in out ('#<procedure #5 ##fx-> i 1))))))))
and the inner loop is
L14: movq %rdx, %rax sarq $2, %rax subq $4, %rdx movzbl 7(%rsi,%rax), %ecx leaq 0(,%rcx,4), %r8 movb %cl, 7(%r9,%rax) jns L14
which seems to have about 1 extra instruction (I don't know what the load effective address is doing there).
Brad