// File: /workspace/github_c_makefile_star2_O1/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:
xorl %eax, %eax
movsd 0x4725(%rip), %xmm10    # 0x1d788
movsd 0x4a5d(%rip), %xmm3     # 0x1dac8
movsd 0x7fc5(%rip), %xmm4     # 0x21038
movsd (%rdi,%rax,8), %xmm5
movsd 0x28(%rdi,%rax,8), %xmm9
movapd %xmm9, %xmm0
addsd %xmm9, %xmm0
movapd %xmm5, %xmm13
subsd %xmm0, %xmm13
movsd 0x50(%rdi,%rax,8), %xmm1
addsd %xmm1, %xmm13
mulsd %xmm13, %xmm13
movapd %xmm9, %xmm14
movapd %xmm9, %xmm6
movapd %xmm9, %xmm7
movsd 0x7f76(%rip), %xmm2     # 0x21030
mulsd %xmm2, %xmm7
addsd %xmm5, %xmm7
movapd %xmm1, %xmm0
mulsd 0x7f5a(%rip), %xmm0     # 0x21028
addsd %xmm0, %xmm7
mulsd %xmm7, %xmm7
mulsd %xmm3, %xmm7
mulsd %xmm4, %xmm13
addsd %xmm7, %xmm13
movapd %xmm1, %xmm11
addsd %xmm1, %xmm11
subsd %xmm11, %xmm14
movsd 0x78(%rdi,%rax,8), %xmm15
addsd %xmm15, %xmm14
mulsd %xmm14, %xmm14
subsd %xmm15, %xmm6
mulsd %xmm6, %xmm6
mulsd %xmm3, %xmm6
mulsd %xmm4, %xmm14
addsd %xmm6, %xmm14
movapd %xmm15, %xmm8
addsd %xmm15, %xmm8
movapd %xmm1, %xmm12
subsd %xmm8, %xmm12
movapd %xmm15, %xmm7
mulsd %xmm2, %xmm7
addsd %xmm0, %xmm7
movsd 0xa0(%rdi,%rax,8), %xmm6
addsd %xmm6, %xmm12
mulsd %xmm12, %xmm12
addsd %xmm6, %xmm7
mulsd %xmm7, %xmm7
mulsd %xmm3, %xmm7
mulsd %xmm4, %xmm12
addsd %xmm7, %xmm12
movsd 0x448b(%rip), %xmm2     # 0x1d5f8
addsd %xmm2, %xmm13
mulsd %xmm13, %xmm13
movsd 0x7ec1(%rip), %xmm7     # 0x21040
divsd %xmm13, %xmm7
addsd %xmm2, %xmm14
mulsd %xmm14, %xmm14
movsd 0x7eb2(%rip), %xmm0     # 0x21048
divsd %xmm14, %xmm0
addsd %xmm2, %xmm12
mulsd %xmm12, %xmm12
movsd 0x7ea2(%rip), %xmm13    # 0x21050
divsd %xmm12, %xmm13
movapd %xmm7, %xmm12
addsd %xmm0, %xmm12
addsd %xmm13, %xmm12
divsd %xmm12, %xmm7
divsd %xmm12, %xmm0
divsd %xmm12, %xmm13
movapd %xmm1, %xmm12
movsd 0x7e8a(%rip), %xmm2     # 0x21068
mulsd %xmm2, %xmm1
subsd %xmm9, %xmm1
mulsd 0x7e68(%rip), %xmm9     # 0x21058
addsd %xmm5, %xmm5
addsd %xmm9, %xmm5
mulsd 0x7e5e(%rip), %xmm12    # 0x21060
addsd %xmm5, %xmm12
mulsd %xmm10, %xmm12
mulsd %xmm7, %xmm12
addsd %xmm8, %xmm1
mulsd %xmm10, %xmm1
mulsd %xmm0, %xmm1
addsd %xmm12, %xmm1
mulsd %xmm2, %xmm15
addsd %xmm11, %xmm15
subsd %xmm6, %xmm15
mulsd %xmm10, %xmm15
mulsd %xmm13, %xmm15
addsd %xmm1, %xmm15
movsd %xmm15, (%rsi,%rax,8)
incq %rax
cmpq $0x5, %rax
jne 0x19073
retq