// File: FreeSlave[P]vhlt/hlrad/lightmap.cpp
// Function: FindBestEdge(samplefraginfo_t*, samplefrag_s*&, samplefragedge_t*&)
static bool FindBestEdge (samplefraginfo_t *info, samplefrag_t *&bestfrag, samplefragedge_t *&bestedge)
{
	samplefrag_t *f;
	samplefragedge_t *e;
	bool found;

	found = false;

	for (f = info->head; f; f = f->next)
	{
		for (e = f->edges; e < f->edges + f->numedges; e++)
		{
			if (e->tried)
			{
				continue;
			}

			bool better;

			if (!found)
			{
				better = true;
			}
			else if ((e->flippedangle < Q_PI + NORMAL_EPSILON) != (bestedge->flippedangle < Q_PI + NORMAL_EPSILON))
			{
				better = ((e->flippedangle < Q_PI + NORMAL_EPSILON) && !(bestedge->flippedangle < Q_PI + NORMAL_EPSILON));
			}
			else if (e->noseam != bestedge->noseam)
			{
				better = (e->noseam && !bestedge->noseam);
			}
			else if (fabs (e->distance - bestedge->distance) > ON_EPSILON)
			{
				better = (e->distance < bestedge->distance);
			}
			else if (fabs (e->distancereduction - bestedge->distancereduction) > ON_EPSILON)
			{
				better = (e->distancereduction > bestedge->distancereduction);
			}
			else
			{
				better = e->edgenum < bestedge->edgenum;
			}

			if (better)
			{
				found = true;
				bestfrag = f;
				bestedge = e;
			}
		}
	}

	return found;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq %rsi, 0x28(%rsp)
movq %rdx, 0x20(%rsp)
movb $0x0, 0xf(%rsp)
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x18(%rsp)
cmpq $0x0, 0x18(%rsp)
je 0x432cf
movq 0x18(%rsp), %rax
movq 0x180(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq 0x18(%rsp), %rcx
movq 0x180(%rcx), %rcx
movq 0x18(%rsp), %rdx
movslq 0x17c(%rdx), %rdx
imulq $0xa8, %rdx, %rdx
addq %rdx, %rcx
cmpq %rcx, %rax
jae 0x432bb
movq 0x10(%rsp), %rax
testb $0x1, 0xc(%rax)
je 0x430b3
jmp 0x432a6
testb $0x1, 0xf(%rsp)
jne 0x430c4
movb $0x1, 0xe(%rsp)
jmp 0x4327e
movq 0x10(%rsp), %rax
movss 0x40(%rax), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x2a746(%rip), %xmm0    # 0x6d820
ucomisd %xmm1, %xmm0
seta %al
andb $0x1, %al
movzbl %al, %eax
movq 0x20(%rsp), %rcx
movq (%rcx), %rcx
movss 0x40(%rcx), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x2a721(%rip), %xmm0    # 0x6d820
ucomisd %xmm1, %xmm0
seta %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
je 0x43167
movq 0x10(%rsp), %rax
movss 0x40(%rax), %xmm0
cvtss2sd %xmm0, %xmm1
xorl %eax, %eax
movsd 0x2a6f8(%rip), %xmm0    # 0x6d820
ucomisd %xmm1, %xmm0
movb %al, 0xd(%rsp)
jbe 0x43158
movq 0x20(%rsp), %rax
movq (%rax), %rax
movss 0x40(%rax), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x2a6d5(%rip), %xmm0    # 0x6d820
ucomisd %xmm1, %xmm0
seta %al
xorb $-0x1, %al
movb %al, 0xd(%rsp)
movb 0xd(%rsp), %al
andb $0x1, %al
movb %al, 0xe(%rsp)
jmp 0x4327c
movq 0x10(%rsp), %rax
movb 0x34(%rax), %al
andb $0x1, %al
movzbl %al, %eax
movq 0x20(%rsp), %rcx
movq (%rcx), %rcx
movb 0x34(%rcx), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
je 0x431ba
movq 0x10(%rsp), %rcx
xorl %eax, %eax
testb $0x1, 0x34(%rcx)
movb %al, 0xc(%rsp)
je 0x431ab
movq 0x20(%rsp), %rax
movq (%rax), %rax
movb 0x34(%rax), %al
xorb $-0x1, %al
movb %al, 0xc(%rsp)
movb 0xc(%rsp), %al
andb $0x1, %al
movb %al, 0xe(%rsp)
jmp 0x4327a
movq 0x10(%rsp), %rax
movss 0x38(%rax), %xmm0
movq 0x20(%rsp), %rax
movq (%rax), %rax
subss 0x38(%rax), %xmm0
callq 0x11ce0
cvtss2sd %xmm0, %xmm0
movsd 0x2a5fe(%rip), %xmm1    # 0x6d7e0
ucomisd %xmm1, %xmm0
jbe 0x4320d
movq 0x10(%rsp), %rax
movss 0x38(%rax), %xmm1
movq 0x20(%rsp), %rax
movq (%rax), %rax
movss 0x38(%rax), %xmm0
ucomiss %xmm1, %xmm0
seta %al
andb $0x1, %al
movb %al, 0xe(%rsp)
jmp 0x43278
movq 0x10(%rsp), %rax
movss 0x3c(%rax), %xmm0
movq 0x20(%rsp), %rax
movq (%rax), %rax
subss 0x3c(%rax), %xmm0
callq 0x11ce0
cvtss2sd %xmm0, %xmm0
movsd 0x2a5ab(%rip), %xmm1    # 0x6d7e0
ucomisd %xmm1, %xmm0
jbe 0x4325c
movq 0x10(%rsp), %rax
movss 0x3c(%rax), %xmm0
movq 0x20(%rsp), %rax
movq (%rax), %rax
ucomiss 0x3c(%rax), %xmm0
seta %al
andb $0x1, %al
movb %al, 0xe(%rsp)
jmp 0x43276
movq 0x10(%rsp), %rax
movl (%rax), %eax
movq 0x20(%rsp), %rcx
movq (%rcx), %rcx
cmpl (%rcx), %eax
setl %al
andb $0x1, %al
movb %al, 0xe(%rsp)
jmp 0x43278
jmp 0x4327a
jmp 0x4327c
jmp 0x4327e
testb $0x1, 0xe(%rsp)
je 0x432a4
movb $0x1, 0xf(%rsp)
movq 0x18(%rsp), %rcx
movq 0x28(%rsp), %rax
movq %rcx, (%rax)
movq 0x10(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, (%rax)
jmp 0x432a6
movq 0x10(%rsp), %rax
addq $0xa8, %rax
movq %rax, 0x10(%rsp)
jmp 0x43073
jmp 0x432bd
movq 0x18(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x18(%rsp)
jmp 0x43056
movb 0xf(%rsp), %al
andb $0x1, %al
addq $0x38, %rsp
retq
nopw (%rax,%rax)