// File: /workspace/github_cpp_makefile_star2_O3/Luthaf[P]zeopp/voro++/src/cell.cc
// Function: voro::voronoicell_base::minkowski_formula(double, double, double, double, double&, double&)
void voronoicell_base::minkowski_formula(double x0,double y0,double z0,double r,double &ar,double &vo) {
	const double pi=3.1415926535897932384626433832795;
	if(fabs(z0)<tol) return;
	double si;
	if(z0<0) {z0=-z0;si=-1;} else si=1;
	if(y0<0) {y0=-y0;si=-si;}
	double xs=x0*x0,ys=y0*y0,zs=z0*z0,res=xs+ys,rvs=res+zs,theta=atan(z0/y0),rs=r*r,rc=rs*r,temp,voc,arc;
	if(r<x0) {
		temp=2*theta-0.5*pi-asin((zs*xs-ys*rvs)/(res*(ys+zs)));
		voc=rc/6.*temp;
		arc=rs*0.5*temp;
	} else if(rs<res*1.0000000001) {
		temp=0.5*pi+asin((zs*xs-ys*rvs)/(res*(ys+zs)));
		voc=theta*0.5*(rs*x0-xs*x0/3.)-rc/6.*temp;
		arc=theta*x0*r-rs*0.5*temp;
	} else if(rs<rvs) {
		temp=theta-pi*0.5+asin(y0/sqrt(rs-xs));
		double temp2=(rs*x0-xs*x0/3.),
		       x2s=rs*xs/res,y2s=rs*ys/res,
		       temp3=asin((x2s-y2s-xs)/(rs-xs)),
		       temp4=asin((zs*xs-ys*rvs)/(res*(ys+zs))),
		       temp5=sqrt(rs-res);
		voc=0.5*temp*temp2+x0*y0/6.*temp5+r*rs/6*(temp3-temp4);
		arc=x0*r*temp-0.5*temp2*y0*r/((rs-xs)*temp5)+x0*y0/6.*r/temp5+rs*0.5*temp3+rs*rs/3.*2*xs*ys/(res*(rs-xs)*sqrt((rs-xs)*(rs-xs)-(x2s-y2s-xs)*(x2s-y2s-xs)))-rs*0.5*temp4;
	} else {
		voc=x0*y0*z0/6.;
		arc=0;
	}
	vo+=voc*si;
	ar+=arc*si;
}

