memcpy32:
        mov    %rbp, %rcx
        mov    %rdi, %rdx
        sub    $20, %rdx
        mov    %rdx, %rbp
        add    $32, %rdi
        add    $24, %rdx
        mov    %rcx, (%rdx)

        push   %rsi

# n_words LOCAL_VAR 1
# (stack-ref-n 4)
        mov    16(%rbp), %ecx
# src_offset LOCAL_VAR 1
# (stack-ref-n 3)
        mov    12(%rbp), %eax
# src LOCAL_VAR 1
# (stack-ref-n 2)
        mov    8(%rbp), %ebx
# (add)
        add    %eax, %ebx
        shl    $2, %ebx # ebx = ebx * 4
        mov    %rsi, %rdx # save stack
        add    %rbx, %rsi
# dest_offset LOCAL_VAR 1
# (stack-ref-n 1)
        mov    %rbp, %rdi
        mov    4(%rdi), %eax
# dest LOCAL_VAR_ASSIGNMENT 1
# (stack-ref-n 0)
        mov    (%rdi), %ebx
# (add)
        add    %ebx, %eax
        shl    $2, %eax # eax = eax * 4
        mov    %rdx, %rdi # original stack
        add    %rax, %rdi

        rep    movsd

        pop    %rsi

# (proc-end 6)
        mov    %rbp, %rdi
        add    $24, %rbp
        mov    (%rbp), %rbp
# (return)
        ret   
