// File: suhasjains[P]AMR-Solver/src/multigrid.cpp
// Function: amrsolver::Trilinear_interpolate(double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double)
double Trilinear_interpolate(double x0,double x1, double x2, double y0, double y1, double y2, double z0, double z1, double z2, \
				double val0, double val1, double val2, double val3, double val4, double val5, double val6, double val7) {

	double N0, N1, N2, N3, N4, N5, N6, N7;
	double result;

	N0 = ((x1-x2)*(y1-y2)*(z2-z0))/((x1-x0)*(y1-y0)*(z1-z0));
	N1 = ((x1-x2)*(y2-y0)*(z2-z0))/((x1-x0)*(y1-y0)*(z1-z0));
	N2 = ((x2-x0)*(y1-y2)*(z2-z0))/((x1-x0)*(y1-y0)*(z1-z0));
	N3 = ((x2-x0)*(y2-y0)*(z2-z0))/((x1-x0)*(y1-y0)*(z1-z0));
	N4 = ((x1-x2)*(y1-y2)*(z1-z2))/((x1-x0)*(y1-y0)*(z1-z0));
	N5 = ((x1-x2)*(y2-y0)*(z1-z2))/((x1-x0)*(y1-y0)*(z1-z0));
	N6 = ((x2-x0)*(y1-y2)*(z1-z2))/((x1-x0)*(y1-y0)*(z1-z0));
	N7 = ((x2-x0)*(y2-y0)*(z1-z2))/((x1-x0)*(y1-y0)*(z1-z0));

	result = val0*N0 + val1*N1 + val2*N2 + val3*N3 + val4*N4 + val5*N5 + val6*N6 + val7*N7;

	return result;	
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rax
movsd 0x50(%rbp), %xmm8
movsd 0x48(%rbp), %xmm8
movsd 0x40(%rbp), %xmm8
movsd 0x38(%rbp), %xmm8
movsd 0x30(%rbp), %xmm8
movsd 0x28(%rbp), %xmm8
movsd 0x20(%rbp), %xmm8
movsd 0x18(%rbp), %xmm8
movsd 0x10(%rbp), %xmm8
movsd %xmm0, -0x8(%rbp)
movsd %xmm1, -0x10(%rbp)
movsd %xmm2, -0x18(%rbp)
movsd %xmm3, -0x20(%rbp)
movsd %xmm4, -0x28(%rbp)
movsd %xmm5, -0x30(%rbp)
movsd %xmm6, -0x38(%rbp)
movsd %xmm7, -0x40(%rbp)
movsd -0x10(%rbp), %xmm0
subsd -0x18(%rbp), %xmm0
movsd -0x28(%rbp), %xmm1
subsd -0x30(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd 0x10(%rbp), %xmm1
subsd -0x38(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x10(%rbp), %xmm1
subsd -0x8(%rbp), %xmm1
movsd -0x28(%rbp), %xmm2
subsd -0x20(%rbp), %xmm2
mulsd %xmm2, %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x38(%rbp), %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x10(%rbp), %xmm0
subsd -0x18(%rbp), %xmm0
movsd -0x30(%rbp), %xmm1
subsd -0x20(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd 0x10(%rbp), %xmm1
subsd -0x38(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x10(%rbp), %xmm1
subsd -0x8(%rbp), %xmm1
movsd -0x28(%rbp), %xmm2
subsd -0x20(%rbp), %xmm2
mulsd %xmm2, %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x38(%rbp), %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x18(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
movsd -0x28(%rbp), %xmm1
subsd -0x30(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd 0x10(%rbp), %xmm1
subsd -0x38(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x10(%rbp), %xmm1
subsd -0x8(%rbp), %xmm1
movsd -0x28(%rbp), %xmm2
subsd -0x20(%rbp), %xmm2
mulsd %xmm2, %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x38(%rbp), %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x18(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
movsd -0x30(%rbp), %xmm1
subsd -0x20(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd 0x10(%rbp), %xmm1
subsd -0x38(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x10(%rbp), %xmm1
subsd -0x8(%rbp), %xmm1
movsd -0x28(%rbp), %xmm2
subsd -0x20(%rbp), %xmm2
mulsd %xmm2, %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x38(%rbp), %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x10(%rbp), %xmm0
subsd -0x18(%rbp), %xmm0
movsd -0x28(%rbp), %xmm1
subsd -0x30(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x40(%rbp), %xmm1
subsd 0x10(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x10(%rbp), %xmm1
subsd -0x8(%rbp), %xmm1
movsd -0x28(%rbp), %xmm2
subsd -0x20(%rbp), %xmm2
mulsd %xmm2, %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x38(%rbp), %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x10(%rbp), %xmm0
subsd -0x18(%rbp), %xmm0
movsd -0x30(%rbp), %xmm1
subsd -0x20(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x40(%rbp), %xmm1
subsd 0x10(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x10(%rbp), %xmm1
subsd -0x8(%rbp), %xmm1
movsd -0x28(%rbp), %xmm2
subsd -0x20(%rbp), %xmm2
mulsd %xmm2, %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x38(%rbp), %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x18(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
movsd -0x28(%rbp), %xmm1
subsd -0x30(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x40(%rbp), %xmm1
subsd 0x10(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x10(%rbp), %xmm1
subsd -0x8(%rbp), %xmm1
movsd -0x28(%rbp), %xmm2
subsd -0x20(%rbp), %xmm2
mulsd %xmm2, %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x38(%rbp), %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x18(%rbp), %xmm0
subsd -0x8(%rbp), %xmm0
movsd -0x30(%rbp), %xmm1
subsd -0x20(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x40(%rbp), %xmm1
subsd 0x10(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x10(%rbp), %xmm1
subsd -0x8(%rbp), %xmm1
movsd -0x28(%rbp), %xmm2
subsd -0x20(%rbp), %xmm2
mulsd %xmm2, %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0x38(%rbp), %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x80(%rbp)
movsd 0x18(%rbp), %xmm0
movsd -0x48(%rbp), %xmm2
movsd 0x20(%rbp), %xmm1
mulsd -0x50(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0x28(%rbp), %xmm1
movsd -0x58(%rbp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x30(%rbp), %xmm0
movsd -0x60(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0x38(%rbp), %xmm1
movsd -0x68(%rbp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x40(%rbp), %xmm0
movsd -0x70(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0x48(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x50(%rbp), %xmm0
movsd -0x80(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x88(%rbp), %xmm0
addq $0x8, %rsp
popq %rbp
retq
nopl (%rax)