// Assembly:
movapd %xmm0, %xmm5
movapd 0x2fe5c(%rip), %xmm0    # 0x388f0
andpd %xmm2, %xmm0
movsd 0x48(%rdi), %xmm4
ucomisd %xmm0, %xmm4
ja 0x90ab
pushq %r14
pushq %rbx
subq $0xf8, %rsp
movq %rdx, %r14
movq %rsi, %rbx
movapd 0x2e581(%rip), %xmm0    # 0x37040
movapd %xmm2, %xmm7
xorpd %xmm0, %xmm7
xorl %eax, %eax
ucomisd %xmm2, %xmm7
seta %al
maxsd %xmm2, %xmm7
movapd %xmm1, %xmm6
xorpd %xmm0, %xmm6
leaq 0x2fe1d(%rip), %rcx     # 0x38900
movsd (%rcx,%rax,8), %xmm2
xorpd %xmm2, %xmm0
movsd %xmm3, 0x8(%rsp)
movapd %xmm1, %xmm4
cmpltsd %xmm6, %xmm4
movapd %xmm4, %xmm3
andnpd %xmm2, %xmm3
andpd %xmm0, %xmm4
orpd %xmm3, %xmm4
movapd %xmm4, 0xe0(%rsp)
maxsd %xmm1, %xmm6
movapd %xmm5, %xmm0
unpcklpd %xmm6, %xmm0            # xmm0 = xmm0[0],xmm6[0]
mulpd %xmm0, %xmm0
movapd %xmm7, %xmm2
mulsd %xmm7, %xmm2
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
movapd %xmm1, 0x90(%rsp)
movapd %xmm0, 0x20(%rsp)
addsd %xmm0, %xmm1
movapd %xmm1, 0x30(%rsp)
movapd %xmm2, 0xb0(%rsp)
addsd %xmm2, %xmm1
movapd %xmm1, 0x40(%rsp)
movapd %xmm7, 0x80(%rsp)
movapd %xmm7, %xmm0
movapd %xmm6, 0xa0(%rsp)
divsd %xmm6, %xmm0
movapd %xmm5, 0x60(%rsp)
callq 0x2100
movapd 0x60(%rsp), %xmm3
movsd 0x8(%rsp), %xmm2
movapd %xmm2, %xmm1
mulsd %xmm2, %xmm1
movapd %xmm1, %xmm5
mulsd %xmm2, %xmm5
ucomisd %xmm2, %xmm3
jbe 0x8c42
addsd %xmm0, %xmm0
addsd 0x2feb9(%rip), %xmm0    # 0x38a70
movsd %xmm0, (%rsp)
movapd 0x90(%rsp), %xmm4
movapd 0x40(%rsp), %xmm6
mulsd %xmm4, %xmm6
movapd 0xb0(%rsp), %xmm3
addsd %xmm3, %xmm4
movapd 0x20(%rsp), %xmm2
mulsd %xmm3, %xmm2
subsd %xmm6, %xmm2
movapd 0x30(%rsp), %xmm3
mulsd %xmm4, %xmm3
divsd %xmm3, %xmm2
movapd %xmm2, %xmm0
movapd %xmm1, 0x10(%rsp)
movapd %xmm5, 0x70(%rsp)
callq 0x2210
movapd 0x10(%rsp), %xmm4
movsd (%rsp), %xmm1
subsd %xmm0, %xmm1
movapd 0x70(%rsp), %xmm13
divsd 0x2fe3c(%rip), %xmm13   # 0x38a68
mulsd %xmm1, %xmm13
mulsd 0x2e3f7(%rip), %xmm4    # 0x37030
mulsd %xmm1, %xmm4
jmp 0x907d
movsd %xmm0, (%rsp)
movsd 0x2fe11(%rip), %xmm0    # 0x38a60
movapd 0x30(%rsp), %xmm4
mulsd %xmm4, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x8d2a
movapd 0x90(%rsp), %xmm6
movapd 0x40(%rsp), %xmm7
mulsd %xmm6, %xmm7
movapd 0xb0(%rsp), %xmm0
addsd %xmm0, %xmm6
mulsd 0x20(%rsp), %xmm0
subsd %xmm7, %xmm0
mulsd %xmm6, %xmm4
divsd %xmm4, %xmm0
movapd %xmm1, 0x10(%rsp)
movapd %xmm5, 0x70(%rsp)
callq 0x2210
movapd 0x10(%rsp), %xmm4
addsd 0x2fddc(%rip), %xmm0    # 0x38a90
movsd 0x2e374(%rip), %xmm1    # 0x37030
movapd 0x60(%rsp), %xmm5
movapd 0x20(%rsp), %xmm2
mulsd %xmm5, %xmm2
divsd 0x2fda4(%rip), %xmm2    # 0x38a78
movapd %xmm2, %xmm6
movsd (%rsp), %xmm3
mulsd %xmm3, %xmm1
movapd %xmm4, %xmm2
mulsd %xmm5, %xmm2
addsd %xmm6, %xmm2
mulsd %xmm1, %xmm2
movapd 0x70(%rsp), %xmm13
divsd 0x2fd97(%rip), %xmm13   # 0x38a98
mulsd %xmm0, %xmm13
addsd %xmm2, %xmm13
mulsd %xmm5, %xmm3
mulsd 0x2fd69(%rip), %xmm4    # 0x38a80
mulsd %xmm0, %xmm4
mulsd 0x8(%rsp), %xmm3
addsd %xmm3, %xmm4
jmp 0x907d
movapd 0x40(%rsp), %xmm0
ucomisd %xmm1, %xmm0
movapd 0x20(%rsp), %xmm0
jbe 0x8d7a
movsd (%rsp), %xmm2
addsd 0x2fd27(%rip), %xmm2    # 0x38a70
movsd %xmm2, (%rsp)
movapd %xmm1, 0x10(%rsp)
subsd %xmm0, %xmm1
xorpd %xmm0, %xmm0
ucomisd %xmm0, %xmm1
movapd %xmm5, 0x70(%rsp)
movapd %xmm1, 0x80(%rsp)
jb 0x8da6
xorps %xmm0, %xmm0
sqrtsd %xmm1, %xmm0
jmp 0x8daf
movapd 0xa0(%rsp), %xmm0
mulsd %xmm3, %xmm0
mulsd 0x80(%rsp), %xmm0
divsd 0x2fcd0(%rip), %xmm0    # 0x38a68
xorpd %xmm4, %xmm4
movapd %xmm0, %xmm13
jmp 0x907d
movapd %xmm1, %xmm0
callq 0x20f0
movapd 0xa0(%rsp), %xmm1
divsd %xmm0, %xmm1
movapd %xmm1, %xmm0
callq 0x2210
movapd 0x20(%rsp), %xmm2
movapd %xmm2, %xmm1
movapd %xmm2, %xmm4
movapd 0x60(%rsp), %xmm2
mulsd %xmm2, %xmm1
divsd 0x2fc93(%rip), %xmm1    # 0x38a78
movsd (%rsp), %xmm3
addsd %xmm0, %xmm3
movsd %xmm3, (%rsp)
movapd 0x10(%rsp), %xmm3
movapd %xmm3, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movapd %xmm0, 0xc0(%rsp)
movapd %xmm3, %xmm1
unpcklpd %xmm3, %xmm1            # xmm1 = xmm1[0],xmm3[0]
mulpd %xmm4, %xmm1
movapd 0x30(%rsp), %xmm0
unpcklpd %xmm0, %xmm0            # xmm0 = xmm0[0,0]
divpd %xmm0, %xmm1
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
subsd %xmm0, %xmm1
subsd %xmm4, %xmm1
movapd %xmm1, 0xd0(%rsp)
movapd %xmm1, %xmm0
divsd 0x80(%rsp), %xmm0
callq 0x2210
movsd %xmm0, 0x58(%rsp)
movapd 0x90(%rsp), %xmm0
movapd 0x40(%rsp), %xmm2
mulsd %xmm0, %xmm2
movapd %xmm0, %xmm1
movapd 0xb0(%rsp), %xmm0
addsd %xmm0, %xmm1
mulsd 0x20(%rsp), %xmm0
subsd %xmm2, %xmm0
mulsd 0x30(%rsp), %xmm1
divsd %xmm1, %xmm0
callq 0x2210
movapd 0x30(%rsp), %xmm6
movapd 0x10(%rsp), %xmm4
movapd %xmm0, %xmm10
movapd %xmm4, %xmm0
subsd %xmm6, %xmm0
ucomisd 0x2fbe9(%rip), %xmm0    # 0x38aa0
movsd %xmm10, 0x40(%rsp)
jb 0x8ec6
sqrtsd %xmm0, %xmm0
jmp 0x8ede
callq 0x20f0
movsd 0x40(%rsp), %xmm10
movapd 0x30(%rsp), %xmm6
movapd 0x10(%rsp), %xmm4
movsd 0x2e149(%rip), %xmm12   # 0x37030
movsd (%rsp), %xmm7
movapd %xmm7, %xmm14
mulsd %xmm12, %xmm14
movapd 0xa0(%rsp), %xmm8
movapd %xmm8, %xmm1
movapd 0x60(%rsp), %xmm5
mulsd %xmm5, %xmm1
movsd 0x2fb51(%rip), %xmm2    # 0x38a68
divsd %xmm2, %xmm1
movapd %xmm1, %xmm3
mulsd %xmm0, %xmm3
movapd 0xc0(%rsp), %xmm11
mulsd %xmm11, %xmm14
addsd %xmm3, %xmm14
movapd 0x70(%rsp), %xmm3
divsd %xmm2, %xmm3
movsd 0x58(%rsp), %xmm9
movapd %xmm9, %xmm13
subsd %xmm10, %xmm13
mulsd 0x2fb25(%rip), %xmm11   # 0x38a80
mulsd %xmm3, %xmm13
mulsd %xmm8, %xmm11
movapd 0x80(%rsp), %xmm8
movapd %xmm8, %xmm2
mulsd %xmm0, %xmm2
movsd 0x8(%rsp), %xmm3
mulsd %xmm3, %xmm11
divsd %xmm2, %xmm11
mulsd %xmm3, %xmm5
mulsd %xmm7, %xmm5
addsd %xmm11, %xmm5
mulsd %xmm3, %xmm1
divsd %xmm0, %xmm1
addsd %xmm5, %xmm1
mulsd %xmm4, %xmm12
mulsd %xmm12, %xmm9
addsd %xmm1, %xmm9
mulsd %xmm4, %xmm4
divsd 0x2facc(%rip), %xmm4    # 0x38a88
addsd %xmm4, %xmm4
mulsd 0x20(%rsp), %xmm4
mulsd 0x90(%rsp), %xmm4
mulsd %xmm8, %xmm6
movapd 0xd0(%rsp), %xmm0
mulsd %xmm0, %xmm0
mulsd %xmm8, %xmm8
subsd %xmm0, %xmm8
xorpd %xmm0, %xmm0
ucomisd %xmm0, %xmm8
jb 0x9000
xorps %xmm0, %xmm0
sqrtsd %xmm8, %xmm0
jmp 0x9061
movapd %xmm8, %xmm0
movapd %xmm4, 0x10(%rsp)
movapd %xmm6, 0x30(%rsp)
movsd %xmm9, 0x58(%rsp)
movsd %xmm12, 0x20(%rsp)
movsd %xmm13, 0x60(%rsp)
movsd %xmm14, 0x8(%rsp)
callq 0x20f0
movsd 0x8(%rsp), %xmm14
movsd 0x60(%rsp), %xmm13
movsd 0x20(%rsp), %xmm12
movsd 0x40(%rsp), %xmm10
movsd 0x58(%rsp), %xmm9
movapd 0x30(%rsp), %xmm6
movapd 0x10(%rsp), %xmm4
mulsd %xmm0, %xmm6
divsd %xmm6, %xmm4
addsd %xmm9, %xmm4
addsd %xmm14, %xmm13
mulsd %xmm10, %xmm12
subsd %xmm12, %xmm4
movapd 0xe0(%rsp), %xmm0
mulsd %xmm0, %xmm13
addsd (%r14), %xmm13
movsd %xmm13, (%r14)
mulsd %xmm0, %xmm4
addsd (%rbx), %xmm4
movsd %xmm4, (%rbx)
addq $0xf8, %rsp
popq %rbx
popq %r14
retq