<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I don't know what you want to do, but this code:<div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div>(declare (standard-bindings)</div></div><div><div><span class="Apple-tab-span" style="white-space:pre">     </span></div> (extended-bindings)</div><div><div><span class="Apple-tab-span" style="white-space:pre">  </span></div> (not interrupts-enabled)</div><div><div><span class="Apple-tab-span" style="white-space:pre">     </span></div> (not safe))</div><div><div><br></div></div><div><div>(define (u8transfer in out)</div></div><div><div>  (do ((i (fx- (u8vector-length in) 1)  (fx- i 1)))</div></div><div><div>      ((fx< i 0))</div></div><div><div>    (u8vector-set! out i (u8vector-ref in i))))</div></div></blockquote><div><br></div><div>expands to</div><div><br></div><div><div>[Bradley-Luciers-MacBook-Pro:~/Downloads] lucier% gsc -cc-options "-save-temps" -keep-c -expansion fxtest.scm</div><div>Expansion:</div><div><br></div></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div>(define u8transfer</div></div><div><div>  (lambda (in out)</div></div><div><div>    (letrec ((do-temp.0</div></div><div><div>              (lambda (in out i)</div></div><div><div>                (if ('#<procedure #2 ##fx<> i 0)</div></div><div><div>                    #!void</div></div><div><div>                    (let ((begin-temp.1 ('#<procedure #3 ##u8vector-set!> out i ('#<procedure #4 ##u8vector-ref> in i))))</div></div><div><div>                      (do-temp.0 in out ('#<procedure #5 ##fx-> i 1)))))))</div></div><div><div>      (let ((i ('#<procedure #5 ##fx-> ('#<procedure #6 ##u8vector-length> in) 1)))</div></div><div><div>        (if ('#<procedure #2 ##fx<> i 0)</div></div><div><div>            #!void</div></div><div><div>            (let ((begin-temp.1 ('#<procedure #3 ##u8vector-set!> out i ('#<procedure #4 ##u8vector-ref> in i))))</div></div><div><div>              (do-temp.0 in out ('#<procedure #5 ##fx-> i 1))))))))</div></div></blockquote><div><br></div><div>and the inner loop is</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div>L14:</div></div><div><div>        movq    %rdx, %rax</div></div><div><div>        sarq    $2, %rax</div></div><div><div>        subq    $4, %rdx</div></div><div><div>        movzbl  7(%rsi,%rax), %ecx</div></div><div><div>        leaq    0(,%rcx,4), %r8</div></div><div><div>        movb    %cl, 7(%r9,%rax)</div></div><div><div>        jns     L14</div></div></blockquote><div><br></div><div>which seems to have about 1 extra instruction (I don't know what the load effective address is doing there).</div><div><br></div><div>Brad</div></body></html>