memcpy32:
        mov   ecx, ebp
        mov   edx, edi
        sub   edx, 4 * 5
        mov   ebp, edx
        add   edi, 4 * 7
        add   edx, 4 * 6
        mov   [edx], ecx

        push  esi

; n_words LOCAL_VAR 1
; (stack-ref-n 4)
        mov   ecx, [ebp + 16]
; src_offset LOCAL_VAR 1
; (stack-ref-n 3)
        mov   eax, [ebp + 12]
; src LOCAL_VAR 1
; (stack-ref-n 2)
        mov   ebx, [ebp + 8]
; (add)
        add   ebx, eax
        shl   ebx, 2 ; ebx = ebx * 4
        mov   edx, esi ; save stack
        add   esi, ebx
; dest_offset LOCAL_VAR 1
; (stack-ref-n 1)
        mov   edi, ebp
        mov   eax, [edi + 4]
; dest LOCAL_VAR_ASSIGNMENT 1
; (stack-ref-n 0)
        mov   ebx, [edi]
; (add)
        add   eax, ebx
        shl   eax, 2 ; eax = eax * 4
        mov   edi, edx ; original stack
        add   edi, eax

        rep   movsd

        pop   esi

; (proc-end 6)
        mov   ecx, ebp
        mov   edi, ecx
        add   ecx, 4 * 6
        mov   edx, [ecx]
        mov   ebp, edx
; (return)
        ret   
