// File: Luthaf[P]zeopp/voro++/src/cell.cc
// Function: voro::voronoicell_base::minkowski_contrib(int, int, int, double, double&, double&)
inline void voronoicell_base::minkowski_contrib(int i,int k,int m,double r,double &ar,double &vo) {
	double ix=pts[4*i],iy=pts[4*i+1],iz=pts[4*i+2],
	       kx=pts[4*k],ky=pts[4*k+1],kz=pts[4*k+2],
	       mx=pts[4*m],my=pts[4*m+1],mz=pts[4*m+2],
	       ux=kx-ix,uy=ky-iy,uz=kz-iz,vx=mx-kx,vy=my-ky,vz=mz-kz,
	       e1x=uz*vy-uy*vz,e1y=ux*vz-uz*vx,e1z=uy*vx-ux*vy,e2x,e2y,e2z,
	       wmag=e1x*e1x+e1y*e1y+e1z*e1z;
	if(wmag<tol*tol) return;
	wmag=1/sqrt(wmag);
	e1x*=wmag;e1y*=wmag;e1z*=wmag;

	// Compute second orthonormal vector
	if(fabs(e1x)>0.5) {
		e2x=-e1y;e2y=e1x;e2z=0;
	} else if(fabs(e1y)>0.5) {
		e2x=0;e2y=-e1z;e2z=e1y;
	} else {
		e2x=e1z;e2y=0;e2z=-e1x;
	}
	wmag=1/sqrt(e2x*e2x+e2y*e2y+e2z*e2z);
	e2x*=wmag;e2y*=wmag;e2z*=wmag;

	// Compute third orthonormal vector
	double e3x=e1z*e2y-e1y*e2z,
	       e3y=e1x*e2z-e1z*e2x,
	       e3z=e1y*e2x-e1x*e2y,
	       x0=e1x*ix+e1y*iy+e1z*iz;
	if(x0<tol) return;

	double ir=e2x*ix+e2y*iy+e2z*iz,is=e3x*ix+e3y*iy+e3z*iz,
	       kr=e2x*kx+e2y*ky+e2z*kz,ks=e3x*kx+e3y*ky+e3z*kz,
	       mr=e2x*mx+e2y*my+e2z*mz,ms=e3x*mx+e3y*my+e3z*mz;

	minkowski_edge(x0,ir,is,kr,ks,r,ar,vo);
	minkowski_edge(x0,kr,ks,mr,ms,r,ar,vo);
	minkowski_edge(x0,mr,ms,ir,is,r,ar,vo);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
movl %ecx, -0x14(%rbp)
movsd %xmm0, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x138(%rbp)
movq 0x40(%rax), %rcx
movl -0xc(%rbp), %edx
shll $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
movsd %xmm0, -0x38(%rbp)
movq 0x40(%rax), %rcx
movl -0xc(%rbp), %edx
shll $0x2, %edx
addl $0x1, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
movsd %xmm0, -0x40(%rbp)
movq 0x40(%rax), %rcx
movl -0xc(%rbp), %edx
shll $0x2, %edx
addl $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
movsd %xmm0, -0x48(%rbp)
movq 0x40(%rax), %rcx
movl -0x10(%rbp), %edx
shll $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
movsd %xmm0, -0x50(%rbp)
movq 0x40(%rax), %rcx
movl -0x10(%rbp), %edx
shll $0x2, %edx
addl $0x1, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
movsd %xmm0, -0x58(%rbp)
movq 0x40(%rax), %rcx
movl -0x10(%rbp), %edx
shll $0x2, %edx
addl $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
movsd %xmm0, -0x60(%rbp)
movq 0x40(%rax), %rcx
movl -0x14(%rbp), %edx
shll $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
movsd %xmm0, -0x68(%rbp)
movq 0x40(%rax), %rcx
movl -0x14(%rbp), %edx
shll $0x2, %edx
addl $0x1, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
movsd %xmm0, -0x70(%rbp)
movq 0x40(%rax), %rcx
movl -0x14(%rbp), %edx
shll $0x2, %edx
addl $0x2, %edx
movslq %edx, %rdx
movsd (%rcx,%rdx,8), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x50(%rbp), %xmm0
subsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x58(%rbp), %xmm0
subsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x60(%rbp), %xmm0
subsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movsd -0x68(%rbp), %xmm0
subsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
movsd -0x70(%rbp), %xmm0
subsd -0x58(%rbp), %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0x78(%rbp), %xmm0
subsd -0x60(%rbp), %xmm0
movsd %xmm0, -0xa8(%rbp)
movsd -0x90(%rbp), %xmm0
movsd -0xa0(%rbp), %xmm2
movsd -0x88(%rbp), %xmm1
mulsd -0xa8(%rbp), %xmm1
movq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xb0(%rbp)
movsd -0x80(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm2
movsd -0x90(%rbp), %xmm1
mulsd -0x98(%rbp), %xmm1
movq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xb8(%rbp)
movsd -0x88(%rbp), %xmm0
movsd -0x98(%rbp), %xmm2
movsd -0x80(%rbp), %xmm1
mulsd -0xa0(%rbp), %xmm1
movq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xc0(%rbp)
movsd -0xb0(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm0
mulsd -0xb8(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0xc0(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xe0(%rbp)
movsd -0xe0(%rbp), %xmm1
movsd 0x48(%rax), %xmm0
mulsd 0x48(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x162be
jmp 0x1684f
movsd -0xe0(%rbp), %xmm0
callq 0x20f0
movaps %xmm0, %xmm1
movsd 0x3fd3a(%rip), %xmm0    # 0x56010
divsd %xmm1, %xmm0
movsd %xmm0, -0xe0(%rbp)
movsd -0xe0(%rbp), %xmm0
mulsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0xb0(%rbp)
movsd -0xe0(%rbp), %xmm0
mulsd -0xb8(%rbp), %xmm0
movsd %xmm0, -0xb8(%rbp)
movsd -0xe0(%rbp), %xmm0
mulsd -0xc0(%rbp), %xmm0
movsd %xmm0, -0xc0(%rbp)
movsd -0xb0(%rbp), %xmm0
movaps 0x41337(%rip), %xmm1    # 0x57670
pand %xmm1, %xmm0
movsd 0x3fceb(%rip), %xmm1    # 0x56030
ucomisd %xmm1, %xmm0
jbe 0x16392
movsd -0xb8(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0xc8(%rbp)
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0xd8(%rbp)
jmp 0x1643b
movsd -0xb8(%rbp), %xmm0
movaps 0x412cf(%rip), %xmm1    # 0x57670
pand %xmm1, %xmm0
movsd 0x3fc83(%rip), %xmm1    # 0x56030
ucomisd %xmm1, %xmm0
jbe 0x163f7
xorps %xmm0, %xmm0
movsd %xmm0, -0xc8(%rbp)
movsd -0xc0(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0xb8(%rbp), %xmm0
movsd %xmm0, -0xd8(%rbp)
jmp 0x16439
movsd -0xc0(%rbp), %xmm0
movsd %xmm0, -0xc8(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0xb0(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0xd8(%rbp)
jmp 0x1643b
movsd -0xc8(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm2
movsd -0xd0(%rbp), %xmm0
mulsd -0xd0(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0xd8(%rbp), %xmm0
movsd -0xd8(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x20f0
movq -0x138(%rbp), %rax
movaps %xmm0, %xmm1
movsd 0x3fb7e(%rip), %xmm0    # 0x56010
divsd %xmm1, %xmm0
movsd %xmm0, -0xe0(%rbp)
movsd -0xe0(%rbp), %xmm0
mulsd -0xc8(%rbp), %xmm0
movsd %xmm0, -0xc8(%rbp)
movsd -0xe0(%rbp), %xmm0
mulsd -0xd0(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0xe0(%rbp), %xmm0
mulsd -0xd8(%rbp), %xmm0
movsd %xmm0, -0xd8(%rbp)
movsd -0xc0(%rbp), %xmm0
movsd -0xd0(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm1
mulsd -0xd8(%rbp), %xmm1
movq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xe8(%rbp)
movsd -0xb0(%rbp), %xmm0
movsd -0xd8(%rbp), %xmm2
movsd -0xc0(%rbp), %xmm1
mulsd -0xc8(%rbp), %xmm1
movq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xf0(%rbp)
movsd -0xb8(%rbp), %xmm0
movsd -0xc8(%rbp), %xmm2
movsd -0xb0(%rbp), %xmm1
mulsd -0xd0(%rbp), %xmm1
movq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
movq %rcx, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xf8(%rbp)
movsd -0xb0(%rbp), %xmm1
movsd -0x38(%rbp), %xmm2
movsd -0xb8(%rbp), %xmm0
mulsd -0x40(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0xc0(%rbp), %xmm0
movsd -0x48(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x100(%rbp)
movsd -0x100(%rbp), %xmm1
movsd 0x48(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x16612
jmp 0x1684f
movq -0x138(%rbp), %rdi
movsd -0xc8(%rbp), %xmm1
movsd -0x38(%rbp), %xmm2
movsd -0xd0(%rbp), %xmm0
mulsd -0x40(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0xd8(%rbp), %xmm0
movsd -0x48(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x108(%rbp)
movsd -0xe8(%rbp), %xmm1
movsd -0x38(%rbp), %xmm2
movsd -0xf0(%rbp), %xmm0
mulsd -0x40(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0xf8(%rbp), %xmm0
movsd -0x48(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x110(%rbp)
movsd -0xc8(%rbp), %xmm1
movsd -0x50(%rbp), %xmm2
movsd -0xd0(%rbp), %xmm0
mulsd -0x58(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0xd8(%rbp), %xmm0
movsd -0x60(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x118(%rbp)
movsd -0xe8(%rbp), %xmm1
movsd -0x50(%rbp), %xmm2
movsd -0xf0(%rbp), %xmm0
mulsd -0x58(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0xf8(%rbp), %xmm0
movsd -0x60(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x120(%rbp)
movsd -0xc8(%rbp), %xmm1
movsd -0x68(%rbp), %xmm2
movsd -0xd0(%rbp), %xmm0
mulsd -0x70(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0xd8(%rbp), %xmm0
movsd -0x78(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x128(%rbp)
movsd -0xe8(%rbp), %xmm1
movsd -0x68(%rbp), %xmm2
movsd -0xf0(%rbp), %xmm0
mulsd -0x70(%rbp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0xf8(%rbp), %xmm0
movsd -0x78(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x130(%rbp)
movsd -0x100(%rbp), %xmm0
movsd -0x108(%rbp), %xmm1
movsd -0x110(%rbp), %xmm2
movsd -0x118(%rbp), %xmm3
movsd -0x120(%rbp), %xmm4
movsd -0x20(%rbp), %xmm5
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0xa2a0
movq -0x138(%rbp), %rdi
movsd -0x100(%rbp), %xmm0
movsd -0x118(%rbp), %xmm1
movsd -0x120(%rbp), %xmm2
movsd -0x128(%rbp), %xmm3
movsd -0x130(%rbp), %xmm4
movsd -0x20(%rbp), %xmm5
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0xa2a0
movq -0x138(%rbp), %rdi
movsd -0x100(%rbp), %xmm0
movsd -0x128(%rbp), %xmm1
movsd -0x130(%rbp), %xmm2
movsd -0x108(%rbp), %xmm3
movsd -0x110(%rbp), %xmm4
movsd -0x20(%rbp), %xmm5
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0xa2a0
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
nopl (%rax,%rax)