memcpy32:
// (function-proc-begin 5 7 6)
        str    x30, [sp, -16]!
        mov    x1, x10
        sub    x10, x3, 20
        add    x3, x10, 32
        add    x0, x10, 24
        str    x1, [x0]
// (expr #t 1 #f (set! i 0))
        mov    w5, 0
// w6 = n_words
        ldr    w6, [x10, 16]
// w4 = src
        ldr    w4, [x10, 8]
// w7 = dest
        ldr    w7, [x10]
// w9 = src_offset
        ldr    w9, [x10, 12]
// w11 = dest_offset
        ldr    w11, [x10, 4]
.memcpy_l8:
// (lt)
        cmp    w5, w6
// (bfl l9)
        bge    .memcpy_l9
// (expr #t 3 #f (vector-set! dest (+ i dest_offset) (vector-ref src (+ i src_offset))))
// (add)
        add    w0, w5, w9
// (add)
        add    w0, w4, w0
// (stack-ref)
        lsl    w0, w0, 2
        ldr    w0, [x8, x0]
// (add)
        add    w2, w5, w11
// (add)
        add    w2, w7, w2
// (stack-set)
        lsl    w2, w2, 2
        str    w0, [x8, x2]
// (expr #t 2 #f (set! i (+ i 1)))
        add    w5, w5, 1
// (br l8)
        b      .memcpy_l8
.ltorg
.memcpy_l9:
// (expr #f 0 #f (return-from-procedure))
// (proc-end 6)
        mov    x3, x10
        ldr    x10, [x10, 24]
// (return)
        ldr    x30, [sp], 16
        ret
.ltorg
