void plotQuadRationalBezierSeg(int x0, int y0, int x1, int y1, int x2, int y2,
                               float w) {
  int sx = x2 - x1, sy = y2 - y1;
  double dx = x0 - x2, dy = y0 - y2, xx = x0 - x1, yy = y0 - y1;
  double xy = xx * sy + yy * sx, cur = xx * sy - yy * sx, err;
  assert(xx * sx <= 0.0 && yy * sy <= 0.0);
  if (cur != 0.0 && w > 0.0) {
    if (sx * (long)sx + sy * (long)sy > xx * xx + yy * yy) {
      x2 = x0;
      x0 -= dx;
      y2 = y0;
      y0 -= dy;
      cur = -cur;
    }
    xx = 2.0 * (4.0 * w * sx * xx + dx * dx);
    yy = 2.0 * (4.0 * w * sy * yy + dy * dy);
    sx = x0 < x2 ? 1 : -1;
    sy = y0 < y2 ? 1 : -1;
    xy = -2.0 * sx * sy * (2.0 * w * xy + dx * dy);
    if (cur * sx * sy < 0.0) {
      xx = -xx;
      yy = -yy;
      xy = -xy;
      cur = -cur;
    }
    dx = 4.0 * w * (x1 - x0) * sy * cur + xx / 2.0 + xy;
    dy = 4.0 * w * (y0 - y1) * sx * cur + yy / 2.0 + xy;
    if (w < 0.5 && (dy > xy || dx < xy)) {
      cur = (w + 1.0) / 2.0;
      w = sqrt(w);
      xy = 1.0 / (w + 1.0);
      sx = floor((x0 + 2.0 * w * x1 + x2) * xy / 2.0 + 0.5);
      sy = floor((y0 + 2.0 * w * y1 + y2) * xy / 2.0 + 0.5);
      dx = floor((w * x1 + x0) * xy + 0.5);
      dy = floor((y1 * w + y0) * xy + 0.5);
      plotQuadRationalBezierSeg(x0, y0, dx, dy, sx, sy, cur);
      dx = floor((w * x1 + x2) * xy + 0.5);
      dy = floor((y1 * w + y2) * xy + 0.5);
      plotQuadRationalBezierSeg(sx, sy, dx, dy, x2, y2, cur);
      return;
    }
    err = dx + dy - xy;
    do {
      setPixel(x0, y0);
      if (x0 == x2 && y0 == y2)
        return;
      x1 = 2 * err > dy;
      y1 = 2 * (err + yy) < -dy;
      if (2 * err < dx || y1) {
        y0 += sy;
        dy += xy;
        err += dx += xx;
      }
      if (2 * err > dx || x1) {
        x0 += sx;
        dx += xy;
        err += dy += yy;
      }
    } while (dy <= xy && dx >= xy);
  }
  plotLine(x0, y0, x2, y2);
}


