call _xamarin_get_frame_length # r12 holds the amount of stack space we need movq %rax, %r12 # first align stack requirement to 16 bytes addq $15,%r12 shrq $4,%r12 salq $4,%r12 # then make space for the arguments subq %r12, %rsp # copy arguments from old location in the stack to new location in the stack # %rcx will hold the amount of bytes left to copy # %rsi the current src location # %rdi the current dst location movq %r12, %rcx # rcx = frame_length leaq 16(%rbp),%rsi # rsi = address of first argument we got movq %rsp,%rdi # rdi = address of the bottom of the stack L_start: cmpq $0,%rcx # je L_end # while (left != 0) { subq $8,%rcx # len -= 8 movq (%rsi,%rcx),%rax # tmp = src [len] movq %rax,(%rdi,%rcx) # dst [len] = tmp jmp L_start # } L_end: movq -16(%rbp), %rdi movq -24(%rbp), %rsi movq -32(%rbp), %rdx movq -40(%rbp), %rcx movq -48(%rbp), %r8 movq -56(%rbp), %r9 movq -64(%rbp), %rax /* skip 8 bytes so that this is 16-byte aligned */ movaps -80(%rbp), %xmm0 movaps -96(%rbp), %xmm1 movaps -112(%rbp), %xmm2 movaps -128(%rbp), %xmm3 movaps -144(%rbp), %xmm4 movaps -160(%rbp), %xmm5 movaps -176(%rbp), %xmm6 movaps -192(%rbp), %xmm7