#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ assert(int);
scalar_t__ fabs(double);
int floor(double);
int /*<<< orphan*/ plotQuadRationalBezierSeg(int, int, int, int, int, int,
                                             float);
double sqrt(double);
void plotQuadRationalBezier(int x0, int y0, int x1, int y1, int x2, int y2,
                            float w) {
  int x = x0 - 2 * x1 + x2, y = y0 - 2 * y1 + y2;
  double xx = x0 - x1, yy = y0 - y1, ww, t, q;
  assert(w >= 0.0);
  if (xx * (x2 - x1) > 0) {
    if (yy * (y2 - y1) > 0)
      if (fabs(xx * y) > fabs(yy * x)) {
        x0 = x2;
        x2 = xx + x1;
        y0 = y2;
        y2 = yy + y1;
      }
    if (x0 == x2 || w == 1.0)
      t = (x0 - x1) / (double)x;
    else {
      q = sqrt(4.0 * w * w * (x0 - x1) * (x2 - x1) +
               (x2 - x0) * (long)(x2 - x0));
      if (x1 < x0)
        q = -q;
      t = (2.0 * w * (x0 - x1) - x0 + x2 + q) / (2.0 * (1.0 - w) * (x2 - x0));
    }
    q = 1.0 / (2.0 * t * (1.0 - t) * (w - 1.0) + 1.0);
    xx = (t * t * (x0 - 2.0 * w * x1 + x2) + 2.0 * t * (w * x1 - x0) + x0) * q;
    yy = (t * t * (y0 - 2.0 * w * y1 + y2) + 2.0 * t * (w * y1 - y0) + y0) * q;
    ww = t * (w - 1.0) + 1.0;
    ww *= ww * q;
    w = ((1.0 - t) * (w - 1.0) + 1.0) * sqrt(q);
    x = floor(xx + 0.5);
    y = floor(yy + 0.5);
    yy = (xx - x0) * (y1 - y0) / (x1 - x0) + y0;
    plotQuadRationalBezierSeg(x0, y0, x, floor(yy + 0.5), x, y, ww);
    yy = (xx - x2) * (y1 - y2) / (x1 - x2) + y2;
    y1 = floor(yy + 0.5);
    x0 = x1 = x;
    y0 = y;
  }
  if ((y0 - y1) * (long)(y2 - y1) > 0) {
    if (y0 == y2 || w == 1.0)
      t = (y0 - y1) / (y0 - 2.0 * y1 + y2);
    else {
      q = sqrt(4.0 * w * w * (y0 - y1) * (y2 - y1) +
               (y2 - y0) * (long)(y2 - y0));
      if (y1 < y0)
        q = -q;
      t = (2.0 * w * (y0 - y1) - y0 + y2 + q) / (2.0 * (1.0 - w) * (y2 - y0));
    }
    q = 1.0 / (2.0 * t * (1.0 - t) * (w - 1.0) + 1.0);
    xx = (t * t * (x0 - 2.0 * w * x1 + x2) + 2.0 * t * (w * x1 - x0) + x0) * q;
    yy = (t * t * (y0 - 2.0 * w * y1 + y2) + 2.0 * t * (w * y1 - y0) + y0) * q;
    ww = t * (w - 1.0) + 1.0;
    ww *= ww * q;
    w = ((1.0 - t) * (w - 1.0) + 1.0) * sqrt(q);
    x = floor(xx + 0.5);
    y = floor(yy + 0.5);
    xx = (x1 - x0) * (yy - y0) / (y1 - y0) + x0;
    plotQuadRationalBezierSeg(x0, y0, floor(xx + 0.5), y, x, y, ww);
    xx = (x1 - x2) * (yy - y2) / (y1 - y2) + x2;
    x1 = floor(xx + 0.5);
    x0 = x;
    y0 = y1 = y;
  }
  plotQuadRationalBezierSeg(x0, y0, x1, y1, x2, y2, w * w);
}


