// File: FreeSlave[P]vhlt/common/winding.cpp
// Function: Winding::RemoveColinearPoints(double)
vec_t epsilon
#endif
											  )
{
	unsigned int	i;
	vec3_t			v1, v2;
	vec_t			*p1, *p2, *p3;
	for (i = 0; i < m_NumPoints; i++)
	{
		p1 = m_Points[(i+m_NumPoints-1)%m_NumPoints];
		p2 = m_Points[i];
		p3 = m_Points[(i+1)%m_NumPoints];
		VectorSubtract (p2, p1, v1);
		VectorSubtract (p3, p2, v2);
		// v1 or v2 might be close to 0
		if (DotProduct (v1, v2) * DotProduct (v1, v2) >= DotProduct (v1, v1) * DotProduct (v2, v2) 
			- ON_EPSILON * ON_EPSILON * (DotProduct (v1, v1) + DotProduct (v2, v2) + ON_EPSILON * ON_EPSILON))
			// v2 == k * v1 + v3 && abs (v3) < ON_EPSILON || v1 == k * v2 + v3 && abs (v3) < ON_EPSILON
		{
			m_NumPoints--;
			for (; i < m_NumPoints; i++)
			{
				VectorCopy (m_Points[i+1], m_Points[i]);
			}
			i = -1;
			continue;
		}
	}
}

