// File: jamesliu516[P]amrdg2d/hllc.cpp
// Function: GLF_flux(conservedvariables&, conservedvariables&, pointxy&, double*)
void GLF_flux(SHBL &wl, SHBL &wr, PXYZ &nml, double flxface[4])  
{
    JBBL ul,ur;
    double vnl,vnr;
    double tzmax;
    
	shblToJbbl(&wl, &ul);
	shblToJbbl(&wr, &ur);

    vnl=ul.u*nml.x+ul.v*nml.y;
    vnr=ur.u*nml.x+ur.v*nml.y;
    if(fabs(nml.x)<1e-7) tzmax=max_cv_y;
    if(fabs(nml.y)<1e-7) tzmax=max_cv_x;

    flxface[0]=0.5*(wl.q*vnl+wr.q*vnr-tzmax*(wr.q-wl.q));
    flxface[1]=0.5*(wl.qu*vnl+nml.x*ul.p
        +wr.qu*vnr+nml.x*ur.p-tzmax*(wr.qu-wl.qu));
    flxface[2]=0.5*(wl.qv*vnl+nml.y*ul.p
        +wr.qv*vnr+nml.y*ur.p-tzmax*(wr.qv-wl.qv));

    flxface[3]=0.5*((wl.te+ul.p)*vnl + (wr.te+ur.p)*vnr
        - tzmax*(wr.te-wl.te));
}

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x70(%rsp)
movq %rsi, 0x68(%rsp)
movq %rdx, 0x60(%rsp)
movq %rcx, 0x58(%rsp)
leaq 0x38(%rsp), %rdi
callq 0x6530
leaq 0x18(%rsp), %rdi
callq 0x6530
movq 0x70(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x21ad0
movq 0x68(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x21ad0
movsd 0x40(%rsp), %xmm0
movq 0x60(%rsp), %rax
movsd (%rax), %xmm2
movsd 0x48(%rsp), %xmm1
movq 0x60(%rsp), %rax
mulsd 0x8(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x10(%rsp)
movsd 0x20(%rsp), %xmm0
movq 0x60(%rsp), %rax
movsd (%rax), %xmm2
movsd 0x28(%rsp), %xmm1
movq 0x60(%rsp), %rax
mulsd 0x8(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x8(%rsp)
movq 0x60(%rsp), %rax
movsd (%rax), %xmm1
movaps 0x1c0cc(%rip), %xmm0    # 0x3f200
pand %xmm0, %xmm1
movsd 0x1c658(%rip), %xmm0    # 0x3f798
ucomisd %xmm1, %xmm0
jbe 0x23156
leaq 0x2d883(%rip), %rax     # 0x509d0
movsd (%rax), %xmm0
movsd %xmm0, (%rsp)
movq 0x60(%rsp), %rax
movsd 0x8(%rax), %xmm1
movaps 0x1c099(%rip), %xmm0    # 0x3f200
pand %xmm0, %xmm1
movsd 0x1c625(%rip), %xmm0    # 0x3f798
ucomisd %xmm1, %xmm0
jbe 0x23189
leaq 0x2d848(%rip), %rax     # 0x509c8
movsd (%rax), %xmm0
movsd %xmm0, (%rsp)
movq 0x70(%rsp), %rax
movsd (%rax), %xmm0
movsd 0x10(%rsp), %xmm2
movq 0x68(%rsp), %rax
movsd (%rax), %xmm1
mulsd 0x8(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd (%rsp), %xmm1
movq 0x68(%rsp), %rax
movsd (%rax), %xmm2
movq 0x70(%rsp), %rax
subsd (%rax), %xmm2
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x1bf53(%rip), %xmm0    # 0x3f140
mulsd %xmm1, %xmm0
movq 0x58(%rsp), %rax
movsd %xmm0, (%rax)
movq 0x70(%rsp), %rax
movsd 0x8(%rax), %xmm0
movsd 0x10(%rsp), %xmm2
movq 0x60(%rsp), %rax
movsd (%rax), %xmm1
mulsd 0x50(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x68(%rsp), %rax
movsd 0x8(%rax), %xmm1
movsd 0x8(%rsp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0x60(%rsp), %rax
movsd (%rax), %xmm0
movsd 0x30(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd (%rsp), %xmm1
movq 0x68(%rsp), %rax
movsd 0x8(%rax), %xmm2
movq 0x70(%rsp), %rax
subsd 0x8(%rax), %xmm2
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x1beb0(%rip), %xmm0    # 0x3f140
mulsd %xmm1, %xmm0
movq 0x58(%rsp), %rax
movsd %xmm0, 0x8(%rax)
movq 0x70(%rsp), %rax
movsd 0x10(%rax), %xmm0
movsd 0x10(%rsp), %xmm2
movq 0x60(%rsp), %rax
movsd 0x8(%rax), %xmm1
mulsd 0x50(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x68(%rsp), %rax
movsd 0x10(%rax), %xmm1
movsd 0x8(%rsp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0x60(%rsp), %rax
movsd 0x8(%rax), %xmm0
movsd 0x30(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd (%rsp), %xmm1
movq 0x68(%rsp), %rax
movsd 0x10(%rax), %xmm2
movq 0x70(%rsp), %rax
subsd 0x10(%rax), %xmm2
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x1be0a(%rip), %xmm0    # 0x3f140
mulsd %xmm1, %xmm0
movq 0x58(%rsp), %rax
movsd %xmm0, 0x10(%rax)
movq 0x70(%rsp), %rax
movsd 0x18(%rax), %xmm0
addsd 0x50(%rsp), %xmm0
movsd 0x10(%rsp), %xmm2
movq 0x68(%rsp), %rax
movsd 0x18(%rax), %xmm1
addsd 0x30(%rsp), %xmm1
mulsd 0x8(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd (%rsp), %xmm1
movq 0x68(%rsp), %rax
movsd 0x18(%rax), %xmm2
movq 0x70(%rsp), %rax
subsd 0x18(%rax), %xmm2
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x1bd88(%rip), %xmm0    # 0x3f140
mulsd %xmm1, %xmm0
movq 0x58(%rsp), %rax
movsd %xmm0, 0x18(%rax)
addq $0x78, %rsp
retq
nopl (%rax,%rax)