// File: jamesliu516[P]amrdg2d/approx_sol.cpp
// Function: n_approx_sol(double const*, double const*, double, double, double*, int)
double n_approx_sol(const double xi[2],  const double xc[2], double dx, double dy, double *doftmp, int n )
{
    double uh;
    if(n==6) {
      uh=doftmp[0]+doftmp[1]*2.0*(xi[0]-xc[0])/dx+doftmp[2]*2.0*(xi[1]-xc[1])/dy+doftmp[3]*4.0*(xi[0]-xc[0])*(xi[1]-xc[1])/(dx*dy)
       +doftmp[4]*((xi[0]-xc[0])*(xi[0]-xc[0])*4.0/(dx*dx)-1.0/3.0) + doftmp[5]*((xi[1]-xc[1])*(xi[1]-xc[1])*4.0/(dy*dy)-1.0/3.0); 
     }
     else if(n==3) {
      uh=doftmp[0]+doftmp[1]*2.0*(xi[0]-xc[0])/dx+doftmp[2]*2.0*(xi[1]-xc[1])/dy;
     }
     else if(n==1) {
        uh=doftmp[0];
     }       
    return uh;
}

// Assembly:
movq %rdi, -0x8(%rsp)
movq %rsi, -0x10(%rsp)
movsd %xmm0, -0x18(%rsp)
movsd %xmm1, -0x20(%rsp)
movq %rdx, -0x28(%rsp)
movl %ecx, -0x2c(%rsp)
cmpl $0x6, -0x2c(%rsp)
jne 0x1f9f0
movq -0x28(%rsp), %rax
movsd (%rax), %xmm0
movq -0x28(%rsp), %rax
movsd 0x1f830(%rip), %xmm1    # 0x3f0a0
mulsd 0x8(%rax), %xmm1
movq -0x8(%rsp), %rax
movsd (%rax), %xmm2
movq -0x10(%rsp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm1
divsd -0x18(%rsp), %xmm1
addsd %xmm1, %xmm0
movq -0x28(%rsp), %rax
movsd 0x1f7fe(%rip), %xmm1    # 0x3f0a0
mulsd 0x10(%rax), %xmm1
movq -0x8(%rsp), %rax
movsd 0x8(%rax), %xmm2
movq -0x10(%rsp), %rax
subsd 0x8(%rax), %xmm2
mulsd %xmm2, %xmm1
divsd -0x20(%rsp), %xmm1
addsd %xmm1, %xmm0
movq -0x28(%rsp), %rax
movsd 0x1fe6a(%rip), %xmm1    # 0x3f740
mulsd 0x18(%rax), %xmm1
movq -0x8(%rsp), %rax
movsd (%rax), %xmm2
movq -0x10(%rsp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm1
movq -0x8(%rsp), %rax
movsd 0x8(%rax), %xmm2
movq -0x10(%rsp), %rax
subsd 0x8(%rax), %xmm2
mulsd %xmm2, %xmm1
movsd -0x18(%rsp), %xmm2
mulsd -0x20(%rsp), %xmm2
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movq -0x28(%rsp), %rax
movsd 0x20(%rax), %xmm1
movq -0x8(%rsp), %rax
movsd (%rax), %xmm2
movq -0x10(%rsp), %rax
subsd (%rax), %xmm2
movq -0x8(%rsp), %rax
movsd (%rax), %xmm3
movq -0x10(%rsp), %rax
subsd (%rax), %xmm3
mulsd %xmm3, %xmm2
movsd 0x1fde9(%rip), %xmm3    # 0x3f740
mulsd %xmm3, %xmm2
movsd -0x18(%rsp), %xmm3
mulsd -0x18(%rsp), %xmm3
divsd %xmm3, %xmm2
movsd 0x1fdc5(%rip), %xmm3    # 0x3f738
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq -0x28(%rsp), %rax
movsd 0x28(%rax), %xmm0
movq -0x8(%rsp), %rax
movsd 0x8(%rax), %xmm2
movq -0x10(%rsp), %rax
subsd 0x8(%rax), %xmm2
movq -0x8(%rsp), %rax
movsd 0x8(%rax), %xmm3
movq -0x10(%rsp), %rax
subsd 0x8(%rax), %xmm3
mulsd %xmm3, %xmm2
movsd 0x1fd83(%rip), %xmm3    # 0x3f740
mulsd %xmm3, %xmm2
movsd -0x20(%rsp), %xmm3
mulsd -0x20(%rsp), %xmm3
divsd %xmm3, %xmm2
movsd 0x1fd5f(%rip), %xmm3    # 0x3f738
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rsp)
jmp 0x1fa88
cmpl $0x3, -0x2c(%rsp)
jne 0x1fa6e
movq -0x28(%rsp), %rax
movsd (%rax), %xmm0
movq -0x28(%rsp), %rax
movsd 0x1f693(%rip), %xmm1    # 0x3f0a0
mulsd 0x8(%rax), %xmm1
movq -0x8(%rsp), %rax
movsd (%rax), %xmm2
movq -0x10(%rsp), %rax
subsd (%rax), %xmm2
mulsd %xmm2, %xmm1
divsd -0x18(%rsp), %xmm1
addsd %xmm1, %xmm0
movq -0x28(%rsp), %rax
movsd 0x1f661(%rip), %xmm1    # 0x3f0a0
mulsd 0x10(%rax), %xmm1
movq -0x8(%rsp), %rax
movsd 0x8(%rax), %xmm2
movq -0x10(%rsp), %rax
subsd 0x8(%rax), %xmm2
mulsd %xmm2, %xmm1
divsd -0x20(%rsp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rsp)
jmp 0x1fa86
cmpl $0x1, -0x2c(%rsp)
jne 0x1fa84
movq -0x28(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x38(%rsp)
jmp 0x1fa86
jmp 0x1fa88
movsd -0x38(%rsp), %xmm0
retq
nop