// File: /workspace/github_c_makefile_star2_O0/mohuangrui[P]ArtraCFD/weno5.c
// Function: WENO5
void WENO5(Real F[restrict][DIMU], Real Fhat[restrict])
{
    Real omega[R]; /* weights */
    Real q[R]; /* q vectors */
    Real IS[R]; /* smoothness measurements */
    Real alpha[R];
    const Real C[R] = {1.0 / 10.0, 6.0 / 10.0, 3.0 / 10.0};
    const Real epsilon = 1.0e-6;
    for (int r = 0; r < DIMU; ++r) {
        IS[0] = (13.0 / 12.0) * Square(F[CN-2][r] - 2.0 * F[CN-1][r] + F[CN][r]) +
            (1.0 / 4.0) * Square(F[CN-2][r] - 4.0 * F[CN-1][r] + 3.0 * F[CN][r]);
        IS[1] = (13.0 / 12.0) * Square(F[CN-1][r] - 2.0 * F[CN][r] + F[CN+1][r]) +
            (1.0 / 4.0) * Square(F[CN-1][r] - F[CN+1][r]);
        IS[2] = (13.0 / 12.0) * Square(F[CN][r] - 2.0 * F[CN+1][r] + F[CN+2][r]) +
            (1.0 / 4.0) * Square(3.0 * F[CN][r] - 4.0 * F[CN+1][r] + F[CN+2][r]);
        alpha[0] = C[0] / Square(epsilon + IS[0]);
        alpha[1] = C[1] / Square(epsilon + IS[1]);
        alpha[2] = C[2] / Square(epsilon + IS[2]);
        omega[0] = alpha[0] / (alpha[0] + alpha[1] + alpha[2]);
        omega[1] = alpha[1] / (alpha[0] + alpha[1] + alpha[2]);
        omega[2] = alpha[2] / (alpha[0] + alpha[1] + alpha[2]);
        q[0] = (1.0 / 6.0) * (2.0 * F[CN-2][r] - 7.0 * F[CN-1][r] + 11.0 * F[CN][r]);
        q[1] = (1.0 / 6.0) * (-F[CN-1][r] + 5.0 * F[CN][r] + 2.0 * F[CN+1][r]);
        q[2] = (1.0 / 6.0) * (2.0 * F[CN][r] + 5.0 * F[CN+1][r] - F[CN+2][r]);
        Fhat[r] = omega[0] * q[0] + omega[1] * q[1] + omega[2] * q[2];
    }
    return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq 0x7876(%rip), %rax      # 0x2aeb0
movq %rax, -0xb0(%rbp)
movq 0x7870(%rip), %rax      # 0x2aeb8
movq %rax, -0xa8(%rbp)
movq 0x786a(%rip), %rax      # 0x2aec0
movq %rax, -0xa0(%rbp)
movsd 0x40fb(%rip), %xmm0     # 0x27760
movsd %xmm0, -0xb8(%rbp)
movl $0x0, -0xbc(%rbp)
cmpl $0x5, -0xbc(%rbp)
jge 0x23b77
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x28(%rax,%rcx,8), %xmm1
addsd %xmm1, %xmm1
subsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
addsd 0x50(%rax,%rcx,8), %xmm0
callq 0x23b80
movsd %xmm0, -0xf0(%rbp)
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x28(%rax,%rcx,8), %xmm1
movsd 0x77ac(%rip), %xmm2     # 0x2aea0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x50(%rax,%rcx,8), %xmm0
movsd 0x7753(%rip), %xmm2     # 0x2ae68
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x23b80
movaps %xmm0, %xmm2
movsd -0xf0(%rbp), %xmm0
movsd 0x44f3(%rip), %xmm1     # 0x27c28
mulsd %xmm2, %xmm1
movsd 0x7757(%rip), %xmm2     # 0x2ae98
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x70(%rbp)
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x28(%rax,%rcx,8), %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x50(%rax,%rcx,8), %xmm1
addsd %xmm1, %xmm1
subsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
addsd 0x78(%rax,%rcx,8), %xmm0
callq 0x23b80
movsd %xmm0, -0xe8(%rbp)
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x28(%rax,%rcx,8), %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
subsd 0x78(%rax,%rcx,8), %xmm0
callq 0x23b80
movaps %xmm0, %xmm2
movsd -0xe8(%rbp), %xmm0
movsd 0x4458(%rip), %xmm1     # 0x27c28
mulsd %xmm2, %xmm1
movsd 0x76bc(%rip), %xmm2     # 0x2ae98
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x68(%rbp)
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x50(%rax,%rcx,8), %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x78(%rax,%rcx,8), %xmm1
addsd %xmm1, %xmm1
subsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
addsd 0xa0(%rax,%rcx,8), %xmm0
callq 0x23b80
movsd %xmm0, -0xe0(%rbp)
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x50(%rax,%rcx,8), %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x4088(%rip), %xmm1     # 0x278e0
mulsd 0x78(%rax,%rcx,8), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
movsd 0x75eb(%rip), %xmm2     # 0x2ae68
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
addsd 0xa0(%rax,%rcx,8), %xmm0
callq 0x23b80
movaps %xmm0, %xmm2
movsd -0xe0(%rbp), %xmm0
movsd 0x4377(%rip), %xmm1     # 0x27c28
mulsd %xmm2, %xmm1
movsd 0x75db(%rip), %xmm2     # 0x2ae98
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0xd8(%rbp)
movsd 0x3e7e(%rip), %xmm0     # 0x27760
addsd -0x70(%rbp), %xmm0
callq 0x23b80
movaps %xmm0, %xmm1
movsd -0xd8(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0x90(%rbp)
movsd -0xa8(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd 0x3e45(%rip), %xmm0     # 0x27760
addsd -0x68(%rbp), %xmm0
callq 0x23b80
movaps %xmm0, %xmm1
movsd -0xd0(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0xa0(%rbp), %xmm0
movsd %xmm0, -0xc8(%rbp)
movsd 0x3e0c(%rip), %xmm0     # 0x27760
addsd -0x60(%rbp), %xmm0
callq 0x23b80
movaps %xmm0, %xmm1
movsd -0xc8(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x90(%rbp), %xmm0
movsd -0x90(%rbp), %xmm1
addsd -0x88(%rbp), %xmm1
addsd -0x80(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x30(%rbp)
movsd -0x88(%rbp), %xmm0
movsd -0x90(%rbp), %xmm1
addsd -0x88(%rbp), %xmm1
addsd -0x80(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x80(%rbp), %xmm0
movsd -0x90(%rbp), %xmm1
addsd -0x88(%rbp), %xmm1
addsd -0x80(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x748c(%rip), %xmm1     # 0x2ae90
mulsd 0x28(%rax,%rcx,8), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
addsd %xmm0, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x50(%rax,%rcx,8), %xmm1
movsd 0x7446(%rip), %xmm2     # 0x2ae88
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x3eae(%rip), %xmm0     # 0x27900
mulsd %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x28(%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x50(%rax,%rcx,8), %xmm0
movsd 0x73e4(%rip), %xmm2     # 0x2ae80
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x78(%rax,%rcx,8), %xmm1
addsd %xmm1, %xmm1
addsd %xmm0, %xmm1
movsd 0x3e3b(%rip), %xmm0     # 0x27900
mulsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x50(%rax,%rcx,8), %xmm1
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd 0x738e(%rip), %xmm0     # 0x2ae80
mulsd 0x78(%rax,%rcx,8), %xmm0
addsd %xmm1, %xmm1
addsd %xmm0, %xmm1
movq -0x8(%rbp), %rax
movslq -0xbc(%rbp), %rcx
subsd 0xa0(%rax,%rcx,8), %xmm1
movsd 0x3de4(%rip), %xmm0     # 0x27900
mulsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x30(%rbp), %xmm1
movsd -0x50(%rbp), %xmm2
movsd -0x28(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x20(%rbp), %xmm0
movsd -0x40(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x10(%rbp), %rax
movslq -0xbc(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0xbc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xbc(%rbp)
jmp 0x23677
addq $0xf0, %rsp
popq %rbp
retq