// File: Luthaf[P]zeopp/voro++/src/unitcell.cc
// Function: voro::unitcell::intersects_image(double, double, double, double&)
bool unitcell::intersects_image(double dx,double dy,double dz,double &vol) {
	const double bxinv=1/bx,byinv=1/by,bzinv=1/bz,ivol=bxinv*byinv*bzinv;
	voronoicell c;
	c=unit_voro;
	dx*=2;dy*=2;dz*=2;
	if(!c.plane(0,0,bzinv,dz+1)) return false;
	if(!c.plane(0,0,-bzinv,-dz+1)) return false;
	if(!c.plane(0,byinv,-byz*byinv*bzinv,dy+1)) return false;
	if(!c.plane(0,-byinv,byz*byinv*bzinv,-dy+1)) return false;
	if(!c.plane(bxinv,-bxy*bxinv*byinv,(bxy*byz-by*bxz)*ivol,dx+1)) return false;
	if(!c.plane(-bxinv,bxy*bxinv*byinv,(-bxy*byz+by*bxz)*ivol,-dx+1)) return false;
	vol=c.volume()*ivol;
	return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x170, %rsp            # imm = 0x170
movq %rdi, -0x10(%rbp)
movsd %xmm0, -0x18(%rbp)
movsd %xmm1, -0x20(%rbp)
movsd %xmm2, -0x28(%rbp)
movq %rsi, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x158(%rbp)
movsd (%rax), %xmm2
movsd 0x2ca7(%rip), %xmm0     # 0x56010
movaps %xmm0, %xmm1
divsd %xmm2, %xmm1
movsd %xmm1, -0x38(%rbp)
movsd 0x10(%rax), %xmm2
movaps %xmm0, %xmm1
divsd %xmm2, %xmm1
movsd %xmm1, -0x40(%rbp)
movsd 0x28(%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x38(%rbp), %xmm0
movsd -0x40(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x48(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
leaq -0x138(%rbp), %rdi
movq %rdi, -0x150(%rbp)
callq 0x54220
movq -0x158(%rbp), %rsi
movq -0x150(%rbp), %rdi
addq $0x30, %rsi
callq 0x499d0
jmp 0x533dc
movsd -0x18(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x20(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x28(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x28(%rbp)
movsd -0x48(%rbp), %xmm2
movsd -0x28(%rbp), %xmm3
movsd 0x2bf8(%rip), %xmm0     # 0x56010
addsd %xmm0, %xmm3
leaq -0x138(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x54260
movb %al, -0x159(%rbp)
jmp 0x53436
movb -0x159(%rbp), %al
testb $0x1, %al
jne 0x53478
jmp 0x53442
movb $0x0, -0x1(%rbp)
movl $0x1, -0x148(%rbp)
jmp 0x53716
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x140(%rbp)
movl %eax, -0x144(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x6810
jmp 0x53730
movaps 0x2bc1(%rip), %xmm0     # 0x56040
movsd -0x48(%rbp), %xmm2
pxor %xmm0, %xmm2
movsd -0x28(%rbp), %xmm0
movsd 0x2b7b(%rip), %xmm3     # 0x56010
subsd %xmm0, %xmm3
leaq -0x138(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x54260
movb %al, -0x15a(%rbp)
jmp 0x534b3
movb -0x15a(%rbp), %al
testb $0x1, %al
jne 0x534d2
jmp 0x534bf
movb $0x0, -0x1(%rbp)
movl $0x1, -0x148(%rbp)
jmp 0x53716
movq -0x158(%rbp), %rax
movsd -0x40(%rbp), %xmm1
movsd 0x20(%rax), %xmm2
movaps 0x2b56(%rip), %xmm0     # 0x56040
pxor %xmm0, %xmm2
mulsd %xmm1, %xmm2
movsd -0x48(%rbp), %xmm0
mulsd %xmm0, %xmm2
movsd -0x20(%rbp), %xmm3
movsd 0x2b08(%rip), %xmm0     # 0x56010
addsd %xmm0, %xmm3
leaq -0x138(%rbp), %rdi
xorps %xmm0, %xmm0
callq 0x54260
movb %al, -0x15b(%rbp)
jmp 0x53523
movb -0x15b(%rbp), %al
testb $0x1, %al
jne 0x53542
jmp 0x5352f
movb $0x0, -0x1(%rbp)
movl $0x1, -0x148(%rbp)
jmp 0x53716
movq -0x158(%rbp), %rax
movsd -0x40(%rbp), %xmm0
movaps %xmm0, %xmm1
movaps 0x2ae8(%rip), %xmm2     # 0x56040
pxor %xmm2, %xmm1
movsd 0x20(%rax), %xmm2
mulsd %xmm0, %xmm2
movsd -0x48(%rbp), %xmm0
mulsd %xmm0, %xmm2
movsd -0x20(%rbp), %xmm0
movsd 0x2a95(%rip), %xmm3     # 0x56010
subsd %xmm0, %xmm3
leaq -0x138(%rbp), %rdi
xorps %xmm0, %xmm0
callq 0x54260
movb %al, -0x15c(%rbp)
jmp 0x53596
movb -0x15c(%rbp), %al
testb $0x1, %al
jne 0x535b5
jmp 0x535a2
movb $0x0, -0x1(%rbp)
movl $0x1, -0x148(%rbp)
jmp 0x53716
movq -0x158(%rbp), %rax
movsd -0x38(%rbp), %xmm0
movsd 0x8(%rax), %xmm2
movsd 0x10(%rax), %xmm3
movaps %xmm2, %xmm1
movaps 0x2a6b(%rip), %xmm4     # 0x56040
pxor %xmm4, %xmm1
mulsd %xmm0, %xmm1
movsd -0x40(%rbp), %xmm4
mulsd %xmm4, %xmm1
movsd 0x20(%rax), %xmm4
movsd 0x18(%rax), %xmm5
mulsd %xmm5, %xmm3
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
movsd -0x50(%rbp), %xmm3
mulsd %xmm3, %xmm2
movsd -0x18(%rbp), %xmm3
movsd 0x29fe(%rip), %xmm4     # 0x56010
addsd %xmm4, %xmm3
leaq -0x138(%rbp), %rdi
callq 0x54260
movb %al, -0x15d(%rbp)
jmp 0x5362a
movb -0x15d(%rbp), %al
testb $0x1, %al
jne 0x53649
jmp 0x53636
movb $0x0, -0x1(%rbp)
movl $0x1, -0x148(%rbp)
jmp 0x53716
movq -0x158(%rbp), %rax
movsd -0x38(%rbp), %xmm4
movaps %xmm4, %xmm0
movaps 0x29e1(%rip), %xmm1     # 0x56040
pxor %xmm1, %xmm0
movsd 0x8(%rax), %xmm3
movsd 0x10(%rax), %xmm2
movaps %xmm3, %xmm1
mulsd %xmm4, %xmm1
movsd -0x40(%rbp), %xmm4
mulsd %xmm4, %xmm1
movsd 0x20(%rax), %xmm4
movsd 0x18(%rax), %xmm5
mulsd %xmm5, %xmm2
mulsd %xmm4, %xmm3
subsd %xmm3, %xmm2
movsd -0x50(%rbp), %xmm3
mulsd %xmm3, %xmm2
movsd -0x18(%rbp), %xmm4
movsd 0x2967(%rip), %xmm3     # 0x56010
subsd %xmm4, %xmm3
leaq -0x138(%rbp), %rdi
callq 0x54260
movb %al, -0x15e(%rbp)
jmp 0x536c1
movb -0x15e(%rbp), %al
testb $0x1, %al
jne 0x536dd
jmp 0x536cd
movb $0x0, -0x1(%rbp)
movl $0x1, -0x148(%rbp)
jmp 0x53716
leaq -0x138(%rbp), %rdi
callq 0x9c90
movsd %xmm0, -0x168(%rbp)
jmp 0x536f3
movsd -0x168(%rbp), %xmm0
mulsd -0x50(%rbp), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
movb $0x1, -0x1(%rbp)
movl $0x1, -0x148(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x6810
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x170, %rsp            # imm = 0x170
popq %rbp
retq
movq -0x140(%rbp), %rdi
callq 0x2220
nopl (%rax)