// File: FreeSlave[P]vhlt/hlrad/lerp.cpp
// Function: TestLineSegmentIntersectWall(facetriangulation_t const*, float const*, float const*)
static bool TestLineSegmentIntersectWall (const facetriangulation_t *facetrian, const vec3_t p1, const vec3_t p2)
{
	int i;
	const facetriangulation_t::Wall *wall;
	vec_t front;
	vec_t back;
	vec_t dot1;
	vec_t dot2;
	vec_t dot;
	vec_t bottom;
	vec_t top;
	vec_t frac;

	for (i = 0; i < (int)facetrian->walls.size (); i++)
	{
		wall = &facetrian->walls[i];
		bottom = DotProduct (wall->points[0], wall->direction);
		top = DotProduct (wall->points[1], wall->direction);
		front = DotProduct (p1, wall->normal) - DotProduct (wall->points[0], wall->normal);
		back = DotProduct (p2, wall->normal) - DotProduct (wall->points[0], wall->normal);
		if (front > ON_EPSILON && back > ON_EPSILON || front < -ON_EPSILON && back < -ON_EPSILON)
		{
			continue;
		}
		dot1 = DotProduct (p1, wall->direction);
		dot2 = DotProduct (p2, wall->direction);
		if (fabs (front) <= 2 * ON_EPSILON && fabs (back) <= 2 * ON_EPSILON)
		{
			top = qmin (top, qmax (dot1, dot2));
			bottom = qmax (bottom, qmin (dot1, dot2));
		}
		else
		{
			frac = front / (front - back);
			frac = qmax (0, qmin (frac, 1));
			dot = dot1 + frac * (dot2 - dot1);
			top = qmin (top, dot);
			bottom = qmax (bottom, dot);
		}
		if (top - bottom >= -ON_EPSILON)
		{
			return true;
		}
	}

	return false;
}