x86 assembly (clang, -O0):
<plotQuadRationalBezier>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
movss  %xmm0,-0x1c(%rbp)
mov    -0x4(%rbp),%eax
mov    -0xc(%rbp),%ecx
shl    $0x1,%ecx
sub    %ecx,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x10(%rbp),%ecx
shl    $0x1,%ecx
sub    %ecx,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x4(%rbp),%eax
sub    -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x8(%rbp),%eax
sub    -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x38(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%edi
call   1040 <assert@plt>
movsd  -0x30(%rbp),%xmm0
mov    -0x14(%rbp),%eax
sub    -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1726 <plotQuadRationalBezier+0x5d6>
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%eax
sub    -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1286 <plotQuadRationalBezier+0x136>
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
mulsd  %xmm1,%xmm0
call   1030 <fabs@plt>
mov    %rax,-0x58(%rbp)
movsd  -0x38(%rbp),%xmm0
cvtsi2sdl -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
call   1030 <fabs@plt>
mov    %rax,%rcx
mov    -0x58(%rbp),%rax
cmp    %rcx,%rax
jle    1281 <plotQuadRationalBezier+0x131>
mov    -0x14(%rbp),%eax
mov    %eax,-0x4(%rbp)
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0xc(%rbp),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x8(%rbp)
movsd  -0x38(%rbp),%xmm0
cvtsi2sdl -0x10(%rbp),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x18(%rbp)
jmp    1286 <plotQuadRationalBezier+0x136>
mov    -0x4(%rbp),%eax
cmp    -0x14(%rbp),%eax
je     12b3 <plotQuadRationalBezier+0x163>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd5d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12d0 <plotQuadRationalBezier+0x180>
jp     12d0 <plotQuadRationalBezier+0x180>
mov    -0x4(%rbp),%eax
sub    -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm0
cvtsi2sdl -0x20(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    13ec <plotQuadRationalBezier+0x29c>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd27(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x4(%rbp),%eax
sub    -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x14(%rbp),%eax
sub    -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm2
mov    -0x14(%rbp),%eax
sub    -0x4(%rbp),%eax
cltq
mov    -0x14(%rbp),%ecx
sub    -0x4(%rbp),%ecx
movslq %ecx,%rcx
imul   %rcx,%rax
cvtsi2sd %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1060 <sqrt@plt>
movsd  %xmm0,-0x50(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1363 <plotQuadRationalBezier+0x213>
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x50(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc9c(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x4(%rbp),%eax
sub    -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm2
cvtsi2sdl -0x4(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
addsd  %xmm1,%xmm0
addsd  -0x50(%rbp),%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xc3b(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  0xc3f(%rip),%xmm1
mulsd  %xmm2,%xmm1
mov    -0x14(%rbp),%eax
sub    -0x4(%rbp),%eax
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xc1c(%rip),%xmm1
mulsd  -0x48(%rbp),%xmm1
movsd  0xbff(%rip),%xmm0
subsd  -0x48(%rbp),%xmm0
mulsd  %xmm0,%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbe5(%rip),%xmm2
subsd  %xmm2,%xmm0
mulsd  %xmm0,%xmm1
movsd  0xbd5(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  0xbc9(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xbb0(%rip),%xmm2
mulsd  %xmm3,%xmm2
cvtsi2sdl -0xc(%rbp),%xmm3
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
cvtsi2sdl -0x14(%rbp),%xmm1
addsd  %xmm1,%xmm2
movsd  0xb77(%rip),%xmm1
mulsd  -0x48(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm3
cvtsi2ssl -0xc(%rbp),%xmm5
cvtsi2ssl -0x4(%rbp),%xmm4
movd   %xmm4,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm4
mulss  %xmm5,%xmm3
addss  %xmm4,%xmm3
cvtss2sd %xmm3,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvtsi2sdl -0x8(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xb0b(%rip),%xmm2
mulsd  %xmm3,%xmm2
cvtsi2sdl -0x10(%rbp),%xmm3
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
cvtsi2sdl -0x18(%rbp),%xmm1
addsd  %xmm1,%xmm2
movsd  0xad2(%rip),%xmm1
mulsd  -0x48(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm3
cvtsi2ssl -0x10(%rbp),%xmm5
cvtsi2ssl -0x8(%rbp),%xmm4
movd   %xmm4,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm4
mulss  %xmm5,%xmm3
addss  %xmm4,%xmm3
cvtss2sd %xmm3,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0x8(%rbp),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x48(%rbp),%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xa60(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa50(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xa2b(%rip),%xmm0
subsd  -0x48(%rbp),%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xa15(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa05(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
call   1060 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
movsd  0x9ed(%rip),%xmm0
addsd  -0x30(%rbp),%xmm0
call   1070 <floor@plt>
mov    %eax,-0x20(%rbp)
movsd  0x9d8(%rip),%xmm0
addsd  -0x38(%rbp),%xmm0
call   1070 <floor@plt>
mov    %eax,-0x24(%rbp)
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    -0x10(%rbp),%eax
sub    -0x8(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
mov    -0xc(%rbp),%eax
sub    -0x4(%rbp),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
cvtsi2sdl -0x8(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x5c(%rbp)
movsd  0x979(%rip),%xmm0
addsd  -0x38(%rbp),%xmm0
call   1070 <floor@plt>
mov    -0x64(%rbp),%edi
mov    -0x60(%rbp),%esi
mov    -0x5c(%rbp),%edx
mov    %eax,%ecx
mov    -0x20(%rbp),%r8d
mov    -0x24(%rbp),%r9d
movsd  -0x40(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1050 <plotQuadRationalBezierSeg@plt>
movsd  -0x30(%rbp),%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
subsd  %xmm1,%xmm0
mov    -0x10(%rbp),%eax
sub    -0x18(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
mov    -0xc(%rbp),%eax
sub    -0x14(%rbp),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
cvtsi2sdl -0x18(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0x90e(%rip),%xmm0
addsd  -0x38(%rbp),%xmm0
call   1070 <floor@plt>
mov    %eax,-0x10(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    %eax,-0x4(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%eax
sub    -0x10(%rbp),%eax
cltq
mov    -0x18(%rbp),%ecx
sub    -0x10(%rbp),%ecx
movslq %ecx,%rcx
imul   %rcx,%rax
cmp    $0x0,%rax
jle    1bf5 <plotQuadRationalBezier+0xaa5>
mov    -0x8(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     1772 <plotQuadRationalBezier+0x622>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x89e(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    17a5 <plotQuadRationalBezier+0x655>
jp     17a5 <plotQuadRationalBezier+0x655>
mov    -0x8(%rbp),%eax
sub    -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm0
cvtsi2sdl -0x8(%rbp),%xmm1
cvtsi2sdl -0x10(%rbp),%xmm2
addsd  %xmm2,%xmm2
subsd  %xmm2,%xmm1
cvtsi2sdl -0x18(%rbp),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    18c1 <plotQuadRationalBezier+0x771>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x852(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%eax
sub    -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x18(%rbp),%eax
sub    -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm2
mov    -0x18(%rbp),%eax
sub    -0x8(%rbp),%eax
cltq
mov    -0x18(%rbp),%ecx
sub    -0x8(%rbp),%ecx
movslq %ecx,%rcx
imul   %rcx,%rax
cvtsi2sd %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1060 <sqrt@plt>
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1838 <plotQuadRationalBezier+0x6e8>
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x50(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x7c7(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%eax
sub    -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm2
cvtsi2sdl -0x8(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0x18(%rbp),%xmm1
addsd  %xmm1,%xmm0
addsd  -0x50(%rbp),%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0x766(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  0x76a(%rip),%xmm1
mulsd  %xmm2,%xmm1
mov    -0x18(%rbp),%eax
sub    -0x8(%rbp),%eax
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0x747(%rip),%xmm1
mulsd  -0x48(%rbp),%xmm1
movsd  0x72a(%rip),%xmm0
subsd  -0x48(%rbp),%xmm0
mulsd  %xmm0,%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x710(%rip),%xmm2
subsd  %xmm2,%xmm0
mulsd  %xmm0,%xmm1
movsd  0x700(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  0x6f4(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0x6db(%rip),%xmm2
mulsd  %xmm3,%xmm2
cvtsi2sdl -0xc(%rbp),%xmm3
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
cvtsi2sdl -0x14(%rbp),%xmm1
addsd  %xmm1,%xmm2
movsd  0x6a2(%rip),%xmm1
mulsd  -0x48(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm3
cvtsi2ssl -0xc(%rbp),%xmm5
cvtsi2ssl -0x4(%rbp),%xmm4
movd   %xmm4,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm4
mulss  %xmm5,%xmm3
addss  %xmm4,%xmm3
cvtss2sd %xmm3,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvtsi2sdl -0x8(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0x636(%rip),%xmm2
mulsd  %xmm3,%xmm2
cvtsi2sdl -0x10(%rbp),%xmm3
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
cvtsi2sdl -0x18(%rbp),%xmm1
addsd  %xmm1,%xmm2
movsd  0x5fd(%rip),%xmm1
mulsd  -0x48(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm3
cvtsi2ssl -0x10(%rbp),%xmm5
cvtsi2ssl -0x8(%rbp),%xmm4
movd   %xmm4,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm4
mulss  %xmm5,%xmm3
addss  %xmm4,%xmm3
cvtss2sd %xmm3,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0x8(%rbp),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x48(%rbp),%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0x58b(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0x57b(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0x556(%rip),%xmm0
subsd  -0x48(%rbp),%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0x540(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0x530(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x50(%rbp),%xmm0
call   1060 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
movsd  0x518(%rip),%xmm0
addsd  -0x30(%rbp),%xmm0
call   1070 <floor@plt>
mov    %eax,-0x20(%rbp)
movsd  0x503(%rip),%xmm0
addsd  -0x38(%rbp),%xmm0
call   1070 <floor@plt>
mov    %eax,-0x24(%rbp)
mov    -0xc(%rbp),%eax
sub    -0x4(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x38(%rbp),%xmm1
cvtsi2sdl -0x8(%rbp),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%eax
sub    -0x8(%rbp),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x74(%rbp)
movsd  0x4aa(%rip),%xmm0
addsd  -0x30(%rbp),%xmm0
call   1070 <floor@plt>
mov    -0x78(%rbp),%edi
mov    -0x74(%rbp),%esi
mov    %eax,%edx
mov    -0x24(%rbp),%ecx
mov    -0x20(%rbp),%r8d
mov    -0x24(%rbp),%r9d
movsd  -0x40(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1050 <plotQuadRationalBezierSeg@plt>
mov    -0xc(%rbp),%eax
sub    -0x14(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x38(%rbp),%xmm1
cvtsi2sdl -0x18(%rbp),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%eax
sub    -0x18(%rbp),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0x43f(%rip),%xmm0
addsd  -0x30(%rbp),%xmm0
call   1070 <floor@plt>
mov    %eax,-0xc(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    -0xc(%rbp),%edx
mov    -0x10(%rbp),%ecx
mov    -0x14(%rbp),%r8d
mov    -0x18(%rbp),%r9d
movss  -0x1c(%rbp),%xmm0
mulss  -0x1c(%rbp),%xmm0
call   1050 <plotQuadRationalBezierSeg@plt>
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<plotQuadRationalBezier>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9d,(%rsp)
mov    %r8d,%ebp
mov    %ecx,%r15d
mov    %edx,%r12d
mov    %edi,%r14d
mov    %edi,%eax
sub    %edx,%eax
cvtsi2sd %eax,%xmm1
movsd  %xmm1,0x18(%rsp)
mov    %esi,%r13d
mov    %esi,%ebx
sub    %ecx,%ebx
xorpd  %xmm1,%xmm1
xor    %edi,%edi
movss  %xmm0,0x10(%rsp)
ucomiss %xmm1,%xmm0
setae  %dil
call   1040 <assert@plt>
movsd  0x18(%rsp),%xmm2
mov    %ebp,0x4(%rsp)
sub    %r12d,%ebp
xorps  %xmm1,%xmm1
cvtsi2sd %ebp,%xmm1
mulsd  %xmm2,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jbe    1291 <plotQuadRationalBezier+0x141>
mov    %r14d,%ebp
sub    %r12d,%r14d
sub    %r12d,%r14d
add    0x4(%rsp),%r14d
cvtsi2sd %ebx,%xmm3
mov    (%rsp),%eax
sub    %r15d,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  %xmm3,0x28(%rsp)
mulsd  %xmm3,%xmm1
ucomisd %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %r14d,%xmm0
cvtsi2sd %r12d,%xmm10
cvtsi2sd %r15d,%xmm9
jbe    1299 <plotQuadRationalBezier+0x149>
movsd  %xmm9,0x20(%rsp)
movsd  %xmm10,0x8(%rsp)
mov    %r13d,%ecx
sub    %r15d,%ecx
sub    %r15d,%ecx
add    (%rsp),%ecx
movsd  %xmm0,0x30(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mulsd  %xmm2,%xmm0
call   1030 <fabs@plt>
mov    %rax,%rbx
movsd  0x28(%rsp),%xmm0
mulsd  0x30(%rsp),%xmm0
call   1030 <fabs@plt>
cmp    %rax,%rbx
jle    12a7 <plotQuadRationalBezier+0x157>
movsd  0x8(%rsp),%xmm10
movsd  0x18(%rsp),%xmm0
addsd  %xmm10,%xmm0
cvttsd2si %xmm0,%eax
mov    0x4(%rsp),%r13d
movsd  0x20(%rsp),%xmm9
movsd  0x28(%rsp),%xmm0
addsd  %xmm9,%xmm0
mov    (%rsp),%edx
cvttsd2si %xmm0,%ecx
mov    %eax,0x4(%rsp)
mov    %ecx,(%rsp)
movss  0x10(%rsp),%xmm7
jmp    12c1 <plotQuadRationalBezier+0x171>
mov    %r13d,%esi
jmp    1629 <plotQuadRationalBezier+0x4d9>
mov    %r13d,%edx
mov    %ebp,%r13d
movss  0x10(%rsp),%xmm7
jmp    12c7 <plotQuadRationalBezier+0x177>
mov    %r13d,%edx
mov    %ebp,%r13d
movss  0x10(%rsp),%xmm7
movsd  0x8(%rsp),%xmm10
movsd  0x20(%rsp),%xmm9
movsd  0x30(%rsp),%xmm0
cvtss2sd %xmm7,%xmm4
ucomiss 0xd2e(%rip),%xmm7
jne    12d6 <plotQuadRationalBezier+0x186>
jnp    133a <plotQuadRationalBezier+0x1ea>
mov    0x4(%rsp),%ebx
sub    %r13d,%ebx
je     133a <plotQuadRationalBezier+0x1ea>
movsd  0xd21(%rip),%xmm0
mulsd  %xmm4,%xmm0
mulsd  %xmm4,%xmm0
mov    %r13d,%eax
sub    %r12d,%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm0
mov    0x4(%rsp),%eax
sub    %r12d,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  %xmm0,%xmm1
movslq %ebx,%rax
imul   %rax,%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     135c <plotQuadRationalBezier+0x20c>
sqrtsd %xmm0,%xmm0
cmp    %r12d,%r13d
jg     13a4 <plotQuadRationalBezier+0x254>
jmp    13ac <plotQuadRationalBezier+0x25c>
mov    %r13d,%eax
sub    %r12d,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
divsd  %xmm0,%xmm1
cvtsi2sd %r13d,%xmm12
cvtsi2sdl 0x4(%rsp),%xmm11
jmp    13f0 <plotQuadRationalBezier+0x2a0>
mov    %edx,%ebp
movsd  %xmm10,0x8(%rsp)
movsd  %xmm9,0x20(%rsp)
movsd  %xmm4,0x18(%rsp)
movsd  %xmm2,0x28(%rsp)
call   1060 <sqrt@plt>
movsd  0x28(%rsp),%xmm2
movsd  0x18(%rsp),%xmm4
movsd  0x20(%rsp),%xmm9
movsd  0x8(%rsp),%xmm10
movss  0x10(%rsp),%xmm7
mov    %ebp,%edx
cmp    %r12d,%r13d
jle    13ac <plotQuadRationalBezier+0x25c>
xorpd  0xc84(%rip),%xmm0
movaps %xmm4,%xmm1
addsd  %xmm4,%xmm1
cvtsi2sd %r13d,%xmm12
mulsd  %xmm2,%xmm1
subsd  %xmm12,%xmm1
cvtsi2sdl 0x4(%rsp),%xmm11
addsd  %xmm11,%xmm1
addsd  %xmm0,%xmm1
movsd  0xc37(%rip),%xmm0
subsd  %xmm4,%xmm0
addsd  %xmm0,%xmm0
xorps  %xmm2,%xmm2
cvtsi2sd %ebx,%xmm2
mulsd  %xmm0,%xmm2
divsd  %xmm2,%xmm1
movapd %xmm1,%xmm0
xorps  %xmm3,%xmm3
cvtsi2ss %r12d,%xmm3
addsd  %xmm1,%xmm0
cvtsi2ss %r13d,%xmm5
movsd  0xc02(%rip),%xmm8
movapd %xmm8,%xmm2
subsd  %xmm1,%xmm2
mulss  %xmm7,%xmm3
subss  %xmm5,%xmm3
cvtss2sd %xmm3,%xmm3
xorps  %xmm5,%xmm5
cvtsi2ss %r15d,%xmm5
mulsd  %xmm0,%xmm3
cvtsi2ss %edx,%xmm6
mulss  %xmm7,%xmm5
subss  %xmm6,%xmm5
cvtss2sd %xmm5,%xmm13
mulsd  %xmm0,%xmm13
movapd %xmm0,%xmm6
mulsd  %xmm2,%xmm6
movsd  0xbc3(%rip),%xmm5
addsd  %xmm4,%xmm5
mulsd  %xmm5,%xmm6
addsd  %xmm8,%xmm6
movapd %xmm1,%xmm7
mulsd  %xmm5,%xmm1
addsd  %xmm8,%xmm1
mulsd  %xmm2,%xmm5
addsd  %xmm8,%xmm5
movapd %xmm8,%xmm0
divsd  %xmm6,%xmm0
mulsd  0xb97(%rip),%xmm4
mulsd  %xmm7,%xmm7
mulsd  %xmm4,%xmm10
addsd  %xmm12,%xmm10
movsd  %xmm11,0x28(%rsp)
addsd  %xmm11,%xmm10
mulsd  %xmm7,%xmm10
addsd  %xmm3,%xmm10
movsd  %xmm12,0x30(%rsp)
addsd  %xmm12,%xmm10
mulsd  %xmm0,%xmm10
mov    %edx,%ebp
xorps  %xmm3,%xmm3
cvtsi2sd %edx,%xmm3
mulsd  %xmm9,%xmm4
addsd  %xmm3,%xmm4
xorps  %xmm2,%xmm2
cvtsi2sdl (%rsp),%xmm2
movsd  %xmm2,0x20(%rsp)
addsd  %xmm2,%xmm4
mulsd  %xmm7,%xmm4
addsd  %xmm13,%xmm4
movsd  %xmm3,0x38(%rsp)
addsd  %xmm3,%xmm4
mulsd  %xmm0,%xmm4
movsd  %xmm4,0x18(%rsp)
movapd %xmm1,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x40(%rsp)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movsd  %xmm10,0x8(%rsp)
mov    %r15,%rbx
jb     152b <plotQuadRationalBezier+0x3db>
sqrtsd %xmm0,%xmm0
jmp    1543 <plotQuadRationalBezier+0x3f3>
movsd  %xmm5,0x10(%rsp)
call   1060 <sqrt@plt>
movsd  0x10(%rsp),%xmm5
movsd  0x8(%rsp),%xmm10
mulsd  %xmm5,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x10(%rsp)
movapd %xmm10,%xmm0
addsd  0xaca(%rip),%xmm0
call   1070 <floor@plt>
mov    %eax,%r15d
movsd  0x18(%rsp),%xmm0
addsd  0xab4(%rip),%xmm0
call   1070 <floor@plt>
mov    %eax,%r14d
movsd  0x8(%rsp),%xmm1
mov    %ebx,%eax
sub    %ebp,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
subsd  0x30(%rsp),%xmm1
mov    %r12d,%eax
sub    %r13d,%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
mulsd  %xmm1,%xmm0
divsd  %xmm2,%xmm0
addsd  0x38(%rsp),%xmm0
addsd  0xa72(%rip),%xmm0
call   1070 <floor@plt>
movsd  0x40(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
mov    %r13d,%edi
mov    %ebp,%esi
mov    %r15d,%edx
mov    %eax,%ecx
mov    %r15d,%r8d
mov    %r14d,%r9d
call   1050 <plotQuadRationalBezierSeg@plt>
sub    (%rsp),%ebx
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
movsd  0x8(%rsp),%xmm2
subsd  0x28(%rsp),%xmm2
sub    0x4(%rsp),%r12d
xorps  %xmm1,%xmm1
cvtsi2sd %r12d,%xmm1
mulsd  %xmm2,%xmm0
divsd  %xmm1,%xmm0
addsd  0x20(%rsp),%xmm0
addsd  0xa15(%rip),%xmm0
call   1070 <floor@plt>
mov    %r14d,%esi
mov    %r14d,%ebx
sub    %eax,%ebx
mov    %r15d,%r14d
mov    %r15d,%r12d
mov    %rax,%r15
movslq %ebx,%rcx
mov    (%rsp),%eax
sub    %r15d,%eax
movslq %eax,%rdx
imul   %rcx,%rdx
test   %rdx,%rdx
jle    16ad <plotQuadRationalBezier+0x55d>
mov    (%rsp),%ebp
movss  0x10(%rsp),%xmm8
cvtss2sd %xmm8,%xmm13
sub    %esi,%ebp
je     16b8 <plotQuadRationalBezier+0x568>
ucomiss 0x9a7(%rip),%xmm8
jne    165d <plotQuadRationalBezier+0x50d>
jnp    16b8 <plotQuadRationalBezier+0x568>
movsd  0x9a3(%rip),%xmm0
mulsd  %xmm13,%xmm0
mulsd  %xmm13,%xmm0
xorps  %xmm2,%xmm2
cvtsi2sd %ebx,%xmm2
mulsd  %xmm2,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  %xmm0,%xmm1
movslq %ebp,%rax
imul   %rax,%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     16f0 <plotQuadRationalBezier+0x5a0>
sqrtsd %xmm0,%xmm0
cmp    %esi,%r15d
jl     171f <plotQuadRationalBezier+0x5cf>
jmp    1727 <plotQuadRationalBezier+0x5d7>
movss  0x10(%rsp),%xmm0
jmp    19b2 <plotQuadRationalBezier+0x862>
xorps  %xmm1,%xmm1
cvtsi2sd %ebx,%xmm1
cvtsi2sd %esi,%xmm11
cvtsi2sd %r15d,%xmm9
movapd %xmm9,%xmm0
addsd  %xmm9,%xmm0
movapd %xmm11,%xmm3
subsd  %xmm0,%xmm3
cvtsi2sdl (%rsp),%xmm10
addsd  %xmm10,%xmm3
divsd  %xmm3,%xmm1
jmp    1772 <plotQuadRationalBezier+0x622>
mov    %esi,%ebx
movsd  %xmm13,0x8(%rsp)
movsd  %xmm2,0x18(%rsp)
call   1060 <sqrt@plt>
movsd  0x18(%rsp),%xmm2
movsd  0x8(%rsp),%xmm13
movss  0x10(%rsp),%xmm8
mov    %ebx,%esi
cmp    %esi,%r15d
jge    1727 <plotQuadRationalBezier+0x5d7>
xorpd  0x909(%rip),%xmm0
movaps %xmm13,%xmm1
cvtsi2sd %esi,%xmm11
addsd  %xmm13,%xmm1
mulsd  %xmm2,%xmm1
cvtsi2sdl (%rsp),%xmm10
subsd  %xmm11,%xmm1
addsd  %xmm10,%xmm1
addsd  %xmm0,%xmm1
movsd  0x8bb(%rip),%xmm0
subsd  %xmm13,%xmm0
addsd  %xmm0,%xmm0
xorps  %xmm2,%xmm2
cvtsi2sd %ebp,%xmm2
mulsd  %xmm0,%xmm2
divsd  %xmm2,%xmm1
cvtsi2sd %r15d,%xmm9
movapd %xmm1,%xmm4
addsd  %xmm1,%xmm4
movsd  0x88e(%rip),%xmm0
movapd %xmm0,%xmm3
cvtsi2ss %r12d,%xmm5
subsd  %xmm1,%xmm3
xorps  %xmm2,%xmm2
cvtsi2ss %r14d,%xmm2
mulss  %xmm8,%xmm5
cvtsi2ss %r15d,%xmm7
subss  %xmm2,%xmm5
mov    %esi,%ebp
xorps  %xmm2,%xmm2
cvtsi2ss %esi,%xmm2
cvtss2sd %xmm5,%xmm12
mulsd  %xmm4,%xmm12
mulss  %xmm8,%xmm7
subss  %xmm2,%xmm7
xorps  %xmm2,%xmm2
cvtss2sd %xmm7,%xmm2
mulsd  %xmm4,%xmm2
mulsd  %xmm3,%xmm4
movsd  0x840(%rip),%xmm5
addsd  %xmm13,%xmm5
mulsd  %xmm5,%xmm4
addsd  %xmm0,%xmm4
movapd %xmm1,%xmm7
mulsd  %xmm5,%xmm1
addsd  %xmm0,%xmm1
mulsd  %xmm3,%xmm5
addsd  %xmm0,%xmm5
divsd  %xmm4,%xmm0
mov    %r14d,%ebx
xorps  %xmm4,%xmm4
cvtsi2sd %r14d,%xmm4
cvtsi2sd %r12d,%xmm6
mulsd  %xmm7,%xmm7
mulsd  0x806(%rip),%xmm13
mulsd  %xmm13,%xmm6
addsd  %xmm4,%xmm6
xorps  %xmm3,%xmm3
cvtsi2sdl 0x4(%rsp),%xmm3
movsd  %xmm3,0x30(%rsp)
addsd  %xmm3,%xmm6
mulsd  %xmm7,%xmm6
addsd  %xmm12,%xmm6
mulsd  %xmm9,%xmm13
addsd  %xmm11,%xmm13
movsd  %xmm10,0x18(%rsp)
addsd  %xmm10,%xmm13
mulsd  %xmm7,%xmm13
addsd  %xmm2,%xmm13
movapd %xmm1,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x20(%rsp)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movsd  %xmm4,0x40(%rsp)
addsd  %xmm4,%xmm6
mulsd  %xmm0,%xmm6
movsd  %xmm11,0x28(%rsp)
addsd  %xmm11,%xmm13
mulsd  %xmm0,%xmm13
movsd  %xmm13,0x8(%rsp)
mov    %r12,%r14
jb     18aa <plotQuadRationalBezier+0x75a>
sqrtsd %xmm0,%xmm0
jmp    18c7 <plotQuadRationalBezier+0x777>
movsd  %xmm5,0x10(%rsp)
movsd  %xmm6,0x38(%rsp)
call   1060 <sqrt@plt>
movsd  0x38(%rsp),%xmm6
movsd  0x10(%rsp),%xmm5
mulsd  %xmm5,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x10(%rsp)
addsd  0x74b(%rip),%xmm6
movapd %xmm6,%xmm0
call   1070 <floor@plt>
mov    %eax,%r12d
movsd  0x8(%rsp),%xmm0
addsd  0x731(%rip),%xmm0
call   1070 <floor@plt>
mov    %eax,%r13d
mov    %r14d,%eax
sub    %ebx,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0x8(%rsp),%xmm0
subsd  0x28(%rsp),%xmm0
mov    %r15d,%eax
sub    %ebp,%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
mulsd  %xmm1,%xmm0
divsd  %xmm2,%xmm0
addsd  0x40(%rsp),%xmm0
addsd  0x6ef(%rip),%xmm0
call   1070 <floor@plt>
movsd  0x20(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
mov    %ebx,%edi
mov    %ebp,%esi
mov    %eax,%edx
mov    %r13d,%ecx
mov    %r12d,%r8d
mov    %r13d,%r9d
call   1050 <plotQuadRationalBezierSeg@plt>
sub    0x4(%rsp),%r14d
xorps  %xmm0,%xmm0
cvtsi2sd %r14d,%xmm0
movsd  0x8(%rsp),%xmm2
subsd  0x18(%rsp),%xmm2
sub    (%rsp),%r15d
xorps  %xmm1,%xmm1
cvtsi2sd %r15d,%xmm1
mulsd  %xmm0,%xmm2
divsd  %xmm1,%xmm2
addsd  0x30(%rsp),%xmm2
addsd  0x691(%rip),%xmm2
movapd %xmm2,%xmm0
call   1070 <floor@plt>
movss  0x10(%rsp),%xmm0
mov    %r12d,%r14d
mov    %rax,%r12
mov    %r13d,%esi
mov    %r13d,%r15d
mulss  %xmm0,%xmm0
mov    %r14d,%edi
mov    %r12d,%edx
mov    %r15d,%ecx
mov    0x4(%rsp),%r8d
mov    (%rsp),%r9d
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <plotQuadRationalBezierSeg@plt>

LLVM IR (-O0):
define void @plotQuadRationalBezier(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, float %6) {
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca float
%15 = alloca i32
%16 = alloca i32
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
store i32 %0, i32* %8
store i32 %1, i32* %9
store i32 %2, i32* %10
store i32 %3, i32* %11
store i32 %4, i32* %12
store i32 %5, i32* %13
store float %6, float* %14
%22 = load i32, i32* %8
%23 = load i32, i32* %10
%24 = mul nsw i32 2, %23
%25 = sub nsw i32 %22, %24
%26 = load i32, i32* %12
%27 = add nsw i32 %25, %26
store i32 %27, i32* %15
%28 = load i32, i32* %9
%29 = load i32, i32* %11
%30 = mul nsw i32 2, %29
%31 = sub nsw i32 %28, %30
%32 = load i32, i32* %13
%33 = add nsw i32 %31, %32
store i32 %33, i32* %16
%34 = load i32, i32* %8
%35 = load i32, i32* %10
%36 = sub nsw i32 %34, %35
%37 = sitofp i32 %36 to double
store double %37, double* %17
%38 = load i32, i32* %9
%39 = load i32, i32* %11
%40 = sub nsw i32 %38, %39
%41 = sitofp i32 %40 to double
store double %41, double* %18
%42 = load float, float* %14
%43 = fpext float %42 to double
%44 = fcmp oge double %43, 0.000000e+00
%45 = zext i1 %44 to i32
%46 = call i32 @assert(i32 %45)
%47 = load double, double* %17
%48 = load i32, i32* %12
%49 = load i32, i32* %10
%50 = sub nsw i32 %48, %49
%51 = sitofp i32 %50 to double
%52 = fmul double %47, %51
%53 = fcmp ogt double %52, 0.000000e+00
br i1 %53, label %54, label %316
54: ; preds = %7
%55 = load double, double* %18
%56 = load i32, i32* %13
%57 = load i32, i32* %11
%58 = sub nsw i32 %56, %57
%59 = sitofp i32 %58 to double
%60 = fmul double %55, %59
%61 = fcmp ogt double %60, 0.000000e+00
br i1 %61, label %62, label %88
62: ; preds = %54
%63 = load double, double* %17
%64 = load i32, i32* %16
%65 = sitofp i32 %64 to double
%66 = fmul double %63, %65
%67 = call i64 @fabs(double %66)
%68 = load double, double* %18
%69 = load i32, i32* %15
%70 = sitofp i32 %69 to double
%71 = fmul double %68, %70
%72 = call i64 @fabs(double %71)
%73 = icmp sgt i64 %67, %72
br i1 %73, label %74, label %87
74: ; preds = %62
%75 = load i32, i32* %12
store i32 %75, i32* %8
%76 = load double, double* %17
%77 = load i32, i32* %10
%78 = sitofp i32 %77 to double
%79 = fadd double %76, %78
%80 = fptosi double %79 to i32
store i32 %80, i32* %12
%81 = load i32, i32* %13
store i32 %81, i32* %9
%82 = load double, double* %18
%83 = load i32, i32* %11
%84 = sitofp i32 %83 to double
%85 = fadd double %82, %84
%86 = fptosi double %85 to i32
store i32 %86, i32* %13
br label %87
87: ; preds = %74, %62
br label %88
88: ; preds = %87, %54
%89 = load i32, i32* %8
%90 = load i32, i32* %12
%91 = icmp eq i32 %89, %90
br i1 %91, label %96, label %92
92: ; preds = %88
%93 = load float, float* %14
%94 = fpext float %93 to double
%95 = fcmp oeq double %94, 1.000000e+00
br i1 %95, label %96, label %104
96: ; preds = %92, %88
%97 = load i32, i32* %8
%98 = load i32, i32* %10
%99 = sub nsw i32 %97, %98
%100 = sitofp i32 %99 to double
%101 = load i32, i32* %15
%102 = sitofp i32 %101 to double
%103 = fdiv double %100, %102
store double %103, double* %20
br label %165
104: ; preds = %92
%105 = load float, float* %14
%106 = fpext float %105 to double
%107 = fmul double 4.000000e+00, %106
%108 = load float, float* %14
%109 = fpext float %108 to double
%110 = fmul double %107, %109
%111 = load i32, i32* %8
%112 = load i32, i32* %10
%113 = sub nsw i32 %111, %112
%114 = sitofp i32 %113 to double
%115 = fmul double %110, %114
%116 = load i32, i32* %12
%117 = load i32, i32* %10
%118 = sub nsw i32 %116, %117
%119 = sitofp i32 %118 to double
%120 = load i32, i32* %12
%121 = load i32, i32* %8
%122 = sub nsw i32 %120, %121
%123 = sext i32 %122 to i64
%124 = load i32, i32* %12
%125 = load i32, i32* %8
%126 = sub nsw i32 %124, %125
%127 = sext i32 %126 to i64
%128 = mul nsw i64 %123, %127
%129 = sitofp i64 %128 to double
%130 = call double @llvm.fmuladd.f64(double %115, double %119, double %129)
%131 = call double @sqrt(double %130)
store double %131, double* %21
%132 = load i32, i32* %10
%133 = load i32, i32* %8
%134 = icmp slt i32 %132, %133
br i1 %134, label %135, label %138
135: ; preds = %104
%136 = load double, double* %21
%137 = fneg double %136
store double %137, double* %21
br label %138
138: ; preds = %135, %104
%139 = load float, float* %14
%140 = fpext float %139 to double
%141 = fmul double 2.000000e+00, %140
%142 = load i32, i32* %8
%143 = load i32, i32* %10
%144 = sub nsw i32 %142, %143
%145 = sitofp i32 %144 to double
%146 = load i32, i32* %8
%147 = sitofp i32 %146 to double
%148 = fneg double %147
%149 = call double @llvm.fmuladd.f64(double %141, double %145, double %148)
%150 = load i32, i32* %12
%151 = sitofp i32 %150 to double
%152 = fadd double %149, %151
%153 = load double, double* %21
%154 = fadd double %152, %153
%155 = load float, float* %14
%156 = fpext float %155 to double
%157 = fsub double 1.000000e+00, %156
%158 = fmul double 2.000000e+00, %157
%159 = load i32, i32* %12
%160 = load i32, i32* %8
%161 = sub nsw i32 %159, %160
%162 = sitofp i32 %161 to double
%163 = fmul double %158, %162
%164 = fdiv double %154, %163
store double %164, double* %20
br label %165
165: ; preds = %138, %96
%166 = load double, double* %20
%167 = fmul double 2.000000e+00, %166
%168 = load double, double* %20
%169 = fsub double 1.000000e+00, %168
%170 = fmul double %167, %169
%171 = load float, float* %14
%172 = fpext float %171 to double
%173 = fsub double %172, 1.000000e+00
%174 = call double @llvm.fmuladd.f64(double %170, double %173, double 1.000000e+00)
%175 = fdiv double 1.000000e+00, %174
store double %175, double* %21
%176 = load double, double* %20
%177 = load double, double* %20
%178 = fmul double %176, %177
%179 = load i32, i32* %8
%180 = sitofp i32 %179 to double
%181 = load float, float* %14
%182 = fpext float %181 to double
%183 = fmul double 2.000000e+00, %182
%184 = load i32, i32* %10
%185 = sitofp i32 %184 to double
%186 = fneg double %183
%187 = call double @llvm.fmuladd.f64(double %186, double %185, double %180)
%188 = load i32, i32* %12
%189 = sitofp i32 %188 to double
%190 = fadd double %187, %189
%191 = load double, double* %20
%192 = fmul double 2.000000e+00, %191
%193 = load float, float* %14
%194 = load i32, i32* %10
%195 = sitofp i32 %194 to float
%196 = load i32, i32* %8
%197 = sitofp i32 %196 to float
%198 = fneg float %197
%199 = call float @llvm.fmuladd.f32(float %193, float %195, float %198)
%200 = fpext float %199 to double
%201 = fmul double %192, %200
%202 = call double @llvm.fmuladd.f64(double %178, double %190, double %201)
%203 = load i32, i32* %8
%204 = sitofp i32 %203 to double
%205 = fadd double %202, %204
%206 = load double, double* %21
%207 = fmul double %205, %206
store double %207, double* %17
%208 = load double, double* %20
%209 = load double, double* %20
%210 = fmul double %208, %209
%211 = load i32, i32* %9
%212 = sitofp i32 %211 to double
%213 = load float, float* %14
%214 = fpext float %213 to double
%215 = fmul double 2.000000e+00, %214
%216 = load i32, i32* %11
%217 = sitofp i32 %216 to double
%218 = fneg double %215
%219 = call double @llvm.fmuladd.f64(double %218, double %217, double %212)
%220 = load i32, i32* %13
%221 = sitofp i32 %220 to double
%222 = fadd double %219, %221
%223 = load double, double* %20
%224 = fmul double 2.000000e+00, %223
%225 = load float, float* %14
%226 = load i32, i32* %11
%227 = sitofp i32 %226 to float
%228 = load i32, i32* %9
%229 = sitofp i32 %228 to float
%230 = fneg float %229
%231 = call float @llvm.fmuladd.f32(float %225, float %227, float %230)
%232 = fpext float %231 to double
%233 = fmul double %224, %232
%234 = call double @llvm.fmuladd.f64(double %210, double %222, double %233)
%235 = load i32, i32* %9
%236 = sitofp i32 %235 to double
%237 = fadd double %234, %236
%238 = load double, double* %21
%239 = fmul double %237, %238
store double %239, double* %18
%240 = load double, double* %20
%241 = load float, float* %14
%242 = fpext float %241 to double
%243 = fsub double %242, 1.000000e+00
%244 = call double @llvm.fmuladd.f64(double %240, double %243, double 1.000000e+00)
store double %244, double* %19
%245 = load double, double* %19
%246 = load double, double* %21
%247 = fmul double %245, %246
%248 = load double, double* %19
%249 = fmul double %248, %247
store double %249, double* %19
%250 = load double, double* %20
%251 = fsub double 1.000000e+00, %250
%252 = load float, float* %14
%253 = fpext float %252 to double
%254 = fsub double %253, 1.000000e+00
%255 = call double @llvm.fmuladd.f64(double %251, double %254, double 1.000000e+00)
%256 = load double, double* %21
%257 = call double @sqrt(double %256)
%258 = fmul double %255, %257
%259 = fptrunc double %258 to float
store float %259, float* %14
%260 = load double, double* %17
%261 = fadd double %260, 5.000000e-01
%262 = call i32 @floor(double %261)
store i32 %262, i32* %15
%263 = load double, double* %18
%264 = fadd double %263, 5.000000e-01
%265 = call i32 @floor(double %264)
store i32 %265, i32* %16
%266 = load double, double* %17
%267 = load i32, i32* %8
%268 = sitofp i32 %267 to double
%269 = fsub double %266, %268
%270 = load i32, i32* %11
%271 = load i32, i32* %9
%272 = sub nsw i32 %270, %271
%273 = sitofp i32 %272 to double
%274 = fmul double %269, %273
%275 = load i32, i32* %10
%276 = load i32, i32* %8
%277 = sub nsw i32 %275, %276
%278 = sitofp i32 %277 to double
%279 = fdiv double %274, %278
%280 = load i32, i32* %9
%281 = sitofp i32 %280 to double
%282 = fadd double %279, %281
store double %282, double* %18
%283 = load i32, i32* %8
%284 = load i32, i32* %9
%285 = load i32, i32* %15
%286 = load double, double* %18
%287 = fadd double %286, 5.000000e-01
%288 = call i32 @floor(double %287)
%289 = load i32, i32* %15
%290 = load i32, i32* %16
%291 = load double, double* %19
%292 = fptrunc double %291 to float
%293 = call i32 @plotQuadRationalBezierSeg(i32 %283, i32 %284, i32 %285, i32 %288, i32 %289, i32 %290, float %292)
%294 = load double, double* %17
%295 = load i32, i32* %12
%296 = sitofp i32 %295 to double
%297 = fsub double %294, %296
%298 = load i32, i32* %11
%299 = load i32, i32* %13
%300 = sub nsw i32 %298, %299
%301 = sitofp i32 %300 to double
%302 = fmul double %297, %301
%303 = load i32, i32* %10
%304 = load i32, i32* %12
%305 = sub nsw i32 %303, %304
%306 = sitofp i32 %305 to double
%307 = fdiv double %302, %306
%308 = load i32, i32* %13
%309 = sitofp i32 %308 to double
%310 = fadd double %307, %309
store double %310, double* %18
%311 = load double, double* %18
%312 = fadd double %311, 5.000000e-01
%313 = call i32 @floor(double %312)
store i32 %313, i32* %11
%314 = load i32, i32* %15
store i32 %314, i32* %10
store i32 %314, i32* %8
%315 = load i32, i32* %16
store i32 %315, i32* %9
br label %316
316: ; preds = %165, %7
%317 = load i32, i32* %9
%318 = load i32, i32* %11
%319 = sub nsw i32 %317, %318
%320 = sext i32 %319 to i64
%321 = load i32, i32* %13
%322 = load i32, i32* %11
%323 = sub nsw i32 %321, %322
%324 = sext i32 %323 to i64
%325 = mul nsw i64 %320, %324
%326 = icmp sgt i64 %325, 0
br i1 %326, label %327, label %561
327: ; preds = %316
%328 = load i32, i32* %9
%329 = load i32, i32* %13
%330 = icmp eq i32 %328, %329
br i1 %330, label %335, label %331
331: ; preds = %327
%332 = load float, float* %14
%333 = fpext float %332 to double
%334 = fcmp oeq double %333, 1.000000e+00
br i1 %334, label %335, label %349
335: ; preds = %331, %327
%336 = load i32, i32* %9
%337 = load i32, i32* %11
%338 = sub nsw i32 %336, %337
%339 = sitofp i32 %338 to double
%340 = load i32, i32* %9
%341 = sitofp i32 %340 to double
%342 = load i32, i32* %11
%343 = sitofp i32 %342 to double
%344 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %343, double %341)
%345 = load i32, i32* %13
%346 = sitofp i32 %345 to double
%347 = fadd double %344, %346
%348 = fdiv double %339, %347
store double %348, double* %20
br label %410
349: ; preds = %331
%350 = load float, float* %14
%351 = fpext float %350 to double
%352 = fmul double 4.000000e+00, %351
%353 = load float, float* %14
%354 = fpext float %353 to double
%355 = fmul double %352, %354
%356 = load i32, i32* %9
%357 = load i32, i32* %11
%358 = sub nsw i32 %356, %357
%359 = sitofp i32 %358 to double
%360 = fmul double %355, %359
%361 = load i32, i32* %13
%362 = load i32, i32* %11
%363 = sub nsw i32 %361, %362
%364 = sitofp i32 %363 to double
%365 = load i32, i32* %13
%366 = load i32, i32* %9
%367 = sub nsw i32 %365, %366
%368 = sext i32 %367 to i64
%369 = load i32, i32* %13
%370 = load i32, i32* %9
%371 = sub nsw i32 %369, %370
%372 = sext i32 %371 to i64
%373 = mul nsw i64 %368, %372
%374 = sitofp i64 %373 to double
%375 = call double @llvm.fmuladd.f64(double %360, double %364, double %374)
%376 = call double @sqrt(double %375)
store double %376, double* %21
%377 = load i32, i32* %11
%378 = load i32, i32* %9
%379 = icmp slt i32 %377, %378
br i1 %379, label %380, label %383
380: ; preds = %349
%381 = load double, double* %21
%382 = fneg double %381
store double %382, double* %21
br label %383
383: ; preds = %380, %349
%384 = load float, float* %14
%385 = fpext float %384 to double
%386 = fmul double 2.000000e+00, %385
%387 = load i32, i32* %9
%388 = load i32, i32* %11
%389 = sub nsw i32 %387, %388
%390 = sitofp i32 %389 to double
%391 = load i32, i32* %9
%392 = sitofp i32 %391 to double
%393 = fneg double %392
%394 = call double @llvm.fmuladd.f64(double %386, double %390, double %393)
%395 = load i32, i32* %13
%396 = sitofp i32 %395 to double
%397 = fadd double %394, %396
%398 = load double, double* %21
%399 = fadd double %397, %398
%400 = load float, float* %14
%401 = fpext float %400 to double
%402 = fsub double 1.000000e+00, %401
%403 = fmul double 2.000000e+00, %402
%404 = load i32, i32* %13
%405 = load i32, i32* %9
%406 = sub nsw i32 %404, %405
%407 = sitofp i32 %406 to double
%408 = fmul double %403, %407
%409 = fdiv double %399, %408
store double %409, double* %20
br label %410
410: ; preds = %383, %335
%411 = load double, double* %20
%412 = fmul double 2.000000e+00, %411
%413 = load double, double* %20
%414 = fsub double 1.000000e+00, %413
%415 = fmul double %412, %414
%416 = load float, float* %14
%417 = fpext float %416 to double
%418 = fsub double %417, 1.000000e+00
%419 = call double @llvm.fmuladd.f64(double %415, double %418, double 1.000000e+00)
%420 = fdiv double 1.000000e+00, %419
store double %420, double* %21
%421 = load double, double* %20
%422 = load double, double* %20
%423 = fmul double %421, %422
%424 = load i32, i32* %8
%425 = sitofp i32 %424 to double
%426 = load float, float* %14
%427 = fpext float %426 to double
%428 = fmul double 2.000000e+00, %427
%429 = load i32, i32* %10
%430 = sitofp i32 %429 to double
%431 = fneg double %428
%432 = call double @llvm.fmuladd.f64(double %431, double %430, double %425)
%433 = load i32, i32* %12
%434 = sitofp i32 %433 to double
%435 = fadd double %432, %434
%436 = load double, double* %20
%437 = fmul double 2.000000e+00, %436
%438 = load float, float* %14
%439 = load i32, i32* %10
%440 = sitofp i32 %439 to float
%441 = load i32, i32* %8
%442 = sitofp i32 %441 to float
%443 = fneg float %442
%444 = call float @llvm.fmuladd.f32(float %438, float %440, float %443)
%445 = fpext float %444 to double
%446 = fmul double %437, %445
%447 = call double @llvm.fmuladd.f64(double %423, double %435, double %446)
%448 = load i32, i32* %8
%449 = sitofp i32 %448 to double
%450 = fadd double %447, %449
%451 = load double, double* %21
%452 = fmul double %450, %451
store double %452, double* %17
%453 = load double, double* %20
%454 = load double, double* %20
%455 = fmul double %453, %454
%456 = load i32, i32* %9
%457 = sitofp i32 %456 to double
%458 = load float, float* %14
%459 = fpext float %458 to double
%460 = fmul double 2.000000e+00, %459
%461 = load i32, i32* %11
%462 = sitofp i32 %461 to double
%463 = fneg double %460
%464 = call double @llvm.fmuladd.f64(double %463, double %462, double %457)
%465 = load i32, i32* %13
%466 = sitofp i32 %465 to double
%467 = fadd double %464, %466
%468 = load double, double* %20
%469 = fmul double 2.000000e+00, %468
%470 = load float, float* %14
%471 = load i32, i32* %11
%472 = sitofp i32 %471 to float
%473 = load i32, i32* %9
%474 = sitofp i32 %473 to float
%475 = fneg float %474
%476 = call float @llvm.fmuladd.f32(float %470, float %472, float %475)
%477 = fpext float %476 to double
%478 = fmul double %469, %477
%479 = call double @llvm.fmuladd.f64(double %455, double %467, double %478)
%480 = load i32, i32* %9
%481 = sitofp i32 %480 to double
%482 = fadd double %479, %481
%483 = load double, double* %21
%484 = fmul double %482, %483
store double %484, double* %18
%485 = load double, double* %20
%486 = load float, float* %14
%487 = fpext float %486 to double
%488 = fsub double %487, 1.000000e+00
%489 = call double @llvm.fmuladd.f64(double %485, double %488, double 1.000000e+00)
store double %489, double* %19
%490 = load double, double* %19
%491 = load double, double* %21
%492 = fmul double %490, %491
%493 = load double, double* %19
%494 = fmul double %493, %492
store double %494, double* %19
%495 = load double, double* %20
%496 = fsub double 1.000000e+00, %495
%497 = load float, float* %14
%498 = fpext float %497 to double
%499 = fsub double %498, 1.000000e+00
%500 = call double @llvm.fmuladd.f64(double %496, double %499, double 1.000000e+00)
%501 = load double, double* %21
%502 = call double @sqrt(double %501)
%503 = fmul double %500, %502
%504 = fptrunc double %503 to float
store float %504, float* %14
%505 = load double, double* %17
%506 = fadd double %505, 5.000000e-01
%507 = call i32 @floor(double %506)
store i32 %507, i32* %15
%508 = load double, double* %18
%509 = fadd double %508, 5.000000e-01
%510 = call i32 @floor(double %509)
store i32 %510, i32* %16
%511 = load i32, i32* %10
%512 = load i32, i32* %8
%513 = sub nsw i32 %511, %512
%514 = sitofp i32 %513 to double
%515 = load double, double* %18
%516 = load i32, i32* %9
%517 = sitofp i32 %516 to double
%518 = fsub double %515, %517
%519 = fmul double %514, %518
%520 = load i32, i32* %11
%521 = load i32, i32* %9
%522 = sub nsw i32 %520, %521
%523 = sitofp i32 %522 to double
%524 = fdiv double %519, %523
%525 = load i32, i32* %8
%526 = sitofp i32 %525 to double
%527 = fadd double %524, %526
store double %527, double* %17
%528 = load i32, i32* %8
%529 = load i32, i32* %9
%530 = load double, double* %17
%531 = fadd double %530, 5.000000e-01
%532 = call i32 @floor(double %531)
%533 = load i32, i32* %16
%534 = load i32, i32* %15
%535 = load i32, i32* %16
%536 = load double, double* %19
%537 = fptrunc double %536 to float
%538 = call i32 @plotQuadRationalBezierSeg(i32 %528, i32 %529, i32 %532, i32 %533, i32 %534, i32 %535, float %537)
%539 = load i32, i32* %10
%540 = load i32, i32* %12
%541 = sub nsw i32 %539, %540
%542 = sitofp i32 %541 to double
%543 = load double, double* %18
%544 = load i32, i32* %13
%545 = sitofp i32 %544 to double
%546 = fsub double %543, %545
%547 = fmul double %542, %546
%548 = load i32, i32* %11
%549 = load i32, i32* %13
%550 = sub nsw i32 %548, %549
%551 = sitofp i32 %550 to double
%552 = fdiv double %547, %551
%553 = load i32, i32* %12
%554 = sitofp i32 %553 to double
%555 = fadd double %552, %554
store double %555, double* %17
%556 = load double, double* %17
%557 = fadd double %556, 5.000000e-01
%558 = call i32 @floor(double %557)
store i32 %558, i32* %10
%559 = load i32, i32* %15
store i32 %559, i32* %8
%560 = load i32, i32* %16
store i32 %560, i32* %11
store i32 %560, i32* %9
br label %561
561: ; preds = %410, %316
%562 = load i32, i32* %8
%563 = load i32, i32* %9
%564 = load i32, i32* %10
%565 = load i32, i32* %11
%566 = load i32, i32* %12
%567 = load i32, i32* %13
%568 = load float, float* %14
%569 = load float, float* %14
%570 = fmul float %568, %569
%571 = call i32 @plotQuadRationalBezierSeg(i32 %562, i32 %563, i32 %564, i32 %565, i32 %566, i32 %567, float %570)
ret void
}

LLVM IR (-O2):
define void @plotQuadRationalBezier(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, float %6) {
%8 = mul i32 %2, -2
%9 = add i32 %8, %0
%10 = add nsw i32 %9, %4
%11 = mul i32 %3, -2
%12 = add i32 %11, %1
%13 = add nsw i32 %12, %5
%14 = sub nsw i32 %0, %2
%15 = sitofp i32 %14 to double
%16 = sub nsw i32 %1, %3
%17 = sitofp i32 %16 to double
%18 = fpext float %6 to double
%19 = fcmp oge float %6, 0.000000e+00
%20 = zext i1 %19 to i32
%21 = tail call i32 @assert(i32 %20)
%22 = sub nsw i32 %4, %2
%23 = sitofp i32 %22 to double
%24 = fmul double %15, %23
%25 = fcmp ogt double %24, 0.000000e+00
br i1 %25, label %26, label %162
26: ; preds = %7
%27 = sub nsw i32 %5, %3
%28 = sitofp i32 %27 to double
%29 = fmul double %17, %28
%30 = fcmp ogt double %29, 0.000000e+00
br i1 %30, label %31, label %46
31: ; preds = %26
%32 = sitofp i32 %13 to double
%33 = fmul double %15, %32
%34 = tail call i64 @fabs(double %33)
%35 = sitofp i32 %10 to double
%36 = fmul double %17, %35
%37 = tail call i64 @fabs(double %36)
%38 = icmp sgt i64 %34, %37
br i1 %38, label %39, label %46
39: ; preds = %31
%40 = sitofp i32 %2 to double
%41 = fadd double %40, %15
%42 = fptosi double %41 to i32
%43 = sitofp i32 %3 to double
%44 = fadd double %43, %17
%45 = fptosi double %44 to i32
br label %46
46: ; preds = %31, %39, %26
%47 = phi i32 [ %4, %39 ], [ %0, %31 ], [ %0, %26 ]
%48 = phi i32 [ %5, %39 ], [ %1, %31 ], [ %1, %26 ]
%49 = phi i32 [ %42, %39 ], [ %4, %31 ], [ %4, %26 ]
%50 = phi i32 [ %45, %39 ], [ %5, %31 ], [ %5, %26 ]
%51 = icmp eq i32 %49, %47
%52 = fcmp oeq float %6, 1.000000e+00
%53 = or i1 %52, %51
br i1 %53, label %54, label %61
54: ; preds = %46
%55 = sub nsw i32 %47, %2
%56 = sitofp i32 %55 to double
%57 = sitofp i32 %10 to double
%58 = fdiv double %56, %57
%59 = sitofp i32 %47 to double
%60 = sitofp i32 %49 to double
br label %90
61: ; preds = %46
%62 = fmul double %18, 4.000000e+00
%63 = fmul double %62, %18
%64 = sub nsw i32 %47, %2
%65 = sitofp i32 %64 to double
%66 = fmul double %63, %65
%67 = sub nsw i32 %49, %2
%68 = sitofp i32 %67 to double
%69 = sub nsw i32 %49, %47
%70 = sext i32 %69 to i64
%71 = mul nsw i64 %70, %70
%72 = sitofp i64 %71 to double
%73 = tail call double @llvm.fmuladd.f64(double %66, double %68, double %72)
%74 = tail call double @sqrt(double %73)
%75 = icmp sgt i32 %47, %2
%76 = fneg double %74
%77 = select i1 %75, double %76, double %74
%78 = fmul double %18, 2.000000e+00
%79 = sitofp i32 %47 to double
%80 = fneg double %79
%81 = tail call double @llvm.fmuladd.f64(double %78, double %65, double %80)
%82 = sitofp i32 %49 to double
%83 = fadd double %81, %82
%84 = fadd double %83, %77
%85 = fsub double 1.000000e+00, %18
%86 = fmul double %85, 2.000000e+00
%87 = sitofp i32 %69 to double
%88 = fmul double %86, %87
%89 = fdiv double %84, %88
br label %90
90: ; preds = %61, %54
%91 = phi double [ %82, %61 ], [ %60, %54 ]
%92 = phi double [ %79, %61 ], [ %59, %54 ]
%93 = phi double [ %89, %61 ], [ %58, %54 ]
%94 = fmul double %93, 2.000000e+00
%95 = fsub double 1.000000e+00, %93
%96 = fmul double %94, %95
%97 = fadd double %18, -1.000000e+00
%98 = tail call double @llvm.fmuladd.f64(double %96, double %97, double 1.000000e+00)
%99 = fdiv double 1.000000e+00, %98
%100 = fmul double %93, %93
%101 = sitofp i32 %2 to double
%102 = fmul double %18, -2.000000e+00
%103 = tail call double @llvm.fmuladd.f64(double %102, double %101, double %92)
%104 = fadd double %103, %91
%105 = sitofp i32 %2 to float
%106 = sitofp i32 %47 to float
%107 = fneg float %106
%108 = tail call float @llvm.fmuladd.f32(float %6, float %105, float %107)
%109 = fpext float %108 to double
%110 = fmul double %94, %109
%111 = tail call double @llvm.fmuladd.f64(double %100, double %104, double %110)
%112 = fadd double %111, %92
%113 = fmul double %112, %99
%114 = sitofp i32 %48 to double
%115 = sitofp i32 %3 to double
%116 = tail call double @llvm.fmuladd.f64(double %102, double %115, double %114)
%117 = sitofp i32 %50 to double
%118 = fadd double %116, %117
%119 = sitofp i32 %3 to float
%120 = sitofp i32 %48 to float
%121 = fneg float %120
%122 = tail call float @llvm.fmuladd.f32(float %6, float %119, float %121)
%123 = fpext float %122 to double
%124 = fmul double %94, %123
%125 = tail call double @llvm.fmuladd.f64(double %100, double %118, double %124)
%126 = fadd double %125, %114
%127 = fmul double %126, %99
%128 = tail call double @llvm.fmuladd.f64(double %93, double %97, double 1.000000e+00)
%129 = fmul double %128, %99
%130 = fmul double %128, %129
%131 = tail call double @llvm.fmuladd.f64(double %95, double %97, double 1.000000e+00)
%132 = tail call double @sqrt(double %99)
%133 = fmul double %132, %131
%134 = fptrunc double %133 to float
%135 = fadd double %113, 5.000000e-01
%136 = tail call i32 @floor(double %135)
%137 = fadd double %127, 5.000000e-01
%138 = tail call i32 @floor(double %137)
%139 = fsub double %113, %92
%140 = sub nsw i32 %3, %48
%141 = sitofp i32 %140 to double
%142 = fmul double %139, %141
%143 = sub nsw i32 %2, %47
%144 = sitofp i32 %143 to double
%145 = fdiv double %142, %144
%146 = fadd double %145, %114
%147 = fadd double %146, 5.000000e-01
%148 = tail call i32 @floor(double %147)
%149 = fptrunc double %130 to float
%150 = tail call i32 @plotQuadRationalBezierSeg(i32 %47, i32 %48, i32 %136, i32 %148, i32 %136, i32 %138, float %149)
%151 = fsub double %113, %91
%152 = sub nsw i32 %3, %50
%153 = sitofp i32 %152 to double
%154 = fmul double %151, %153
%155 = sub nsw i32 %2, %49
%156 = sitofp i32 %155 to double
%157 = fdiv double %154, %156
%158 = fadd double %157, %117
%159 = fadd double %158, 5.000000e-01
%160 = tail call i32 @floor(double %159)
%161 = sub nsw i32 %138, %160
br label %162
162: ; preds = %90, %7
%163 = phi i32 [ %161, %90 ], [ %16, %7 ]
%164 = phi i32 [ %136, %90 ], [ %0, %7 ]
%165 = phi i32 [ %138, %90 ], [ %1, %7 ]
%166 = phi i32 [ %136, %90 ], [ %2, %7 ]
%167 = phi i32 [ %160, %90 ], [ %3, %7 ]
%168 = phi i32 [ %49, %90 ], [ %4, %7 ]
%169 = phi i32 [ %50, %90 ], [ %5, %7 ]
%170 = phi float [ %134, %90 ], [ %6, %7 ]
%171 = sext i32 %163 to i64
%172 = sub nsw i32 %169, %167
%173 = sext i32 %172 to i64
%174 = mul nsw i64 %173, %171
%175 = icmp sgt i64 %174, 0
br i1 %175, label %176, label %288
176: ; preds = %162
%177 = icmp eq i32 %169, %165
%178 = fpext float %170 to double
%179 = fcmp oeq float %170, 1.000000e+00
%180 = select i1 %177, i1 true, i1 %179
br i1 %180, label %181, label %189
181: ; preds = %176
%182 = sitofp i32 %163 to double
%183 = sitofp i32 %165 to double
%184 = sitofp i32 %167 to double
%185 = tail call double @llvm.fmuladd.f64(double %184, double -2.000000e+00, double %183)
%186 = sitofp i32 %169 to double
%187 = fadd double %185, %186
%188 = fdiv double %182, %187
br label %217
189: ; preds = %176
%190 = fmul double %178, 4.000000e+00
%191 = fmul double %190, %178
%192 = sitofp i32 %163 to double
%193 = fmul double %191, %192
%194 = sitofp i32 %172 to double
%195 = sub nsw i32 %169, %165
%196 = sext i32 %195 to i64
%197 = mul nsw i64 %196, %196
%198 = sitofp i64 %197 to double
%199 = tail call double @llvm.fmuladd.f64(double %193, double %194, double %198)
%200 = tail call double @sqrt(double %199)
%201 = icmp slt i32 %167, %165
%202 = fneg double %200
%203 = select i1 %201, double %202, double %200
%204 = fmul double %178, 2.000000e+00
%205 = sitofp i32 %165 to double
%206 = fneg double %205
%207 = tail call double @llvm.fmuladd.f64(double %204, double %192, double %206)
%208 = sitofp i32 %169 to double
%209 = fadd double %207, %208
%210 = fadd double %209, %203
%211 = fsub double 1.000000e+00, %178
%212 = fmul double %211, 2.000000e+00
%213 = sitofp i32 %195 to double
%214 = fmul double %212, %213
%215 = fdiv double %210, %214
%216 = sitofp i32 %167 to double
br label %217
217: ; preds = %189, %181
%218 = phi double [ %208, %189 ], [ %186, %181 ]
%219 = phi double [ %216, %189 ], [ %184, %181 ]
%220 = phi double [ %205, %189 ], [ %183, %181 ]
%221 = phi double [ %215, %189 ], [ %188, %181 ]
%222 = fmul double %221, 2.000000e+00
%223 = fsub double 1.000000e+00, %221
%224 = fmul double %222, %223
%225 = fadd double %178, -1.000000e+00
%226 = tail call double @llvm.fmuladd.f64(double %224, double %225, double 1.000000e+00)
%227 = fdiv double 1.000000e+00, %226
%228 = fmul double %221, %221
%229 = sitofp i32 %164 to double
%230 = sitofp i32 %166 to double
%231 = fmul double %178, -2.000000e+00
%232 = tail call double @llvm.fmuladd.f64(double %231, double %230, double %229)
%233 = sitofp i32 %168 to double
%234 = fadd double %232, %233
%235 = sitofp i32 %166 to float
%236 = sitofp i32 %164 to float
%237 = fneg float %236
%238 = tail call float @llvm.fmuladd.f32(float %170, float %235, float %237)
%239 = fpext float %238 to double
%240 = fmul double %222, %239
%241 = tail call double @llvm.fmuladd.f64(double %228, double %234, double %240)
%242 = fadd double %241, %229
%243 = fmul double %242, %227
%244 = tail call double @llvm.fmuladd.f64(double %231, double %219, double %220)
%245 = fadd double %244, %218
%246 = sitofp i32 %167 to float
%247 = sitofp i32 %165 to float
%248 = fneg float %247
%249 = tail call float @llvm.fmuladd.f32(float %170, float %246, float %248)
%250 = fpext float %249 to double
%251 = fmul double %222, %250
%252 = tail call double @llvm.fmuladd.f64(double %228, double %245, double %251)
%253 = fadd double %252, %220
%254 = fmul double %253, %227
%255 = tail call double @llvm.fmuladd.f64(double %221, double %225, double 1.000000e+00)
%256 = fmul double %255, %227
%257 = fmul double %255, %256
%258 = tail call double @llvm.fmuladd.f64(double %223, double %225, double 1.000000e+00)
%259 = tail call double @sqrt(double %227)
%260 = fmul double %259, %258
%261 = fptrunc double %260 to float
%262 = fadd double %243, 5.000000e-01
%263 = tail call i32 @floor(double %262)
%264 = fadd double %254, 5.000000e-01
%265 = tail call i32 @floor(double %264)
%266 = sub nsw i32 %166, %164
%267 = sitofp i32 %266 to double
%268 = fsub double %254, %220
%269 = fmul double %268, %267
%270 = sub nsw i32 %167, %165
%271 = sitofp i32 %270 to double
%272 = fdiv double %269, %271
%273 = fadd double %272, %229
%274 = fadd double %273, 5.000000e-01
%275 = tail call i32 @floor(double %274)
%276 = fptrunc double %257 to float
%277 = tail call i32 @plotQuadRationalBezierSeg(i32 %164, i32 %165, i32 %275, i32 %265, i32 %263, i32 %265, float %276)
%278 = sub nsw i32 %166, %168
%279 = sitofp i32 %278 to double
%280 = fsub double %254, %218
%281 = fmul double %280, %279
%282 = sub nsw i32 %167, %169
%283 = sitofp i32 %282 to double
%284 = fdiv double %281, %283
%285 = fadd double %284, %233
%286 = fadd double %285, 5.000000e-01
%287 = tail call i32 @floor(double %286)
br label %288
288: ; preds = %217, %162
%289 = phi i32 [ %263, %217 ], [ %164, %162 ]
%290 = phi i32 [ %265, %217 ], [ %165, %162 ]
%291 = phi i32 [ %287, %217 ], [ %166, %162 ]
%292 = phi i32 [ %265, %217 ], [ %167, %162 ]
%293 = phi float [ %261, %217 ], [ %170, %162 ]
%294 = fmul float %293, %293
%295 = tail call i32 @plotQuadRationalBezierSeg(i32 %289, i32 %290, i32 %291, i32 %292, i32 %168, i32 %169, float %294)
ret void
}