// File: hzeller[P]gcode-multi-shell-extrude/third_party/clipper.cpp
// Function: ClipperLib::GetOverlapSegment(ClipperLib::IntPoint, ClipperLib::IntPoint, ClipperLib::IntPoint, ClipperLib::IntPoint, ClipperLib::IntPoint&, ClipperLib::IntPoint&)
bool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a,
  IntPoint pt2b, IntPoint &pt1, IntPoint &pt2)
{
  //precondition: segments are Collinear.
  if (Abs(pt1a.X - pt1b.X) > Abs(pt1a.Y - pt1b.Y))
  {
    if (pt1a.X > pt1b.X) SwapPoints(pt1a, pt1b);
    if (pt2a.X > pt2b.X) SwapPoints(pt2a, pt2b);
    if (pt1a.X > pt2a.X) pt1 = pt1a; else pt1 = pt2a;
    if (pt1b.X < pt2b.X) pt2 = pt1b; else pt2 = pt2b;
    return pt1.X < pt2.X;
  } else
  {
    if (pt1a.Y < pt1b.Y) SwapPoints(pt1a, pt1b);
    if (pt2a.Y < pt2b.Y) SwapPoints(pt2a, pt2b);
    if (pt1a.Y < pt2a.Y) pt1 = pt1a; else pt1 = pt2a;
    if (pt1b.Y > pt2b.Y) pt2 = pt1b; else pt2 = pt2b;
    return pt1.Y > pt2.Y;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
leaq 0x10(%rbp), %rax
movq %rax, -0x48(%rbp)
movq %rdi, -0x18(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x28(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x38(%rbp)
movq %r9, -0x30(%rbp)
movq -0x18(%rbp), %rdi
subq -0x28(%rbp), %rdi
callq 0x20680
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rdi
subq -0x20(%rbp), %rdi
callq 0x20680
movq %rax, %rcx
movq -0x40(%rbp), %rax
cmpq %rcx, %rax
jle 0x12204
movq -0x18(%rbp), %rax
cmpq -0x28(%rbp), %rax
jle 0x12165
leaq -0x18(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x120a0
movq -0x48(%rbp), %rcx
movq -0x38(%rbp), %rax
cmpq (%rcx), %rax
jle 0x1217f
movq -0x48(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x120a0
movq -0x18(%rbp), %rax
cmpq -0x38(%rbp), %rax
jle 0x1219e
movq 0x20(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rcx
movq %rcx, 0x8(%rax)
jmp 0x121b1
movq 0x20(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rcx, (%rax)
movq -0x30(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x48(%rbp), %rcx
movq -0x28(%rbp), %rax
cmpq (%rcx), %rax
jge 0x121d3
movq 0x28(%rbp), %rax
movq -0x28(%rbp), %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rcx
movq %rcx, 0x8(%rax)
jmp 0x121e9
movq -0x48(%rbp), %rcx
movq 0x28(%rbp), %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movq 0x20(%rbp), %rax
movq (%rax), %rax
movq 0x28(%rbp), %rcx
cmpq (%rcx), %rax
setl %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x122b9
movq -0x10(%rbp), %rax
cmpq -0x20(%rbp), %rax
jge 0x1221b
leaq -0x18(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x120a0
movq -0x48(%rbp), %rcx
movq -0x30(%rbp), %rax
cmpq 0x8(%rcx), %rax
jge 0x12236
movq -0x48(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x120a0
movq -0x10(%rbp), %rax
cmpq -0x30(%rbp), %rax
jge 0x12255
movq 0x20(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rcx
movq %rcx, 0x8(%rax)
jmp 0x12268
movq 0x20(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rcx, (%rax)
movq -0x30(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x48(%rbp), %rcx
movq -0x20(%rbp), %rax
cmpq 0x8(%rcx), %rax
jle 0x1228b
movq 0x28(%rbp), %rax
movq -0x28(%rbp), %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rcx
movq %rcx, 0x8(%rax)
jmp 0x122a1
movq -0x48(%rbp), %rcx
movq 0x28(%rbp), %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movq 0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
setg %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)