// File: /workspace/github_cpp_makefile_star2_O1/hzeller[P]gcode-multi-shell-extrude/third_party/clipper.cpp
// Function: ClipperLib::ClipperOffset::DoSquare(int, int)
void ClipperOffset::DoSquare(int j, int k)
{
  double dx = std::tan(std::atan2(m_sinA,
      m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y) / 4);
  m_destPoly.push_back(IntPoint(
      Round(m_srcPoly[j].X + m_delta * (m_normals[k].X - m_normals[k].Y * dx)),
      Round(m_srcPoly[j].Y + m_delta * (m_normals[k].Y + m_normals[k].X * dx))));
  m_destPoly.push_back(IntPoint(
      Round(m_srcPoly[j].X + m_delta * (m_normals[j].X + m_normals[j].Y * dx)),
      Round(m_srcPoly[j].Y + m_delta * (m_normals[j].Y - m_normals[j].X * dx))));
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
movsd 0x78(%rdi), %xmm0
movslq %edx, %r12
movq 0x58(%rdi), %rax
shlq $0x4, %r12
movslq %esi, %r15
shlq $0x4, %r15
movsd 0x8(%rax,%r12), %xmm2
mulsd 0x8(%rax,%r15), %xmm2
movsd (%rax,%r12), %xmm1
mulsd (%rax,%r15), %xmm1
addsd %xmm2, %xmm1
callq 0x3060
mulsd 0x4dbc(%rip), %xmm0     # 0x15678
callq 0x3130
leaq 0x40(%rbx), %r14
movq 0x28(%rbx), %rax
movq 0x58(%rbx), %rcx
cvtsi2sdq (%rax,%r15), %xmm3
movsd 0x70(%rbx), %xmm1
movsd (%rcx,%r12), %xmm6
movsd 0x8(%rcx,%r12), %xmm4
movapd %xmm6, %xmm2
mulsd %xmm0, %xmm6
addsd %xmm4, %xmm6
mulsd %xmm0, %xmm4
subsd %xmm4, %xmm2
mulsd %xmm1, %xmm2
addsd %xmm3, %xmm2
xorpd %xmm3, %xmm3
movapd %xmm2, %xmm4
cmpltsd %xmm3, %xmm4
movsd 0x4d49(%rip), %xmm8     # 0x15660
movapd %xmm4, %xmm5
andpd %xmm8, %xmm5
movsd 0x36ef(%rip), %xmm9     # 0x14018
andnpd %xmm9, %xmm4
orpd %xmm5, %xmm4
addsd %xmm2, %xmm4
cvttsd2si %xmm4, %rcx
xorps %xmm2, %xmm2
cvtsi2sdq 0x8(%rax,%r15), %xmm2
mulsd %xmm1, %xmm6
addsd %xmm2, %xmm6
movapd %xmm6, %xmm1
cmpltsd %xmm3, %xmm1
movapd %xmm1, %xmm2
andpd %xmm8, %xmm2
andnpd %xmm9, %xmm1
orpd %xmm2, %xmm1
addsd %xmm6, %xmm1
cvttsd2si %xmm1, %rax
movq %rcx, (%rsp)
movq %rax, 0x8(%rsp)
movq 0x48(%rbx), %rsi
cmpq 0x50(%rbx), %rsi
je 0x10994
movupd (%rsp), %xmm1
movupd %xmm1, (%rsi)
addq $0x10, 0x48(%rbx)
jmp 0x109bd
movq %rsp, %rdx
movq %r14, %rdi
movsd %xmm0, 0x10(%rsp)
callq 0x75d4
movsd 0x366a(%rip), %xmm9     # 0x14018
movsd 0x4ca9(%rip), %xmm8     # 0x15660
movsd 0x10(%rsp), %xmm0
movq 0x28(%rbx), %rax
movq 0x58(%rbx), %rcx
xorps %xmm1, %xmm1
cvtsi2sdq (%rax,%r15), %xmm1
movsd 0x70(%rbx), %xmm2
movsd (%rcx,%r15), %xmm3
movsd 0x8(%rcx,%r15), %xmm7
movapd %xmm7, %xmm4
mulsd %xmm0, %xmm4
addsd %xmm3, %xmm4
mulsd %xmm2, %xmm4
addsd %xmm1, %xmm4
xorpd %xmm1, %xmm1
movapd %xmm4, %xmm5
cmpltsd %xmm1, %xmm5
movapd %xmm5, %xmm6
andpd %xmm8, %xmm6
andnpd %xmm9, %xmm5
orpd %xmm6, %xmm5
addsd %xmm4, %xmm5
cvttsd2si %xmm5, %rcx
xorps %xmm4, %xmm4
cvtsi2sdq 0x8(%rax,%r15), %xmm4
mulsd %xmm0, %xmm3
subsd %xmm3, %xmm7
mulsd %xmm2, %xmm7
addsd %xmm4, %xmm7
movapd %xmm7, %xmm2
cmpltsd %xmm1, %xmm2
andpd %xmm2, %xmm8
andnpd %xmm9, %xmm2
orpd %xmm8, %xmm2
addsd %xmm7, %xmm2
cvttsd2si %xmm2, %rax
movq %rcx, (%rsp)
movq %rax, 0x8(%rsp)
movq 0x48(%rbx), %rsi
cmpq 0x50(%rbx), %rsi
je 0x10a7a
movupd (%rsp), %xmm0
movupd %xmm0, (%rsi)
addq $0x10, 0x48(%rbx)
jmp 0x10a85
movq %rsp, %rdx
movq %r14, %rdi
callq 0x75d4
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
nop