x86 assembly (clang, -O0):
<plotQuadRationalBezierSeg>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%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    -0x14(%rbp),%eax
sub    -0xc(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x10(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x4(%rbp),%eax
sub    -0x14(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x8(%rbp),%eax
sub    -0x18(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x4(%rbp),%eax
sub    -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%eax
sub    -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
cvtsi2sdl -0x24(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
cvtsi2sdl -0x20(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
cvtsi2sdl -0x24(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
cvtsi2sdl -0x20(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm1
cvtsi2sdl -0x20(%rbp),%xmm0
mulsd  %xmm0,%xmm1
xor    %eax,%eax
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
mov    %al,-0x61(%rbp)
jb     126b <plotQuadRationalBezierSeg+0x10b>
movsd  -0x48(%rbp),%xmm1
cvtsi2sdl -0x24(%rbp),%xmm0
mulsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
setae  %al
mov    %al,-0x61(%rbp)
mov    -0x61(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
movsd  -0x58(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1297 <plotQuadRationalBezierSeg+0x137>
jp     1297 <plotQuadRationalBezierSeg+0x137>
jmp    19b6 <plotQuadRationalBezierSeg+0x856>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    19b6 <plotQuadRationalBezierSeg+0x856>
movslq -0x20(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   %rcx,%rax
movslq -0x24(%rbp),%rcx
movslq -0x24(%rbp),%rdx
imul   %rdx,%rcx
add    %rcx,%rax
cvtsi2sd %rax,%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    134a <plotQuadRationalBezierSeg+0x1ea>
mov    -0x4(%rbp),%eax
mov    %eax,-0x14(%rbp)
movsd  -0x30(%rbp),%xmm1
cvtsi2sdl -0x4(%rbp),%xmm0
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x18(%rbp)
movsd  -0x38(%rbp),%xmm1
cvtsi2sdl -0x8(%rbp),%xmm0
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x8(%rbp)
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcb5(%rip),%xmm1
mulsd  %xmm0,%xmm1
cvtsi2sdl -0x20(%rbp),%xmm0
mulsd  %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xc79(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc6f(%rip),%xmm1
mulsd  %xmm0,%xmm1
cvtsi2sdl -0x24(%rbp),%xmm0
mulsd  %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xc33(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x4(%rbp),%edx
mov    -0x14(%rbp),%esi
mov    $0xffffffff,%eax
mov    $0x1,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%edx
mov    -0x18(%rbp),%esi
mov    $0xffffffff,%eax
mov    $0x1,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x24(%rbp)
cvtsi2sdl -0x20(%rbp),%xmm1
movsd  0xbf5(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movss  -0x1c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xbcf(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  -0x50(%rbp),%xmm3
movsd  -0x30(%rbp),%xmm2
mulsd  -0x38(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x58(%rbp),%xmm1
cvtsi2sdl -0x20(%rbp),%xmm0
mulsd  %xmm0,%xmm1
cvtsi2sdl -0x24(%rbp),%xmm0
mulsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    14fd <plotQuadRationalBezierSeg+0x39d>
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x48(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb02(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0xc(%rbp),%eax
sub    -0x4(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
movsd  0xac5(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xaae(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%eax
sub    -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x20(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
movsd  0xa71(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xa62(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1832 <plotQuadRationalBezierSeg+0x6d2>
movsd  -0x38(%rbp),%xmm0
ucomisd -0x50(%rbp),%xmm0
ja     15e4 <plotQuadRationalBezierSeg+0x484>
movsd  -0x30(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1832 <plotQuadRationalBezierSeg+0x6d2>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa2b(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0x9ff(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1070 <sqrt@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x9ee(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  0x9e2(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
cvtsi2sdl -0x4(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0x9a3(%rip),%xmm0
mulsd  %xmm2,%xmm0
cvtsi2sdl -0xc(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  0x97c(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0x988(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1080 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x20(%rbp)
cvtsi2sdl -0x8(%rbp),%xmm1
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0x94a(%rip),%xmm0
mulsd  %xmm2,%xmm0
cvtsi2sdl -0x10(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0x18(%rbp),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  0x923(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0x92f(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1080 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x24(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtsi2ssl -0xc(%rbp),%xmm2
cvtsi2ssl -0x4(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x8f3(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1080 <floor@plt>
movsd  %xmm0,-0x30(%rbp)
cvtsi2ssl -0x10(%rbp),%xmm0
movss  -0x1c(%rbp),%xmm2
cvtsi2ssl -0x8(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x8b9(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1080 <floor@plt>
movsd  %xmm0,-0x38(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
cvttsd2si -0x30(%rbp),%edx
cvttsd2si -0x38(%rbp),%ecx
mov    -0x20(%rbp),%r8d
mov    -0x24(%rbp),%r9d
movsd  -0x58(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1060 <plotQuadRationalBezierSeg@plt>
movss  -0x1c(%rbp),%xmm0
cvtsi2ssl -0xc(%rbp),%xmm2
cvtsi2ssl -0x14(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x859(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1080 <floor@plt>
movsd  %xmm0,-0x30(%rbp)
cvtsi2ssl -0x10(%rbp),%xmm0
movss  -0x1c(%rbp),%xmm2
cvtsi2ssl -0x18(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x81f(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1080 <floor@plt>
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%edi
mov    -0x24(%rbp),%esi
cvttsd2si -0x30(%rbp),%edx
cvttsd2si -0x38(%rbp),%ecx
mov    -0x14(%rbp),%r8d
mov    -0x18(%rbp),%r9d
movsd  -0x58(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1060 <plotQuadRationalBezierSeg@plt>
jmp    19c9 <plotQuadRationalBezierSeg+0x869>
movsd  -0x30(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    $0x0,%al
call   1030 <setPixel@plt>
mov    -0x4(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    1870 <plotQuadRationalBezierSeg+0x710>
mov    -0x8(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    1870 <plotQuadRationalBezierSeg+0x710>
jmp    19c9 <plotQuadRationalBezierSeg+0x869>
movsd  0x788(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
ucomisd -0x38(%rbp),%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0xc(%rbp)
movsd  -0x60(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  0x761(%rip),%xmm1
mulsd  %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x10(%rbp)
movsd  0x72a(%rip),%xmm1
mulsd  -0x60(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
ucomisd %xmm1,%xmm0
ja     18f4 <plotQuadRationalBezierSeg+0x794>
cmpl   $0x0,-0x10(%rbp)
je     1925 <plotQuadRationalBezierSeg+0x7c5>
mov    -0x24(%rbp),%eax
add    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
movsd  -0x50(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x40(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0x6d3(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
ucomisd -0x30(%rbp),%xmm0
ja     1947 <plotQuadRationalBezierSeg+0x7e7>
cmpl   $0x0,-0xc(%rbp)
je     1978 <plotQuadRationalBezierSeg+0x818>
mov    -0x20(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
movsd  -0x50(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x48(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    197d <plotQuadRationalBezierSeg+0x81d>
movsd  -0x38(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
xor    %eax,%eax
ucomisd %xmm1,%xmm0
mov    %al,-0x62(%rbp)
jb     19a6 <plotQuadRationalBezierSeg+0x846>
movsd  -0x30(%rbp),%xmm0
ucomisd -0x50(%rbp),%xmm0
setae  %al
mov    %al,-0x62(%rbp)
mov    -0x62(%rbp),%al
test   $0x1,%al
jne    1846 <plotQuadRationalBezierSeg+0x6e6>
jmp    19b6 <plotQuadRationalBezierSeg+0x856>
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    -0x14(%rbp),%edx
mov    -0x18(%rbp),%ecx
mov    $0x0,%al
call   1050 <plotLine@plt>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<plotQuadRationalBezierSeg>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
movss  %xmm0,(%rsp)
mov    %esi,%r15d
mov    %edi,%r14d
jmp    1369 <plotQuadRationalBezierSeg+0x209>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movaps %xmm9,%xmm0
call   1050 <sqrtf@plt>
mov    0x40(%rsp),%esi
mov    0x30(%rsp),%edx
movss  %xmm0,0x20(%rsp)
xorps  %xmm4,%xmm4
cvtss2sd %xmm0,%xmm4
movaps %xmm4,%xmm0
movsd  0xe6f(%rip),%xmm1
addsd  %xmm1,%xmm0
movapd %xmm1,%xmm2
xorps  %xmm1,%xmm1
cvtsi2sd %ebx,%xmm1
divsd  %xmm0,%xmm2
movapd %xmm2,%xmm3
movsd  %xmm2,0x10(%rsp)
addsd  %xmm4,%xmm4
movsd  %xmm4,(%rsp)
xorps  %xmm2,%xmm2
cvtsi2sd %esi,%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm1,%xmm2
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
addsd  %xmm2,%xmm0
mulsd  %xmm3,%xmm0
movsd  0xe1b(%rip),%xmm1
mulsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
mov    %ebx,%r14d
mov    %esi,%ebx
call   1080 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,0x40(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %r13d,%xmm0
mov    0x8(%rsp),%ebp
xorps  %xmm1,%xmm1
cvtsi2sd %ebp,%xmm1
mulsd  (%rsp),%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %r12d,%xmm0
addsd  %xmm1,%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  0xdcb(%rip),%xmm1
mulsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
call   1080 <floor@plt>
cvttsd2si %xmm0,%r15d
xorps  %xmm1,%xmm1
cvtsi2ss %ebx,%xmm1
xorps  %xmm0,%xmm0
cvtsi2ss %r14d,%xmm0
mulss  0x20(%rsp),%xmm1
movss  %xmm1,0x58(%rsp)
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  0x10(%rsp),%xmm0
addsd  0xd88(%rip),%xmm0
call   1080 <floor@plt>
movsd  %xmm0,(%rsp)
xorps  %xmm1,%xmm1
cvtsi2ss %ebp,%xmm1
xorps  %xmm0,%xmm0
cvtsi2ss %r13d,%xmm0
mulss  0x20(%rsp),%xmm1
movss  %xmm1,0x8(%rsp)
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  0x10(%rsp),%xmm0
addsd  0xd4d(%rip),%xmm0
call   1080 <floor@plt>
cvttsd2si (%rsp),%edx
cvttsd2si %xmm0,%ecx
movsd  0x60(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
mov    %r14d,%edi
mov    0x40(%rsp),%r14d
mov    %r13d,%esi
mov    %r14d,%r8d
mov    %r15d,%r9d
movss  %xmm0,(%rsp)
call   1070 <plotQuadRationalBezierSeg@plt>
xorps  %xmm0,%xmm0
cvtsi2ssl 0x30(%rsp),%xmm0
addss  0x58(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  0x10(%rsp),%xmm0
addsd  0xcf9(%rip),%xmm0
call   1080 <floor@plt>
movsd  %xmm0,0x20(%rsp)
xorps  %xmm0,%xmm0
cvtsi2ss %r12d,%xmm0
addss  0x8(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  0x10(%rsp),%xmm0
addsd  0xcce(%rip),%xmm0
call   1080 <floor@plt>
mov    0x30(%rsp),%r8d
mov    %r12d,%r9d
cvttsd2si 0x20(%rsp),%edx
cvttsd2si %xmm0,%ecx
mov    %r8d,%r13d
mov    %r8d,%ebp
mov    %r9d,%r12d
mov    %r9d,%ebx
sub    %ecx,%ebx
mov    %r14d,%eax
sub    %edx,%eax
cvtsi2sd %eax,%xmm4
mov    %r15d,%eax
mov    %ecx,0x8(%rsp)
sub    %ecx,%eax
cvtsi2sd %eax,%xmm3
xorps  %xmm1,%xmm1
cvtsi2sd %ebx,%xmm1
mov    %edx,0x40(%rsp)
sub    %edx,%ebp
cvtsi2sd %ebp,%xmm2
movapd %xmm3,%xmm5
mulsd  %xmm2,%xmm5
movapd %xmm4,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x60(%rsp)
movapd %xmm0,%xmm6
movsd  %xmm4,0x80(%rsp)
movapd %xmm4,%xmm0
movapd %xmm2,0x20(%rsp)
mulsd  %xmm2,%xmm0
xorpd  %xmm2,%xmm2
ucomisd %xmm0,%xmm2
setae  %al
movsd  %xmm3,0x58(%rsp)
movapd %xmm3,%xmm0
movapd %xmm1,0x10(%rsp)
mulsd  %xmm1,%xmm0
ucomisd %xmm0,%xmm2
movsd  %xmm5,0x78(%rsp)
subsd  %xmm5,%xmm6
movapd %xmm6,0x30(%rsp)
setae  %cl
and    %al,%cl
movzbl %cl,%edi
xor    %eax,%eax
call   1040 <assert@plt>
movapd 0x30(%rsp),%xmm12
xorpd  %xmm8,%xmm8
ucomisd 0xc0a(%rip),%xmm12
jne    142e <plotQuadRationalBezierSeg+0x2ce>
jnp    1671 <plotQuadRationalBezierSeg+0x511>
movss  (%rsp),%xmm9
ucomiss 0xc00(%rip),%xmm9
jbe    1671 <plotQuadRationalBezierSeg+0x511>
mov    %r14d,%eax
sub    %r13d,%eax
cvtsi2sd %eax,%xmm7
mov    %r15d,%eax
sub    %r12d,%eax
cvtsi2sd %eax,%xmm13
movslq %ebp,%rax
imul   %rax,%rax
movslq %ebx,%rcx
imul   %rcx,%rcx
add    %rax,%rcx
xorps  %xmm0,%xmm0
cvtsi2sd %rcx,%xmm0
movsd  0x58(%rsp),%xmm4
movapd %xmm4,%xmm2
mulsd  %xmm4,%xmm2
movsd  0x80(%rsp),%xmm5
movapd %xmm5,%xmm3
mulsd  %xmm5,%xmm3
addsd  %xmm2,%xmm3
ucomisd %xmm3,%xmm0
jbe    14d0 <plotQuadRationalBezierSeg+0x370>
xorps  %xmm0,%xmm0
cvtsi2sd %r14d,%xmm0
subsd  %xmm7,%xmm0
cvttsd2si %xmm0,%ebx
xorps  %xmm0,%xmm0
cvtsi2sd %r15d,%xmm0
subsd  %xmm13,%xmm0
cvttsd2si %xmm0,%r13d
xorpd  0xb3c(%rip),%xmm12
mov    %r14d,%edx
mov    %r15d,%r12d
jmp    14d9 <plotQuadRationalBezierSeg+0x379>
nopl   0x0(%rax)
mov    %r13d,%edx
mov    %r14d,%ebx
mov    %r15d,%r13d
mov    0x8(%rsp),%ecx
mov    0x40(%rsp),%esi
movapd 0x10(%rsp),%xmm10
movapd 0x20(%rsp),%xmm6
movsd  0x60(%rsp),%xmm1
addsd  0x78(%rsp),%xmm1
cvtss2sd %xmm9,%xmm11
movaps %xmm11,%xmm0
mulsd  0xb05(%rip),%xmm0
mulsd  %xmm0,%xmm6
movapd %xmm7,%xmm2
mulsd  %xmm7,%xmm2
mulsd  %xmm5,%xmm6
addsd  %xmm2,%xmm6
addsd  %xmm6,%xmm6
mulsd  %xmm0,%xmm10
movapd %xmm13,%xmm2
mulsd  %xmm13,%xmm2
mulsd  %xmm4,%xmm10
addsd  %xmm2,%xmm10
addsd  %xmm10,%xmm10
xor    %eax,%eax
cmp    %edx,%ebx
setl   %al
lea    (%rax,%rax,1),%r14d
add    $0xffffffff,%r14d
xor    %eax,%eax
cmp    %r12d,%r13d
setl   %al
lea    -0x1(%rax,%rax,1),%r15d
xorps  %xmm2,%xmm2
cvtsi2sd %r14d,%xmm2
movapd %xmm2,%xmm4
mulsd  0xaa7(%rip),%xmm4
xorps  %xmm3,%xmm3
cvtsi2sd %r15d,%xmm3
mulsd  %xmm3,%xmm4
movaps %xmm11,%xmm5
addsd  %xmm11,%xmm5
mulsd  %xmm1,%xmm5
mulsd  %xmm13,%xmm7
addsd  %xmm5,%xmm7
mulsd  %xmm4,%xmm7
movapd %xmm12,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm3,%xmm1
ucomisd %xmm1,%xmm8
jbe    15c5 <plotQuadRationalBezierSeg+0x465>
movapd 0xa4d(%rip),%xmm1
xorpd  %xmm1,%xmm6
xorpd  %xmm1,%xmm10
xorpd  %xmm1,%xmm7
xorpd  %xmm1,%xmm12
mov    %esi,%eax
sub    %ebx,%eax
xorps  %xmm4,%xmm4
cvtsi2sd %eax,%xmm4
mulsd  %xmm0,%xmm4
mulsd  %xmm3,%xmm4
movapd %xmm6,%xmm1
movsd  0xa3c(%rip),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm12,%xmm4
addsd  %xmm1,%xmm4
addsd  %xmm7,%xmm4
mov    %r13d,%eax
sub    %ecx,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm2,%xmm1
movapd %xmm10,%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm12,%xmm1
addsd  %xmm0,%xmm1
addsd  %xmm7,%xmm1
movss  0xa11(%rip),%xmm0
ucomiss %xmm9,%xmm0
mov    %edx,0x30(%rsp)
jbe    1679 <plotQuadRationalBezierSeg+0x519>
ucomisd %xmm7,%xmm1
ja     163d <plotQuadRationalBezierSeg+0x4dd>
ucomisd %xmm4,%xmm7
jbe    1679 <plotQuadRationalBezierSeg+0x519>
addsd  0x9e2(%rip),%xmm11
mulsd  0x9d1(%rip),%xmm11
movsd  %xmm11,0x60(%rsp)
ucomiss 0x9de(%rip),%xmm9
jb     1190 <plotQuadRationalBezierSeg+0x30>
xorps  %xmm0,%xmm0
sqrtss %xmm9,%xmm0
jmp    11a1 <plotQuadRationalBezierSeg+0x41>
mov    %r13d,%edx
jmp    178d <plotQuadRationalBezierSeg+0x62d>
movapd %xmm4,%xmm5
addsd  %xmm1,%xmm5
subsd  %xmm7,%xmm5
movapd %xmm10,0x10(%rsp)
movapd %xmm6,0x20(%rsp)
movapd %xmm7,0x60(%rsp)
nopl   0x0(%rax,%rax,1)
movsd  %xmm5,(%rsp)
movapd %xmm1,0x40(%rsp)
movsd  %xmm4,0x8(%rsp)
mov    %ebx,%edi
mov    %r13d,%esi
xor    %eax,%eax
call   1030 <setPixel@plt>
cmp    0x30(%rsp),%ebx
jne    16cf <plotQuadRationalBezierSeg+0x56f>
mov    %r12d,%eax
cmp    %r12d,%r13d
je     17ae <plotQuadRationalBezierSeg+0x64e>
movsd  (%rsp),%xmm5
movapd %xmm5,%xmm0
addsd  %xmm5,%xmm0
movsd  0x8(%rsp),%xmm4
ucomisd %xmm0,%xmm4
movapd 0x10(%rsp),%xmm10
movapd 0x40(%rsp),%xmm3
ja     1730 <plotQuadRationalBezierSeg+0x5d0>
movapd %xmm10,%xmm1
addsd  %xmm5,%xmm1
addsd  %xmm1,%xmm1
movapd %xmm3,%xmm2
xorpd  0x8f2(%rip),%xmm2
ucomisd %xmm1,%xmm2
ja     1730 <plotQuadRationalBezierSeg+0x5d0>
movapd %xmm0,%xmm2
movapd %xmm3,%xmm1
movapd 0x60(%rsp),%xmm7
ucomisd %xmm4,%xmm2
jbe    175d <plotQuadRationalBezierSeg+0x5fd>
jmp    1763 <plotQuadRationalBezierSeg+0x603>
nopw   0x0(%rax,%rax,1)
add    %r15d,%r13d
movapd 0x60(%rsp),%xmm7
movapd %xmm7,%xmm1
addsd  %xmm3,%xmm1
movapd 0x20(%rsp),%xmm6
addsd  %xmm6,%xmm4
addsd  %xmm4,%xmm5
movapd %xmm5,%xmm2
addsd  %xmm5,%xmm2
ucomisd %xmm4,%xmm2
ja     1763 <plotQuadRationalBezierSeg+0x603>
ucomisd %xmm3,%xmm0
jbe    1773 <plotQuadRationalBezierSeg+0x613>
add    %r14d,%ebx
addsd  %xmm7,%xmm4
addsd  %xmm10,%xmm1
addsd  %xmm1,%xmm5
ucomisd %xmm1,%xmm7
jb     1783 <plotQuadRationalBezierSeg+0x623>
ucomisd %xmm7,%xmm4
jae    16a0 <plotQuadRationalBezierSeg+0x540>
mov    %ebx,%r14d
mov    %r13d,%r15d
mov    0x30(%rsp),%edx
mov    %r14d,%edi
mov    %r15d,%esi
mov    %r12d,%ecx
xor    %eax,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1060 <plotLine@plt>
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @plotQuadRationalBezierSeg(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
%22 = alloca double
%23 = 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
%24 = load i32, i32* %12
%25 = load i32, i32* %10
%26 = sub nsw i32 %24, %25
store i32 %26, i32* %15
%27 = load i32, i32* %13
%28 = load i32, i32* %11
%29 = sub nsw i32 %27, %28
store i32 %29, i32* %16
%30 = load i32, i32* %8
%31 = load i32, i32* %12
%32 = sub nsw i32 %30, %31
%33 = sitofp i32 %32 to double
store double %33, double* %17
%34 = load i32, i32* %9
%35 = load i32, i32* %13
%36 = sub nsw i32 %34, %35
%37 = sitofp i32 %36 to double
store double %37, double* %18
%38 = load i32, i32* %8
%39 = load i32, i32* %10
%40 = sub nsw i32 %38, %39
%41 = sitofp i32 %40 to double
store double %41, double* %19
%42 = load i32, i32* %9
%43 = load i32, i32* %11
%44 = sub nsw i32 %42, %43
%45 = sitofp i32 %44 to double
store double %45, double* %20
%46 = load double, double* %19
%47 = load i32, i32* %16
%48 = sitofp i32 %47 to double
%49 = load double, double* %20
%50 = load i32, i32* %15
%51 = sitofp i32 %50 to double
%52 = fmul double %49, %51
%53 = call double @llvm.fmuladd.f64(double %46, double %48, double %52)
store double %53, double* %21
%54 = load double, double* %19
%55 = load i32, i32* %16
%56 = sitofp i32 %55 to double
%57 = load double, double* %20
%58 = load i32, i32* %15
%59 = sitofp i32 %58 to double
%60 = fmul double %57, %59
%61 = fneg double %60
%62 = call double @llvm.fmuladd.f64(double %54, double %56, double %61)
store double %62, double* %22
%63 = load double, double* %19
%64 = load i32, i32* %15
%65 = sitofp i32 %64 to double
%66 = fmul double %63, %65
%67 = fcmp ole double %66, 0.000000e+00
br i1 %67, label %68, label %74
68: ; preds = %7
%69 = load double, double* %20
%70 = load i32, i32* %16
%71 = sitofp i32 %70 to double
%72 = fmul double %69, %71
%73 = fcmp ole double %72, 0.000000e+00
br label %74
74: ; preds = %68, %7
%75 = phi i1 [ false, %7 ], [ %73, %68 ]
%76 = zext i1 %75 to i32
%77 = call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %76)
%78 = load double, double* %22
%79 = fcmp une double %78, 0.000000e+00
br i1 %79, label %80, label %422
80: ; preds = %74
%81 = load float, float* %14
%82 = fpext float %81 to double
%83 = fcmp ogt double %82, 0.000000e+00
br i1 %83, label %84, label %422
84: ; preds = %80
%85 = load i32, i32* %15
%86 = sext i32 %85 to i64
%87 = load i32, i32* %15
%88 = sext i32 %87 to i64
%89 = mul nsw i64 %86, %88
%90 = load i32, i32* %16
%91 = sext i32 %90 to i64
%92 = load i32, i32* %16
%93 = sext i32 %92 to i64
%94 = mul nsw i64 %91, %93
%95 = add nsw i64 %89, %94
%96 = sitofp i64 %95 to double
%97 = load double, double* %19
%98 = load double, double* %19
%99 = load double, double* %20
%100 = load double, double* %20
%101 = fmul double %99, %100
%102 = call double @llvm.fmuladd.f64(double %97, double %98, double %101)
%103 = fcmp ogt double %96, %102
br i1 %103, label %104, label %119
104: ; preds = %84
%105 = load i32, i32* %8
store i32 %105, i32* %12
%106 = load double, double* %17
%107 = load i32, i32* %8
%108 = sitofp i32 %107 to double
%109 = fsub double %108, %106
%110 = fptosi double %109 to i32
store i32 %110, i32* %8
%111 = load i32, i32* %9
store i32 %111, i32* %13
%112 = load double, double* %18
%113 = load i32, i32* %9
%114 = sitofp i32 %113 to double
%115 = fsub double %114, %112
%116 = fptosi double %115 to i32
store i32 %116, i32* %9
%117 = load double, double* %22
%118 = fneg double %117
store double %118, double* %22
br label %119
119: ; preds = %104, %84
%120 = load float, float* %14
%121 = fpext float %120 to double
%122 = fmul double 4.000000e+00, %121
%123 = load i32, i32* %15
%124 = sitofp i32 %123 to double
%125 = fmul double %122, %124
%126 = load double, double* %19
%127 = load double, double* %17
%128 = load double, double* %17
%129 = fmul double %127, %128
%130 = call double @llvm.fmuladd.f64(double %125, double %126, double %129)
%131 = fmul double 2.000000e+00, %130
store double %131, double* %19
%132 = load float, float* %14
%133 = fpext float %132 to double
%134 = fmul double 4.000000e+00, %133
%135 = load i32, i32* %16
%136 = sitofp i32 %135 to double
%137 = fmul double %134, %136
%138 = load double, double* %20
%139 = load double, double* %18
%140 = load double, double* %18
%141 = fmul double %139, %140
%142 = call double @llvm.fmuladd.f64(double %137, double %138, double %141)
%143 = fmul double 2.000000e+00, %142
store double %143, double* %20
%144 = load i32, i32* %8
%145 = load i32, i32* %12
%146 = icmp slt i32 %144, %145
%147 = zext i1 %146 to i64
%148 = select i1 %146, i32 1, i32 -1
store i32 %148, i32* %15
%149 = load i32, i32* %9
%150 = load i32, i32* %13
%151 = icmp slt i32 %149, %150
%152 = zext i1 %151 to i64
%153 = select i1 %151, i32 1, i32 -1
store i32 %153, i32* %16
%154 = load i32, i32* %15
%155 = sitofp i32 %154 to double
%156 = fmul double -2.000000e+00, %155
%157 = load i32, i32* %16
%158 = sitofp i32 %157 to double
%159 = fmul double %156, %158
%160 = load float, float* %14
%161 = fpext float %160 to double
%162 = fmul double 2.000000e+00, %161
%163 = load double, double* %21
%164 = load double, double* %17
%165 = load double, double* %18
%166 = fmul double %164, %165
%167 = call double @llvm.fmuladd.f64(double %162, double %163, double %166)
%168 = fmul double %159, %167
store double %168, double* %21
%169 = load double, double* %22
%170 = load i32, i32* %15
%171 = sitofp i32 %170 to double
%172 = fmul double %169, %171
%173 = load i32, i32* %16
%174 = sitofp i32 %173 to double
%175 = fmul double %172, %174
%176 = fcmp olt double %175, 0.000000e+00
br i1 %176, label %177, label %186
177: ; preds = %119
%178 = load double, double* %19
%179 = fneg double %178
store double %179, double* %19
%180 = load double, double* %20
%181 = fneg double %180
store double %181, double* %20
%182 = load double, double* %21
%183 = fneg double %182
store double %183, double* %21
%184 = load double, double* %22
%185 = fneg double %184
store double %185, double* %22
br label %186
186: ; preds = %177, %119
%187 = load float, float* %14
%188 = fpext float %187 to double
%189 = fmul double 4.000000e+00, %188
%190 = load i32, i32* %10
%191 = load i32, i32* %8
%192 = sub nsw i32 %190, %191
%193 = sitofp i32 %192 to double
%194 = fmul double %189, %193
%195 = load i32, i32* %16
%196 = sitofp i32 %195 to double
%197 = fmul double %194, %196
%198 = load double, double* %22
%199 = load double, double* %19
%200 = fdiv double %199, 2.000000e+00
%201 = call double @llvm.fmuladd.f64(double %197, double %198, double %200)
%202 = load double, double* %21
%203 = fadd double %201, %202
store double %203, double* %17
%204 = load float, float* %14
%205 = fpext float %204 to double
%206 = fmul double 4.000000e+00, %205
%207 = load i32, i32* %9
%208 = load i32, i32* %11
%209 = sub nsw i32 %207, %208
%210 = sitofp i32 %209 to double
%211 = fmul double %206, %210
%212 = load i32, i32* %15
%213 = sitofp i32 %212 to double
%214 = fmul double %211, %213
%215 = load double, double* %22
%216 = load double, double* %20
%217 = fdiv double %216, 2.000000e+00
%218 = call double @llvm.fmuladd.f64(double %214, double %215, double %217)
%219 = load double, double* %21
%220 = fadd double %218, %219
store double %220, double* %18
%221 = load float, float* %14
%222 = fpext float %221 to double
%223 = fcmp olt double %222, 5.000000e-01
br i1 %223, label %224, label %339
224: ; preds = %186
%225 = load double, double* %18
%226 = load double, double* %21
%227 = fcmp ogt double %225, %226
br i1 %227, label %232, label %228
228: ; preds = %224
%229 = load double, double* %17
%230 = load double, double* %21
%231 = fcmp olt double %229, %230
br i1 %231, label %232, label %339
232: ; preds = %228, %224
%233 = load float, float* %14
%234 = fpext float %233 to double
%235 = fadd double %234, 1.000000e+00
%236 = fdiv double %235, 2.000000e+00
store double %236, double* %22
%237 = load float, float* %14
%238 = fpext float %237 to double
%239 = call double @sqrt(double %238)
%240 = fptrunc double %239 to float
store float %240, float* %14
%241 = load float, float* %14
%242 = fpext float %241 to double
%243 = fadd double %242, 1.000000e+00
%244 = fdiv double 1.000000e+00, %243
store double %244, double* %21
%245 = load i32, i32* %8
%246 = sitofp i32 %245 to double
%247 = load float, float* %14
%248 = fpext float %247 to double
%249 = fmul double 2.000000e+00, %248
%250 = load i32, i32* %10
%251 = sitofp i32 %250 to double
%252 = call double @llvm.fmuladd.f64(double %249, double %251, double %246)
%253 = load i32, i32* %12
%254 = sitofp i32 %253 to double
%255 = fadd double %252, %254
%256 = load double, double* %21
%257 = fmul double %255, %256
%258 = fdiv double %257, 2.000000e+00
%259 = fadd double %258, 5.000000e-01
%260 = call double @llvm.floor.f64(double %259)
%261 = fptosi double %260 to i32
store i32 %261, i32* %15
%262 = load i32, i32* %9
%263 = sitofp i32 %262 to double
%264 = load float, float* %14
%265 = fpext float %264 to double
%266 = fmul double 2.000000e+00, %265
%267 = load i32, i32* %11
%268 = sitofp i32 %267 to double
%269 = call double @llvm.fmuladd.f64(double %266, double %268, double %263)
%270 = load i32, i32* %13
%271 = sitofp i32 %270 to double
%272 = fadd double %269, %271
%273 = load double, double* %21
%274 = fmul double %272, %273
%275 = fdiv double %274, 2.000000e+00
%276 = fadd double %275, 5.000000e-01
%277 = call double @llvm.floor.f64(double %276)
%278 = fptosi double %277 to i32
store i32 %278, i32* %16
%279 = load float, float* %14
%280 = load i32, i32* %10
%281 = sitofp i32 %280 to float
%282 = load i32, i32* %8
%283 = sitofp i32 %282 to float
%284 = call float @llvm.fmuladd.f32(float %279, float %281, float %283)
%285 = fpext float %284 to double
%286 = load double, double* %21
%287 = call double @llvm.fmuladd.f64(double %285, double %286, double 5.000000e-01)
%288 = call double @llvm.floor.f64(double %287)
store double %288, double* %17
%289 = load i32, i32* %11
%290 = sitofp i32 %289 to float
%291 = load float, float* %14
%292 = load i32, i32* %9
%293 = sitofp i32 %292 to float
%294 = call float @llvm.fmuladd.f32(float %290, float %291, float %293)
%295 = fpext float %294 to double
%296 = load double, double* %21
%297 = call double @llvm.fmuladd.f64(double %295, double %296, double 5.000000e-01)
%298 = call double @llvm.floor.f64(double %297)
store double %298, double* %18
%299 = load i32, i32* %8
%300 = load i32, i32* %9
%301 = load double, double* %17
%302 = fptosi double %301 to i32
%303 = load double, double* %18
%304 = fptosi double %303 to i32
%305 = load i32, i32* %15
%306 = load i32, i32* %16
%307 = load double, double* %22
%308 = fptrunc double %307 to float
%309 = load float, float* %14
%310 = load i32, i32* %10
%311 = sitofp i32 %310 to float
%312 = load i32, i32* %12
%313 = sitofp i32 %312 to float
%314 = call float @llvm.fmuladd.f32(float %309, float %311, float %313)
%315 = fpext float %314 to double
%316 = load double, double* %21
%317 = call double @llvm.fmuladd.f64(double %315, double %316, double 5.000000e-01)
%318 = call double @llvm.floor.f64(double %317)
store double %318, double* %17
%319 = load i32, i32* %11
%320 = sitofp i32 %319 to float
%321 = load float, float* %14
%322 = load i32, i32* %13
%323 = sitofp i32 %322 to float
%324 = call float @llvm.fmuladd.f32(float %320, float %321, float %323)
%325 = fpext float %324 to double
%326 = load double, double* %21
%327 = call double @llvm.fmuladd.f64(double %325, double %326, double 5.000000e-01)
%328 = call double @llvm.floor.f64(double %327)
store double %328, double* %18
%329 = load i32, i32* %15
%330 = load i32, i32* %16
%331 = load double, double* %17
%332 = fptosi double %331 to i32
%333 = load double, double* %18
%334 = fptosi double %333 to i32
%335 = load i32, i32* %12
%336 = load i32, i32* %13
%337 = load double, double* %22
%338 = fptrunc double %337 to float
br label %428
339: ; preds = %228, %186
%340 = load double, double* %17
%341 = load double, double* %18
%342 = fadd double %340, %341
%343 = load double, double* %21
%344 = fsub double %342, %343
store double %344, double* %23
br label %345
345: ; preds = %419, %339
%346 = load i32, i32* %8
%347 = load i32, i32* %9
%348 = call i32 (i32, i32, ...) bitcast (i32 (...)* @setPixel to i32 (i32, i32, ...)*)(i32 %346, i32 %347)
%349 = load i32, i32* %8
%350 = load i32, i32* %12
%351 = icmp eq i32 %349, %350
br i1 %351, label %352, label %357
352: ; preds = %345
%353 = load i32, i32* %9
%354 = load i32, i32* %13
%355 = icmp eq i32 %353, %354
br i1 %355, label %356, label %357
356: ; preds = %352
br label %428
357: ; preds = %352, %345
%358 = load double, double* %23
%359 = fmul double 2.000000e+00, %358
%360 = load double, double* %18
%361 = fcmp ogt double %359, %360
%362 = zext i1 %361 to i32
store i32 %362, i32* %10
%363 = load double, double* %23
%364 = load double, double* %20
%365 = fadd double %363, %364
%366 = fmul double 2.000000e+00, %365
%367 = load double, double* %18
%368 = fneg double %367
%369 = fcmp olt double %366, %368
%370 = zext i1 %369 to i32
store i32 %370, i32* %11
%371 = load double, double* %23
%372 = fmul double 2.000000e+00, %371
%373 = load double, double* %17
%374 = fcmp olt double %372, %373
br i1 %374, label %378, label %375
375: ; preds = %357
%376 = load i32, i32* %11
%377 = icmp ne i32 %376, 0
br i1 %377, label %378, label %390
378: ; preds = %375, %357
%379 = load i32, i32* %16
%380 = load i32, i32* %9
%381 = add nsw i32 %380, %379
store i32 %381, i32* %9
%382 = load double, double* %21
%383 = load double, double* %18
%384 = fadd double %383, %382
store double %384, double* %18
%385 = load double, double* %19
%386 = load double, double* %17
%387 = fadd double %386, %385
store double %387, double* %17
%388 = load double, double* %23
%389 = fadd double %388, %387
store double %389, double* %23
br label %390
390: ; preds = %378, %375
%391 = load double, double* %23
%392 = fmul double 2.000000e+00, %391
%393 = load double, double* %17
%394 = fcmp ogt double %392, %393
br i1 %394, label %398, label %395
395: ; preds = %390
%396 = load i32, i32* %10
%397 = icmp ne i32 %396, 0
br i1 %397, label %398, label %410
398: ; preds = %395, %390
%399 = load i32, i32* %15
%400 = load i32, i32* %8
%401 = add nsw i32 %400, %399
store i32 %401, i32* %8
%402 = load double, double* %21
%403 = load double, double* %17
%404 = fadd double %403, %402
store double %404, double* %17
%405 = load double, double* %20
%406 = load double, double* %18
%407 = fadd double %406, %405
store double %407, double* %18
%408 = load double, double* %23
%409 = fadd double %408, %407
store double %409, double* %23
br label %410
410: ; preds = %398, %395
br label %411
411: ; preds = %410
%412 = load double, double* %18
%413 = load double, double* %21
%414 = fcmp ole double %412, %413
br i1 %414, label %415, label %419
415: ; preds = %411
%416 = load double, double* %17
%417 = load double, double* %21
%418 = fcmp oge double %416, %417
br label %419
419: ; preds = %415, %411
%420 = phi i1 [ false, %411 ], [ %418, %415 ]
br i1 %420, label %345, label %421
421: ; preds = %419
br label %422
422: ; preds = %421, %80, %74
%423 = load i32, i32* %8
%424 = load i32, i32* %9
%425 = load i32, i32* %12
%426 = load i32, i32* %13
%427 = call i32 (i32, i32, i32, i32, ...) bitcast (i32 (...)* @plotLine to i32 (i32, i32, i32, i32, ...)*)(i32 %423, i32 %424, i32 %425, i32 %426)
br label %428
428: ; preds = %422, %356, %232
ret void
}

LLVM IR (-O2):
define void @plotQuadRationalBezierSeg(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, float %6) {
br label %8
8: ; preds = %120, %7
%9 = phi i32 [ %0, %7 ], [ %137, %120 ]
%10 = phi i32 [ %1, %7 ], [ %147, %120 ]
%11 = phi i32 [ %2, %7 ], [ %173, %120 ]
%12 = phi i32 [ %3, %7 ], [ %174, %120 ]
%13 = phi i32 [ %4, %7 ], [ %64, %120 ]
%14 = phi i32 [ %5, %7 ], [ %65, %120 ]
%15 = phi float [ %6, %7 ], [ %162, %120 ]
%16 = sub nsw i32 %13, %11
%17 = sub nsw i32 %14, %12
%18 = sub nsw i32 %9, %13
%19 = sitofp i32 %18 to double
%20 = sub nsw i32 %10, %14
%21 = sitofp i32 %20 to double
%22 = sub nsw i32 %9, %11
%23 = sitofp i32 %22 to double
%24 = sub nsw i32 %10, %12
%25 = sitofp i32 %24 to double
%26 = sitofp i32 %17 to double
%27 = sitofp i32 %16 to double
%28 = fmul double %25, %27
%29 = tail call double @llvm.fmuladd.f64(double %23, double %26, double %28)
%30 = fneg double %28
%31 = tail call double @llvm.fmuladd.f64(double %23, double %26, double %30)
%32 = fmul double %23, %27
%33 = fcmp ole double %32, 0.000000e+00
%34 = fmul double %25, %26
%35 = fcmp ole double %34, 0.000000e+00
%36 = select i1 %33, i1 %35, i1 false
%37 = zext i1 %36 to i32
%38 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %37)
%39 = fcmp une double %31, 0.000000e+00
br i1 %39, label %40, label %224
40: ; preds = %8
%41 = fpext float %15 to double
%42 = fcmp ogt float %15, 0.000000e+00
br i1 %42, label %43, label %224
43: ; preds = %40
%44 = sext i32 %16 to i64
%45 = mul nsw i64 %44, %44
%46 = sext i32 %17 to i64
%47 = mul nsw i64 %46, %46
%48 = add nuw nsw i64 %47, %45
%49 = sitofp i64 %48 to double
%50 = fmul double %25, %25
%51 = tail call double @llvm.fmuladd.f64(double %23, double %23, double %50)
%52 = fcmp olt double %51, %49
br i1 %52, label %53, label %61
53: ; preds = %43
%54 = sitofp i32 %9 to double
%55 = fsub double %54, %19
%56 = fptosi double %55 to i32
%57 = sitofp i32 %10 to double
%58 = fsub double %57, %21
%59 = fptosi double %58 to i32
%60 = fneg double %31
br label %61
61: ; preds = %53, %43
%62 = phi i32 [ %56, %53 ], [ %9, %43 ]
%63 = phi i32 [ %59, %53 ], [ %10, %43 ]
%64 = phi i32 [ %9, %53 ], [ %13, %43 ]
%65 = phi i32 [ %10, %53 ], [ %14, %43 ]
%66 = phi double [ %60, %53 ], [ %31, %43 ]
%67 = fmul double %41, 4.000000e+00
%68 = fmul double %67, %27
%69 = fmul double %19, %19
%70 = tail call double @llvm.fmuladd.f64(double %68, double %23, double %69)
%71 = fmul double %70, 2.000000e+00
%72 = fmul double %67, %26
%73 = fmul double %21, %21
%74 = tail call double @llvm.fmuladd.f64(double %72, double %25, double %73)
%75 = fmul double %74, 2.000000e+00
%76 = icmp slt i32 %62, %64
%77 = select i1 %76, i32 1, i32 -1
%78 = icmp slt i32 %63, %65
%79 = select i1 %78, i32 1, i32 -1
%80 = sitofp i32 %77 to double
%81 = fmul double %80, -2.000000e+00
%82 = sitofp i32 %79 to double
%83 = fmul double %81, %82
%84 = fmul double %41, 2.000000e+00
%85 = fmul double %19, %21
%86 = tail call double @llvm.fmuladd.f64(double %84, double %29, double %85)
%87 = fmul double %86, %83
%88 = fmul double %66, %80
%89 = fmul double %88, %82
%90 = fcmp olt double %89, 0.000000e+00
br i1 %90, label %91, label %96
91: ; preds = %61
%92 = fneg double %71
%93 = fneg double %75
%94 = fneg double %87
%95 = fneg double %66
br label %96
96: ; preds = %91, %61
%97 = phi double [ %92, %91 ], [ %71, %61 ]
%98 = phi double [ %93, %91 ], [ %75, %61 ]
%99 = phi double [ %94, %91 ], [ %87, %61 ]
%100 = phi double [ %95, %91 ], [ %66, %61 ]
%101 = sub nsw i32 %11, %62
%102 = sitofp i32 %101 to double
%103 = fmul double %67, %102
%104 = fmul double %103, %82
%105 = fmul double %97, 5.000000e-01
%106 = tail call double @llvm.fmuladd.f64(double %104, double %100, double %105)
%107 = fadd double %99, %106
%108 = sub nsw i32 %63, %12
%109 = sitofp i32 %108 to double
%110 = fmul double %67, %109
%111 = fmul double %110, %80
%112 = fmul double %98, 5.000000e-01
%113 = tail call double @llvm.fmuladd.f64(double %111, double %100, double %112)
%114 = fadd double %99, %113
%115 = fcmp olt float %15, 5.000000e-01
br i1 %115, label %116, label %175
116: ; preds = %96
%117 = fcmp ogt double %114, %99
%118 = fcmp olt double %107, %99
%119 = select i1 %117, i1 true, i1 %118
br i1 %119, label %120, label %175
120: ; preds = %116
%121 = fadd double %41, 1.000000e+00
%122 = fmul double %121, 5.000000e-01
%123 = tail call float @sqrtf(float %15)
%124 = fpext float %123 to double
%125 = fadd double %124, 1.000000e+00
%126 = fdiv double 1.000000e+00, %125
%127 = sitofp i32 %62 to double
%128 = fmul double %124, 2.000000e+00
%129 = sitofp i32 %11 to double
%130 = tail call double @llvm.fmuladd.f64(double %128, double %129, double %127)
%131 = sitofp i32 %64 to double
%132 = fadd double %130, %131
%133 = fmul double %126, %132
%134 = fmul double %133, 5.000000e-01
%135 = fadd double %134, 5.000000e-01
%136 = tail call double @llvm.floor.f64(double %135)
%137 = fptosi double %136 to i32
%138 = sitofp i32 %63 to double
%139 = sitofp i32 %12 to double
%140 = tail call double @llvm.fmuladd.f64(double %128, double %139, double %138)
%141 = sitofp i32 %65 to double
%142 = fadd double %140, %141
%143 = fmul double %126, %142
%144 = fmul double %143, 5.000000e-01
%145 = fadd double %144, 5.000000e-01
%146 = tail call double @llvm.floor.f64(double %145)
%147 = fptosi double %146 to i32
%148 = sitofp i32 %11 to float
%149 = sitofp i32 %62 to float
%150 = tail call float @llvm.fmuladd.f32(float %123, float %148, float %149)
%151 = fpext float %150 to double
%152 = tail call double @llvm.fmuladd.f64(double %151, double %126, double 5.000000e-01)
%153 = tail call double @llvm.floor.f64(double %152)
%154 = sitofp i32 %12 to float
%155 = sitofp i32 %63 to float
%156 = tail call float @llvm.fmuladd.f32(float %154, float %123, float %155)
%157 = fpext float %156 to double
%158 = tail call double @llvm.fmuladd.f64(double %157, double %126, double 5.000000e-01)
%159 = tail call double @llvm.floor.f64(double %158)
%160 = fptosi double %153 to i32
%161 = fptosi double %159 to i32
%162 = fptrunc double %122 to float
tail call void @plotQuadRationalBezierSeg(i32 %62, i32 %63, i32 %160, i32 %161, i32 %137, i32 %147, float %162)
%163 = sitofp i32 %64 to float
%164 = tail call float @llvm.fmuladd.f32(float %123, float %148, float %163)
%165 = fpext float %164 to double
%166 = tail call double @llvm.fmuladd.f64(double %165, double %126, double 5.000000e-01)
%167 = tail call double @llvm.floor.f64(double %166)
%168 = sitofp i32 %65 to float
%169 = tail call float @llvm.fmuladd.f32(float %154, float %123, float %168)
%170 = fpext float %169 to double
%171 = tail call double @llvm.fmuladd.f64(double %170, double %126, double 5.000000e-01)
%172 = tail call double @llvm.floor.f64(double %171)
%173 = fptosi double %167 to i32
%174 = fptosi double %172 to i32
br label %8
175: ; preds = %116, %96
%176 = fadd double %107, %114
%177 = fsub double %176, %99
br label %178
178: ; preds = %216, %175
%179 = phi i32 [ %62, %175 ], [ %217, %216 ]
%180 = phi i32 [ %63, %175 ], [ %205, %216 ]
%181 = phi double [ %107, %175 ], [ %218, %216 ]
%182 = phi double [ %114, %175 ], [ %219, %216 ]
%183 = phi double [ %177, %175 ], [ %220, %216 ]
%184 = tail call i32 (i32, i32, ...) bitcast (i32 (...)* @setPixel to i32 (i32, i32, ...)*)(i32 %179, i32 %180)
%185 = icmp eq i32 %179, %64
%186 = icmp eq i32 %180, %65
%187 = and i1 %185, %186
br i1 %187, label %230, label %188
188: ; preds = %178
%189 = fmul double %183, 2.000000e+00
%190 = fcmp ogt double %189, %182
%191 = fadd double %98, %183
%192 = fmul double %191, 2.000000e+00
%193 = fneg double %182
%194 = fcmp olt double %192, %193
%195 = fcmp olt double %189, %181
%196 = select i1 %195, i1 true, i1 %194
br i1 %196, label %197, label %203
197: ; preds = %188
%198 = add nsw i32 %180, %79
%199 = fadd double %99, %182
%200 = fadd double %97, %181
%201 = fadd double %200, %183
%202 = fmul double %201, 2.000000e+00
br label %203
203: ; preds = %188, %197
%204 = phi double [ %189, %188 ], [ %202, %197 ]
%205 = phi i32 [ %180, %188 ], [ %198, %197 ]
%206 = phi double [ %181, %188 ], [ %200, %197 ]
%207 = phi double [ %182, %188 ], [ %199, %197 ]
%208 = phi double [ %183, %188 ], [ %201, %197 ]
%209 = fcmp ogt double %204, %206
%210 = select i1 %209, i1 true, i1 %190
br i1 %210, label %211, label %216
211: ; preds = %203
%212 = add nsw i32 %179, %77
%213 = fadd double %99, %206
%214 = fadd double %98, %207
%215 = fadd double %208, %214
br label %216
216: ; preds = %211, %203
%217 = phi i32 [ %212, %211 ], [ %179, %203 ]
%218 = phi double [ %213, %211 ], [ %206, %203 ]
%219 = phi double [ %214, %211 ], [ %207, %203 ]
%220 = phi double [ %215, %211 ], [ %208, %203 ]
%221 = fcmp ole double %219, %99
%222 = fcmp oge double %218, %99
%223 = select i1 %221, i1 %222, i1 false
br i1 %223, label %178, label %224
224: ; preds = %40, %8, %216
%225 = phi i32 [ %217, %216 ], [ %9, %8 ], [ %9, %40 ]
%226 = phi i32 [ %205, %216 ], [ %10, %8 ], [ %10, %40 ]
%227 = phi i32 [ %64, %216 ], [ %13, %8 ], [ %13, %40 ]
%228 = phi i32 [ %65, %216 ], [ %14, %8 ], [ %14, %40 ]
%229 = tail call i32 (i32, i32, i32, i32, ...) bitcast (i32 (...)* @plotLine to i32 (i32, i32, i32, i32, ...)*)(i32 %225, i32 %226, i32 %227, i32 %228)
br label %230
230: ; preds = %178, %224
ret void
}