// File: mouda[P]LTE_random_access-simulate/ap.cpp
// Function: alglib_impl::is_symmetric_rec_diag_stat(alglib_impl::x_matrix*, long, long, bool*, double*, double*, alglib_impl::ae_state*)
static void is_symmetric_rec_diag_stat(x_matrix *a, ae_int_t offset, ae_int_t len, ae_bool *nonfinite, double *mx, double *err, ae_state *_state)
{
    double *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_symmetric_rec_diag_stat(a, offset, n1, nonfinite, mx, err, _state);
        is_symmetric_rec_diag_stat(a, offset+n1, n2, nonfinite, mx, err, _state);
        is_symmetric_rec_off_stat(a, offset+n1, offset, n2, n1, nonfinite, mx, err, _state);
        return;
    }
    
    /* base case */
    p = (double*)(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,_state) || !ae_isfinite(*prow,_state) )
            {
                *nonfinite = ae_true;
            }
            else
            {
                v = fabs(*pcol);
                *mx =  *mx>v ? *mx : v;
                v = fabs(*prow);
                *mx =  *mx>v ? *mx : v;
                v = fabs(*pcol-*prow);
                *err = *err>v ? *err : v;
            }
        }
        v = fabs(p[i+i*a->stride]);
        *mx =  *mx>v ? *mx : 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 0x3cfc6
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 0x3cef0
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 0x3cef0
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 0x52320
jmp 0x3d22b
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x10(%rbp), %rcx
movq -0x8(%rbp), %rdx
imulq 0x10(%rdx), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x10(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq $0x0, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpq -0x18(%rbp), %rax
jge 0x3d22b
movq -0x38(%rbp), %rax
movq -0x58(%rbp), %rcx
shlq $0x3, %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 $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq $0x0, -0x60(%rbp)
movq -0x60(%rbp), %rax
cmpq -0x58(%rbp), %rax
jge 0x3d1af
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movq 0x10(%rbp), %rdi
callq 0x3c730
testb $0x1, %al
jne 0x3d063
jmp 0x3d078
movq -0x40(%rbp), %rax
movsd (%rax), %xmm0
movq 0x10(%rbp), %rdi
callq 0x3c730
testb $0x1, %al
jne 0x3d084
movq -0x20(%rbp), %rax
movb $0x1, (%rax)
jmp 0x3d17c
movq -0x48(%rbp), %rax
movsd (%rax), %xmm0
movaps 0x1b01d(%rip), %xmm1    # 0x580b0
pand %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
ucomisd -0x50(%rbp), %xmm0
jbe 0x3d0ba
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x78(%rbp)
jmp 0x3d0c4
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
movaps 0x1afd0(%rip), %xmm1    # 0x580b0
pand %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
ucomisd -0x50(%rbp), %xmm0
jbe 0x3d107
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x80(%rbp)
jmp 0x3d111
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
movaps 0x1af7b(%rip), %xmm1    # 0x580b0
pand %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
ucomisd -0x50(%rbp), %xmm0
jbe 0x3d15f
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x88(%rbp)
jmp 0x3d16c
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x88(%rbp), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x3d17e
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
shlq $0x3, %rax
addq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x40(%rbp)
jmp 0x3d03e
movq -0x38(%rbp), %rax
movq -0x58(%rbp), %rcx
movq -0x58(%rbp), %rdx
movq -0x8(%rbp), %rsi
imulq 0x10(%rsi), %rdx
addq %rdx, %rcx
movsd (%rax,%rcx,8), %xmm0
movaps 0x1aedd(%rip), %xmm1    # 0x580b0
pand %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
ucomisd -0x50(%rbp), %xmm0
jbe 0x3d1fd
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x90(%rbp)
jmp 0x3d20a
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movsd -0x90(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
jmp 0x3cff9
addq $0xb0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)