// Assembly:
subq $0x88, %rsp
movq %rdi, 0x78(%rsp)
movq %rsi, 0x70(%rsp)
movq %rdx, 0x68(%rsp)
movl $0x0, 0x64(%rsp)
movl 0x64(%rsp), %eax
movl %eax, 0x34(%rsp)
movq 0x78(%rsp), %rdi
addq $0x20, %rdi
callq 0x20b20
movq %rax, %rcx
movl 0x34(%rsp), %eax
cmpl %ecx, %eax
jge 0x1e614
movq 0x78(%rsp), %rdi
addq $0x20, %rdi
movslq 0x64(%rsp), %rsi
callq 0x23330
movq %rax, 0x58(%rsp)
movq 0x58(%rsp), %rax
movss (%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x18(%rax), %xmm2
movq 0x58(%rsp), %rax
movss 0x4(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x1c(%rax), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0x58(%rsp), %rax
movss 0x8(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x20(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x40(%rsp)
movq 0x58(%rsp), %rax
movss 0xc(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x18(%rax), %xmm2
movq 0x58(%rsp), %rax
movss 0x10(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x1c(%rax), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0x58(%rsp), %rax
movss 0x14(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x20(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x3c(%rsp)
movq 0x70(%rsp), %rax
movss (%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x24(%rax), %xmm2
movq 0x70(%rsp), %rax
movss 0x4(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x28(%rax), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0x70(%rsp), %rax
movss 0x8(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x2c(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq 0x58(%rsp), %rax
movss (%rax), %xmm2
movq 0x58(%rsp), %rax
movss 0x24(%rax), %xmm3
movq 0x58(%rsp), %rax
movss 0x4(%rax), %xmm1
movq 0x58(%rsp), %rax
mulss 0x28(%rax), %xmm1
mulss %xmm3, %xmm2
addss %xmm1, %xmm2
movq 0x58(%rsp), %rax
movss 0x8(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x2c(%rax), %xmm3
mulss %xmm3, %xmm1
addss %xmm2, %xmm1
subss %xmm1, %xmm0
movss %xmm0, 0x54(%rsp)
movq 0x68(%rsp), %rax
movss (%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x24(%rax), %xmm2
movq 0x68(%rsp), %rax
movss 0x4(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x28(%rax), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0x68(%rsp), %rax
movss 0x8(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x2c(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq 0x58(%rsp), %rax
movss (%rax), %xmm2
movq 0x58(%rsp), %rax
movss 0x24(%rax), %xmm3
movq 0x58(%rsp), %rax
movss 0x4(%rax), %xmm1
movq 0x58(%rsp), %rax
mulss 0x28(%rax), %xmm1
mulss %xmm3, %xmm2
addss %xmm1, %xmm2
movq 0x58(%rsp), %rax
movss 0x8(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x2c(%rax), %xmm3
mulss %xmm3, %xmm1
addss %xmm2, %xmm1
subss %xmm1, %xmm0
movss %xmm0, 0x50(%rsp)
movss 0x54(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x4f5a0(%rip), %xmm1    # 0x6d7e0
ucomisd %xmm1, %xmm0
jbe 0x1e25e
movss 0x50(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x4f588(%rip), %xmm1    # 0x6d7e0
ucomisd %xmm1, %xmm0
ja 0x1e28e
movss 0x54(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x4f5c0(%rip), %xmm0    # 0x6d830
ucomisd %xmm1, %xmm0
jbe 0x1e293
movss 0x50(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x4f5a8(%rip), %xmm0    # 0x6d830
ucomisd %xmm1, %xmm0
jbe 0x1e293
jmp 0x1e604
movq 0x70(%rsp), %rax
movss (%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x18(%rax), %xmm2
movq 0x70(%rsp), %rax
movss 0x4(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x1c(%rax), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0x70(%rsp), %rax
movss 0x8(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x20(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x4c(%rsp)
movq 0x68(%rsp), %rax
movss (%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x18(%rax), %xmm2
movq 0x68(%rsp), %rax
movss 0x4(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x1c(%rax), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0x68(%rsp), %rax
movss 0x8(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x20(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x48(%rsp)
movss 0x54(%rsp), %xmm0
callq 0x11ce0
cvtss2sd %xmm0, %xmm1
movsd 0x4f49c(%rip), %xmm0    # 0x6d7e8
ucomisd %xmm1, %xmm0
jb 0x1e4a6
movss 0x50(%rsp), %xmm0
callq 0x11ce0
cvtss2sd %xmm0, %xmm1
movsd 0x4f47b(%rip), %xmm0    # 0x6d7e8
ucomisd %xmm1, %xmm0
jb 0x1e4a6
movss 0x3c(%rsp), %xmm0
movss %xmm0, 0x30(%rsp)
movss 0x4c(%rsp), %xmm0
ucomiss 0x48(%rsp), %xmm0
jbe 0x1e39e
movss 0x4c(%rsp), %xmm0
movss %xmm0, 0x2c(%rsp)
jmp 0x1e3aa
movss 0x48(%rsp), %xmm0
movss %xmm0, 0x2c(%rsp)
movss 0x30(%rsp), %xmm1
movss 0x2c(%rsp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x1e3c9
movss 0x3c(%rsp), %xmm0
movss %xmm0, 0x28(%rsp)
jmp 0x1e3fc
movss 0x4c(%rsp), %xmm0
ucomiss 0x48(%rsp), %xmm0
jbe 0x1e3e4
movss 0x4c(%rsp), %xmm0
movss %xmm0, 0x24(%rsp)
jmp 0x1e3f0
movss 0x48(%rsp), %xmm0
movss %xmm0, 0x24(%rsp)
movss 0x24(%rsp), %xmm0
movss %xmm0, 0x28(%rsp)
movss 0x28(%rsp), %xmm0
movss %xmm0, 0x3c(%rsp)
movss 0x40(%rsp), %xmm0
movss %xmm0, 0x20(%rsp)
movss 0x4c(%rsp), %xmm1
movss 0x48(%rsp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x1e433
movss 0x4c(%rsp), %xmm0
movss %xmm0, 0x1c(%rsp)
jmp 0x1e43f
movss 0x48(%rsp), %xmm0
movss %xmm0, 0x1c(%rsp)
movss 0x20(%rsp), %xmm0
movss 0x1c(%rsp), %xmm1
ucomiss %xmm1, %xmm0
jbe 0x1e45e
movss 0x40(%rsp), %xmm0
movss %xmm0, 0x18(%rsp)
jmp 0x1e495
movss 0x4c(%rsp), %xmm1
movss 0x48(%rsp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x1e47d
movss 0x4c(%rsp), %xmm0
movss %xmm0, 0x14(%rsp)
jmp 0x1e489
movss 0x48(%rsp), %xmm0
movss %xmm0, 0x14(%rsp)
movss 0x14(%rsp), %xmm0
movss %xmm0, 0x18(%rsp)
movss 0x18(%rsp), %xmm0
movss %xmm0, 0x40(%rsp)
jmp 0x1e5da
movss 0x54(%rsp), %xmm0
movss 0x54(%rsp), %xmm1
subss 0x50(%rsp), %xmm1
divss %xmm1, %xmm0
movss %xmm0, 0x38(%rsp)
movss 0x4bb82(%rip), %xmm0    # 0x6a04c
ucomiss 0x38(%rsp), %xmm0
jbe 0x1e4df
movss 0x38(%rsp), %xmm0
movss %xmm0, 0x10(%rsp)
jmp 0x1e4ef
movss 0x4bb65(%rip), %xmm0    # 0x6a04c
movss %xmm0, 0x10(%rsp)
jmp 0x1e4ef
movss 0x10(%rsp), %xmm1
xorps %xmm0, %xmm0
ucomiss %xmm1, %xmm0
jbe 0x1e508
xorps %xmm0, %xmm0
movss %xmm0, 0xc(%rsp)
jmp 0x1e541
movss 0x4bb3c(%rip), %xmm0    # 0x6a04c
ucomiss 0x38(%rsp), %xmm0
jbe 0x1e525
movss 0x38(%rsp), %xmm0
movss %xmm0, 0x8(%rsp)
jmp 0x1e535
movss 0x4bb1f(%rip), %xmm0    # 0x6a04c
movss %xmm0, 0x8(%rsp)
jmp 0x1e535
movss 0x8(%rsp), %xmm0
movss %xmm0, 0xc(%rsp)
movss 0xc(%rsp), %xmm0
movss %xmm0, 0x38(%rsp)
movss 0x4c(%rsp), %xmm1
movss 0x38(%rsp), %xmm0
movss 0x48(%rsp), %xmm2
subss 0x4c(%rsp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x44(%rsp)
movss 0x3c(%rsp), %xmm1
movss 0x44(%rsp), %xmm0
ucomiss %xmm1, %xmm0
jbe 0x1e592
movss 0x3c(%rsp), %xmm0
movss %xmm0, 0x4(%rsp)
jmp 0x1e59e
movss 0x44(%rsp), %xmm0
movss %xmm0, 0x4(%rsp)
movss 0x4(%rsp), %xmm0
movss %xmm0, 0x3c(%rsp)
movss 0x40(%rsp), %xmm0
ucomiss 0x44(%rsp), %xmm0
jbe 0x1e5c4
movss 0x40(%rsp), %xmm0
movss %xmm0, (%rsp)
jmp 0x1e5cf
movss 0x44(%rsp), %xmm0
movss %xmm0, (%rsp)
movss (%rsp), %xmm0
movss %xmm0, 0x40(%rsp)
movss 0x3c(%rsp), %xmm0
subss 0x40(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x4f23e(%rip), %xmm1    # 0x6d830
ucomisd %xmm1, %xmm0
jb 0x1e602
movb $0x1, 0x87(%rsp)
jmp 0x1e61c
jmp 0x1e604
movl 0x64(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x64(%rsp)
jmp 0x1e00e
movb $0x0, 0x87(%rsp)
movb 0x87(%rsp), %al
andb $0x1, %al
addq $0x88, %rsp
retq
nopl (%rax)