// Assembly:
pushq %rax
movq %rdi, (%rsp)
movsd %xmm0, -0x8(%rsp)
movq (%rsp), %rax
movq %rax, -0x70(%rsp)
movl $0x0, -0xc(%rsp)
movq -0x70(%rsp), %rcx
movl -0xc(%rsp), %eax
cmpl 0x8(%rcx), %eax
jae 0xfcc5
movq -0x70(%rsp), %rcx
movq 0x10(%rcx), %rax
movq %rax, -0x80(%rsp)
movl -0xc(%rsp), %eax
addl 0x8(%rcx), %eax
subl $0x1, %eax
xorl %edx, %edx
divl 0x8(%rcx)
movq -0x80(%rsp), %rax
movl %edx, %edx
imulq $0x18, %rdx, %rdx
addq %rdx, %rax
movq %rax, -0x58(%rsp)
movq 0x10(%rcx), %rax
movl -0xc(%rsp), %edx
imulq $0x18, %rdx, %rdx
addq %rdx, %rax
movq %rax, -0x60(%rsp)
movq 0x10(%rcx), %rax
movq %rax, -0x78(%rsp)
movl -0xc(%rsp), %eax
addl $0x1, %eax
xorl %edx, %edx
divl 0x8(%rcx)
movq -0x78(%rsp), %rax
movl %edx, %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x68(%rsp)
movq -0x60(%rsp), %rax
movsd (%rax), %xmm0
movq -0x58(%rsp), %rax
subsd (%rax), %xmm0
movsd %xmm0, -0x30(%rsp)
movq -0x60(%rsp), %rax
movsd 0x8(%rax), %xmm0
movq -0x58(%rsp), %rax
subsd 0x8(%rax), %xmm0
movsd %xmm0, -0x28(%rsp)
movq -0x60(%rsp), %rax
movsd 0x10(%rax), %xmm0
movq -0x58(%rsp), %rax
subsd 0x10(%rax), %xmm0
movsd %xmm0, -0x20(%rsp)
movq -0x68(%rsp), %rax
movsd (%rax), %xmm0
movq -0x60(%rsp), %rax
subsd (%rax), %xmm0
movsd %xmm0, -0x50(%rsp)
movq -0x68(%rsp), %rax
movsd 0x8(%rax), %xmm0
movq -0x60(%rsp), %rax
subsd 0x8(%rax), %xmm0
movsd %xmm0, -0x48(%rsp)
movq -0x68(%rsp), %rax
movsd 0x10(%rax), %xmm0
movq -0x60(%rsp), %rax
subsd 0x10(%rax), %xmm0
movsd %xmm0, -0x40(%rsp)
movsd -0x30(%rsp), %xmm1
movsd -0x50(%rsp), %xmm2
movsd -0x28(%rsp), %xmm0
mulsd -0x48(%rsp), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x20(%rsp), %xmm0
movsd -0x40(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd -0x30(%rsp), %xmm2
movsd -0x50(%rsp), %xmm3
movsd -0x28(%rsp), %xmm1
mulsd -0x48(%rsp), %xmm1
mulsd %xmm3, %xmm2
addsd %xmm1, %xmm2
movsd -0x20(%rsp), %xmm1
movsd -0x40(%rsp), %xmm3
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd -0x30(%rsp), %xmm2
movsd -0x30(%rsp), %xmm3
movsd -0x28(%rsp), %xmm1
mulsd -0x28(%rsp), %xmm1
mulsd %xmm3, %xmm2
addsd %xmm1, %xmm2
movsd -0x20(%rsp), %xmm1
movsd -0x20(%rsp), %xmm3
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
movsd -0x50(%rsp), %xmm2
movsd -0x50(%rsp), %xmm4
movsd -0x48(%rsp), %xmm3
mulsd -0x48(%rsp), %xmm3
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
movsd -0x40(%rsp), %xmm3
movsd -0x40(%rsp), %xmm4
mulsd %xmm4, %xmm3
addsd %xmm2, %xmm3
movsd -0x8(%rsp), %xmm2
mulsd -0x8(%rsp), %xmm2
movsd -0x30(%rsp), %xmm4
movsd -0x30(%rsp), %xmm6
movsd -0x28(%rsp), %xmm5
mulsd -0x28(%rsp), %xmm5
mulsd %xmm6, %xmm4
addsd %xmm5, %xmm4
movsd -0x20(%rsp), %xmm5
movsd -0x20(%rsp), %xmm6
mulsd %xmm6, %xmm5
addsd %xmm4, %xmm5
movsd -0x50(%rsp), %xmm6
movsd -0x50(%rsp), %xmm7
movsd -0x48(%rsp), %xmm4
mulsd -0x48(%rsp), %xmm4
mulsd %xmm7, %xmm6
addsd %xmm4, %xmm6
movsd -0x40(%rsp), %xmm4
movsd -0x40(%rsp), %xmm7
mulsd %xmm7, %xmm4
addsd %xmm6, %xmm4
addsd %xmm4, %xmm5
movsd -0x8(%rsp), %xmm4
movsd -0x8(%rsp), %xmm6
mulsd %xmm6, %xmm4
addsd %xmm5, %xmm4
mulsd %xmm4, %xmm2
movq %xmm2, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm2
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jb 0xfcb3
movq -0x70(%rsp), %rax
movl 0x8(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x8(%rax)
movq -0x70(%rsp), %rcx
movl -0xc(%rsp), %eax
cmpl 0x8(%rcx), %eax
jae 0xfca9
movq -0x70(%rsp), %rax
movq 0x10(%rax), %rcx
movl -0xc(%rsp), %edx
addl $0x1, %edx
movl %edx, %edx
imulq $0x18, %rdx, %rdx
addq %rdx, %rcx
movsd (%rcx), %xmm0
movq 0x10(%rax), %rcx
movl -0xc(%rsp), %edx
imulq $0x18, %rdx, %rdx
addq %rdx, %rcx
movsd %xmm0, (%rcx)
movq 0x10(%rax), %rcx
movl -0xc(%rsp), %edx
addl $0x1, %edx
movl %edx, %edx
imulq $0x18, %rdx, %rdx
addq %rdx, %rcx
movsd 0x8(%rcx), %xmm0
movq 0x10(%rax), %rcx
movl -0xc(%rsp), %edx
imulq $0x18, %rdx, %rdx
addq %rdx, %rcx
movsd %xmm0, 0x8(%rcx)
movq 0x10(%rax), %rcx
movl -0xc(%rsp), %edx
addl $0x1, %edx
movl %edx, %edx
imulq $0x18, %rdx, %rdx
addq %rdx, %rcx
movsd 0x10(%rcx), %xmm0
movq 0x10(%rax), %rax
movl -0xc(%rsp), %ecx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movsd %xmm0, 0x10(%rax)
movl -0xc(%rsp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rsp)
jmp 0xfbfd
movl $0xffffffff, -0xc(%rsp) # imm = 0xFFFFFFFF
jmp 0xfcb5
jmp 0xfcb5
movl -0xc(%rsp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rsp)
jmp 0xf94c
popq %rax
retq
nopw (%rax,%rax)