// File: /workspace/github_cpp_makefile_star2_O1/mouda[P]LTE_random_access-simulate/ap.cpp
// Function: alglib_impl::_ialglib_mm22(double, double const*, double const*, long, double, double*, long, long)
void _ialglib_mm22(double alpha, const double *a, const double *b, ae_int_t k, double beta, double *r, ae_int_t stride, ae_int_t store_mode)
{
    double v00, v01, v10, v11;
    ae_int_t t;
    v00 = 0.0;
    v01 = 0.0;
    v10 = 0.0;
    v11 = 0.0;
    for(t=0; t<k; t++)
    {
        v00 += a[0]*b[0];
        v01 += a[0]*b[1];
        v10 += a[1]*b[0];
        v11 += a[1]*b[1];
        a+=2;
        b+=2;
    }
    if( store_mode==0 )
    {
        if( beta==0 )
        {
            r[0] = alpha*v00;
            r[1] = alpha*v01;
            r[stride+0] = alpha*v10;
            r[stride+1] = alpha*v11;
        }
        else
        {
            r[0] = beta*r[0] + alpha*v00;
            r[1] = beta*r[1] + alpha*v01;
            r[stride+0] = beta*r[stride+0] + alpha*v10;
            r[stride+1] = beta*r[stride+1] + alpha*v11;
        }
        return;
    }
    if( store_mode==1 )
    {
        if( beta==0 )
        {
            r[0] = alpha*v00;
            r[1] = alpha*v01;
        }
        else
        {
            r[0] = beta*r[0] + alpha*v00;
            r[1] = beta*r[1] + alpha*v01;
        }
        return;
    }
    if( store_mode==2 )
    {
        if( beta==0 )
        {
            r[0] =alpha*v00;
            r[stride+0] = alpha*v10;
        }
        else
        {
            r[0] = beta*r[0] + alpha*v00; 
            r[stride+0] = beta*r[stride+0] + alpha*v10;
        }
        return;
    }
    if( store_mode==3 )
    {
        if( beta==0 )
        {
            r[0] = alpha*v00;
        }
        else
        {
            r[0] = beta*r[0] + alpha*v00;
        }
        return;
    }
}

// Assembly:
testq %rdx, %rdx
jle 0x328e6
xorpd %xmm5, %xmm5
xorl %eax, %eax
xorpd %xmm3, %xmm3
xorpd %xmm4, %xmm4
xorpd %xmm2, %xmm2
movsd (%rsi,%rax), %xmm6
movsd 0x8(%rsi,%rax), %xmm7
movsd (%rdi,%rax), %xmm8
movsd 0x8(%rdi,%rax), %xmm9
movapd %xmm8, %xmm10
mulsd %xmm6, %xmm10
addsd %xmm10, %xmm2
mulsd %xmm7, %xmm8
addsd %xmm8, %xmm4
mulsd %xmm9, %xmm6
addsd %xmm6, %xmm3
mulsd %xmm7, %xmm9
addsd %xmm9, %xmm5
addq $0x10, %rax
decq %rdx
jne 0x32897
jmp 0x328f6
xorpd %xmm2, %xmm2
xorpd %xmm4, %xmm4
xorpd %xmm3, %xmm3
xorpd %xmm5, %xmm5
cmpq $0x3, %r9
ja 0x32986
leaq 0x47c9(%rip), %rax      # 0x370d0
movslq (%rax,%r9,4), %rdx
addq %rax, %rdx
jmpq *%rdx
xorpd %xmm6, %xmm6
mulsd %xmm0, %xmm2
ucomisd %xmm6, %xmm1
jne 0x329d2
jp 0x329d2
movsd %xmm2, (%rcx)
mulsd %xmm0, %xmm4
movsd %xmm4, 0x8(%rcx)
mulsd %xmm0, %xmm3
movsd %xmm3, (%rcx,%r8,8)
mulsd %xmm0, %xmm5
movsd %xmm5, 0x8(%rcx,%r8,8)
retq
xorpd %xmm4, %xmm4
mulsd %xmm0, %xmm2
ucomisd %xmm4, %xmm1
jne 0x329ad
jp 0x329ad
movsd %xmm2, (%rcx)
mulsd %xmm0, %xmm3
movsd %xmm3, (%rcx,%r8,8)
retq
xorpd %xmm3, %xmm3
mulsd %xmm0, %xmm2
ucomisd %xmm3, %xmm1
jne 0x3297a
jnp 0x32982
mulsd (%rcx), %xmm1
addsd %xmm1, %xmm2
movsd %xmm2, (%rcx)
retq
xorpd %xmm3, %xmm3
mulsd %xmm0, %xmm2
ucomisd %xmm3, %xmm1
jne 0x32a27
jp 0x32a27
movsd %xmm2, (%rcx)
mulsd %xmm0, %xmm4
movsd %xmm4, 0x8(%rcx)
retq
movsd (%rcx), %xmm4
mulsd %xmm1, %xmm4
addsd %xmm2, %xmm4
movsd %xmm4, (%rcx)
mulsd %xmm0, %xmm3
mulsd (%rcx,%r8,8), %xmm1
addsd %xmm3, %xmm1
movsd %xmm1, (%rcx,%r8,8)
retq
movsd (%rcx), %xmm6
mulsd %xmm1, %xmm6
addsd %xmm2, %xmm6
movsd %xmm6, (%rcx)
mulsd %xmm0, %xmm4
movsd 0x8(%rcx), %xmm2
mulsd %xmm1, %xmm2
addsd %xmm4, %xmm2
movsd %xmm2, 0x8(%rcx)
mulsd %xmm0, %xmm3
movsd (%rcx,%r8,8), %xmm2
mulsd %xmm1, %xmm2
addsd %xmm3, %xmm2
movsd %xmm2, (%rcx,%r8,8)
mulsd %xmm0, %xmm5
mulsd 0x8(%rcx,%r8,8), %xmm1
addsd %xmm5, %xmm1
movsd %xmm1, 0x8(%rcx,%r8,8)
retq
movsd (%rcx), %xmm3
mulsd %xmm1, %xmm3
addsd %xmm2, %xmm3
movsd %xmm3, (%rcx)
mulsd %xmm0, %xmm4
mulsd 0x8(%rcx), %xmm1
addsd %xmm4, %xmm1
movsd %xmm1, 0x8(%rcx)
retq