// File: mouda[P]LTE_random_access-simulate/ap.cpp
// Function: alglib_impl::is_hermitian_rec_diag_stat(alglib_impl::x_matrix*, long, long, bool*, double*, double*, alglib_impl::ae_state*)
static void is_hermitian_rec_diag_stat(x_matrix *a, ae_int_t offset, ae_int_t len, ae_bool *nonfinite, double *mx, double *err, ae_state *_state)
{
    ae_complex *p, *prow, *pcol;
    double v;
    ae_int_t i, j;
    
    /* try to split problem into two smaller ones */
    if( len>x_nb )
    {
        ae_int_t n1, n2;
        x_split_length(len, x_nb, &n1, &n2);
        is_hermitian_rec_diag_stat(a, offset, n1, nonfinite, mx, err, _state);
        is_hermitian_rec_diag_stat(a, offset+n1, n2, nonfinite, mx, err, _state);
        is_hermitian_rec_off_stat(a, offset+n1, offset, n2, n1, nonfinite, mx, err, _state);
        return;
    }
    
    /* base case */
    p = (ae_complex*)(a->ptr)+offset*a->stride+offset;
    for(i=0; i<len; i++)
    {
        pcol = p+i;
        prow = p+i*a->stride;
        for(j=0; j<i; j++,pcol+=a->stride,prow++)
        {
            if( !ae_isfinite(pcol->x, _state) || !ae_isfinite(pcol->y, _state) || !ae_isfinite(prow->x, _state) || !ae_isfinite(prow->y, _state) )
            {
                *nonfinite = ae_true;
            }
            else
            {
                v = x_safepythag2(pcol->x, pcol->y);
                *mx =  *mx>v ? *mx : v;
                v = x_safepythag2(prow->x, prow->y);
                *mx =  *mx>v ? *mx : v;
                v = x_safepythag2(pcol->x-prow->x, pcol->y+prow->y);
                *err = *err>v ? *err : v;
            }
        }
        if( !ae_isfinite(p[i+i*a->stride].x, _state) || !ae_isfinite(p[i+i*a->stride].y, _state) )
        {
            *nonfinite = ae_true;
        }
        else
        {
            v = fabs(p[i+i*a->stride].x);
            *mx =  *mx>v ? *mx : v;
            v = fabs(p[i+i*a->stride].y);
            *err =  *err>v ? *err : v;
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq 0x10(%rbp), %rax
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 $0x10, -0x18(%rbp)
jle 0x3d406
movq -0x18(%rbp), %rdi
movl $0x10, %esi
leaq -0x68(%rbp), %rdx
leaq -0x70(%rbp), %rcx
callq 0x52220
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x68(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
movq 0x10(%rbp), %rax
movq %rax, (%rsp)
callq 0x3d330
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
addq -0x68(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
movq 0x10(%rbp), %rax
movq %rax, (%rsp)
callq 0x3d330
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
addq -0x68(%rbp), %rsi
movq -0x10(%rbp), %rdx
movq -0x70(%rbp), %rcx
movq -0x68(%rbp), %r8
movq -0x20(%rbp), %r9
movq -0x28(%rbp), %r11
movq -0x30(%rbp), %r10
movq 0x10(%rbp), %rax
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x526d0
jmp 0x3d796
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x10(%rbp), %rcx
movq -0x8(%rbp), %rdx
imulq 0x10(%rdx), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq -0x10(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq $0x0, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x18(%rbp), %rax
jge 0x3d796
movq -0x38(%rbp), %rax
movq -0x58(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rax
movq -0x58(%rbp), %rcx
movq -0x8(%rbp), %rdx
imulq 0x10(%rdx), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq $0x0, -0x60(%rbp)
movq -0x60(%rbp), %rax
cmpq -0x58(%rbp), %rax
jge 0x3d631
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movq 0x10(%rbp), %rdi
callq 0x3c730
testb $0x1, %al
jne 0x3d4a3
jmp 0x3d4e8
movq -0x48(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq 0x10(%rbp), %rdi
callq 0x3c730
testb $0x1, %al
jne 0x3d4bb
jmp 0x3d4e8
movq -0x40(%rbp), %rax
movsd (%rax), %xmm0
movq 0x10(%rbp), %rdi
callq 0x3c730
testb $0x1, %al
jne 0x3d4d2
jmp 0x3d4e8
movq -0x40(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq 0x10(%rbp), %rdi
callq 0x3c730
testb $0x1, %al
jne 0x3d4f4
movq -0x20(%rbp), %rax
movb $0x1, (%rax)
jmp 0x3d5fe
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movq -0x48(%rbp), %rax
movsd 0x8(%rax), %xmm1
callq 0x52ac0
movsd %xmm0, -0x50(%rbp)
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
ucomisd -0x50(%rbp), %xmm0
jbe 0x3d52d
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x78(%rbp)
jmp 0x3d537
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x78(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x40(%rbp), %rax
movsd (%rax), %xmm0
movq -0x40(%rbp), %rax
movsd 0x8(%rax), %xmm1
callq 0x52ac0
movsd %xmm0, -0x50(%rbp)
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
ucomisd -0x50(%rbp), %xmm0
jbe 0x3d57d
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x80(%rbp)
jmp 0x3d587
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movq -0x40(%rbp), %rax
subsd (%rax), %xmm0
movq -0x48(%rbp), %rax
movsd 0x8(%rax), %xmm1
movq -0x40(%rbp), %rax
addsd 0x8(%rax), %xmm1
callq 0x52ac0
movsd %xmm0, -0x50(%rbp)
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
ucomisd -0x50(%rbp), %xmm0
jbe 0x3d5e1
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x88(%rbp)
jmp 0x3d5ee
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x88(%rbp), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x3d600
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
shlq $0x4, %rax
addq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x40(%rbp)
jmp 0x3d47e
movq -0x38(%rbp), %rax
movq -0x58(%rbp), %rcx
movq -0x58(%rbp), %rdx
movq -0x8(%rbp), %rsi
imulq 0x10(%rsi), %rdx
addq %rdx, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movsd (%rax), %xmm0
movq 0x10(%rbp), %rdi
callq 0x3c730
testb $0x1, %al
jne 0x3d663
jmp 0x3d694
movq -0x38(%rbp), %rax
movq -0x58(%rbp), %rcx
movq -0x58(%rbp), %rdx
movq -0x8(%rbp), %rsi
imulq 0x10(%rsi), %rdx
addq %rdx, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movsd 0x8(%rax), %xmm0
movq 0x10(%rbp), %rdi
callq 0x3c730
testb $0x1, %al
jne 0x3d6a0
movq -0x20(%rbp), %rax
movb $0x1, (%rax)
jmp 0x3d783
movq -0x38(%rbp), %rax
movq -0x58(%rbp), %rcx
movq -0x58(%rbp), %rdx
movq -0x8(%rbp), %rsi
imulq 0x10(%rsi), %rdx
addq %rdx, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movsd (%rax), %xmm0
movaps 0x1a9e6(%rip), %xmm1    # 0x580b0
pand %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
ucomisd -0x50(%rbp), %xmm0
jbe 0x3d6f4
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x90(%rbp)
jmp 0x3d701
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movsd -0x90(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x38(%rbp), %rax
movq -0x58(%rbp), %rcx
movq -0x58(%rbp), %rdx
movq -0x8(%rbp), %rsi
imulq 0x10(%rsi), %rdx
addq %rdx, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movsd 0x8(%rax), %xmm0
movaps 0x1a974(%rip), %xmm1    # 0x580b0
pand %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
ucomisd -0x50(%rbp), %xmm0
jbe 0x3d766
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x98(%rbp)
jmp 0x3d773
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
movsd -0x98(%rbp), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x3d785
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
jmp 0x3d439
addq $0xb0, %rsp
popq %rbp
retq
nop