// File: mouda[P]LTE_random_access-simulate/ap.cpp
// Function: alglib_impl::_ialglib_mcopyunblock_complex(long, long, double const*, long, alglib_impl::ae_complex*, long)
void _ialglib_mcopyunblock_complex(ae_int_t m, ae_int_t n, const double *a, ae_int_t op, ae_complex* b, ae_int_t stride)
{
    ae_int_t i, j;
    const double *psrc;
    ae_complex *pdst;
    if( op==0 )
    {
        for(i=0,psrc=a; i<m; i++,a+=alglib_twice_c_block,b+=stride,psrc=a)
            for(j=0,pdst=b; j<n; j++,pdst++,psrc+=2)
            {
                pdst->x = psrc[0];
                pdst->y = psrc[1];
            }
    }
    if( op==1 )
    {
        for(i=0,psrc=a; i<m; i++,a+=2,b+=stride,psrc=a)
            for(j=0,pdst=b; j<n; j++,pdst++,psrc+=alglib_twice_c_block)
            {
                pdst->x = psrc[0];
                pdst->y = psrc[1];
            }
    }
    if( op==2 )
    {
        for(i=0,psrc=a; i<m; i++,a+=2,b+=stride,psrc=a)
            for(j=0,pdst=b; j<n; j++,pdst++,psrc+=alglib_twice_c_block)
            {
                pdst->x = psrc[0];
                pdst->y = -psrc[1];
            }
    }
    if( op==3 )
    {
        for(i=0,psrc=a; i<m; i++,a+=alglib_twice_c_block,b+=stride,psrc=a)
            for(j=0,pdst=b; j<n; j++,pdst++,psrc+=2)
            {
                pdst->x = psrc[0];
                pdst->y = -psrc[1];
            }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x4e862
movq $0x0, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x8(%rbp), %rax
jge 0x4e860
movq $0x0, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x40(%rbp), %rax
cmpq -0x10(%rbp), %rax
jge 0x4e827
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movq -0x50(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x48(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x50(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
movq -0x50(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x48(%rbp)
jmp 0x4e7d5
jmp 0x4e829
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
addq $0x180, %rax            # imm = 0x180
movq %rax, -0x18(%rbp)
movq -0x30(%rbp), %rax
shlq $0x4, %rax
addq -0x28(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
jmp 0x4e7b7
jmp 0x4e862
cmpq $0x1, -0x20(%rbp)
jne 0x4e928
movq $0x0, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x8(%rbp), %rax
jge 0x4e926
movq $0x0, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x40(%rbp), %rax
cmpq -0x10(%rbp), %rax
jge 0x4e8ef
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movq -0x50(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x48(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x50(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
movq -0x50(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
addq $0x180, %rax            # imm = 0x180
movq %rax, -0x48(%rbp)
jmp 0x4e89b
jmp 0x4e8f1
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x18(%rbp)
movq -0x30(%rbp), %rax
shlq $0x4, %rax
addq -0x28(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
jmp 0x4e87d
jmp 0x4e928
cmpq $0x2, -0x20(%rbp)
jne 0x4ea05
movq $0x0, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x8(%rbp), %rax
jge 0x4ea03
movq $0x0, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x40(%rbp), %rax
cmpq -0x10(%rbp), %rax
jge 0x4e9cc
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movq -0x50(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x48(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movq -0x50(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
movq -0x50(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
addq $0x180, %rax            # imm = 0x180
movq %rax, -0x48(%rbp)
jmp 0x4e961
jmp 0x4e9ce
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x18(%rbp)
movq -0x30(%rbp), %rax
shlq $0x4, %rax
addq -0x28(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
jmp 0x4e943
jmp 0x4ea05
cmpq $0x3, -0x20(%rbp)
jne 0x4eae2
movq $0x0, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x8(%rbp), %rax
jge 0x4eae0
movq $0x0, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x40(%rbp), %rax
cmpq -0x10(%rbp), %rax
jge 0x4eaa7
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movq -0x50(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x48(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movq -0x50(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
movq -0x50(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x48(%rbp)
jmp 0x4ea3e
jmp 0x4eaa9
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
addq $0x180, %rax            # imm = 0x180
movq %rax, -0x18(%rbp)
movq -0x30(%rbp), %rax
shlq $0x4, %rax
addq -0x28(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
jmp 0x4ea20
jmp 0x4eae2
popq %rbp
retq
nopw %cs:(%rax,%rax)