double ellipse_ellipse_overlap(double PHI_1, double A1, double B1, double H1,
                               double K1, double PHI_2, double A2, double B2,
                               double H2, double K2, int *rtnCode) {
  int i, j, k, nroots, nychk, nintpts, fnRtnCode;
  double AA, BB, CC, DD, EE, FF, H2_TR, K2_TR, A22, B22, PHI_2R;
  double cosphi, cosphi2, sinphi, sinphi2, cosphisinphi;
  double tmp0, tmp1, tmp2, tmp3;
  double cy[5] = {0.0}, py[5] = {0.0}, r[3][5] = {0.0};
  double x1, x2, y12, y22;
  double ychk[5] = {0.0}, xint[5], yint[5];
  double Area1, Area2, OverlapArea;
  if ((!(A1 > 0.0) || !(B1 > 0.0)) || (!(A2 > 0.0) || !(B2 > 0.0))) {
    (*rtnCode) = -100;
    return -1.0;
  }
  if ((fabs(PHI_1) > ((2.0 * (2.0 * asin(1.0))))))
    PHI_1 = fmod(PHI_1, (2.0 * (2.0 * asin(1.0))));
  if ((fabs(PHI_2) > ((2.0 * (2.0 * asin(1.0))))))
    PHI_2 = fmod(PHI_2, (2.0 * (2.0 * asin(1.0))));
  cosphi = cos(PHI_1);
  sinphi = sin(PHI_1);
  H2_TR = (H2 - H1) * cosphi + (K2 - K1) * sinphi;
  K2_TR = (H1 - H2) * sinphi + (K2 - K1) * cosphi;
  PHI_2R = PHI_2 - PHI_1;
  if ((fabs(PHI_2R) > ((2.0 * (2.0 * asin(1.0))))))
    PHI_2R = fmod(PHI_2R, (2.0 * (2.0 * asin(1.0))));
  cosphi = cos(PHI_2R);
  cosphi2 = cosphi * cosphi;
  sinphi = sin(PHI_2R);
  sinphi2 = sinphi * sinphi;
  cosphisinphi = 2.0 * cosphi * sinphi;
  A22 = A2 * A2;
  B22 = B2 * B2;
  tmp0 = (cosphi * H2_TR + sinphi * K2_TR) / A22;
  tmp1 = (sinphi * H2_TR - cosphi * K2_TR) / B22;
  tmp2 = cosphi * H2_TR + sinphi * K2_TR;
  tmp3 = sinphi * H2_TR - cosphi * K2_TR;
  AA = cosphi2 / A22 + sinphi2 / B22;
  BB = cosphisinphi / A22 - cosphisinphi / B22;
  CC = sinphi2 / A22 + cosphi2 / B22;
  DD = -2.0 * cosphi * tmp0 - 2.0 * sinphi * tmp1;
  EE = -2.0 * sinphi * tmp0 + 2.0 * cosphi * tmp1;
  FF = tmp2 * tmp2 / A22 + tmp3 * tmp3 / B22 - 1.0;
  cy[4] = pow(A1, 4.0) * AA * AA +
          B1 * B1 * (A1 * A1 * (BB * BB - 2.0 * AA * CC) + B1 * B1 * CC * CC);
  cy[3] = 2.0 * B1 * (B1 * B1 * CC * EE + A1 * A1 * (BB * DD - AA * EE));
  cy[2] = A1 * A1 *
              ((B1 * B1 * (2.0 * AA * CC - BB * BB) + DD * DD - 2.0 * AA * FF) -
               2.0 * A1 * A1 * AA * AA) +
          B1 * B1 * (2.0 * CC * FF + EE * EE);
  cy[1] = 2.0 * B1 * (A1 * A1 * (AA * EE - BB * DD) + EE * FF);
  cy[0] = (A1 * (A1 * AA - DD) + FF) * (A1 * (A1 * AA + DD) + FF);
  if (fabs(cy[4]) > 0.0) {
    for (i = 0; i <= 3; i++)
      py[4 - i] = cy[i] / cy[4];
    py[0] = 1.0;
    BIQUADROOTS(py, r);
    nroots = 4;
  } else if (fabs(cy[3]) > 0.0) {
    for (i = 0; i <= 2; i++)
      py[3 - i] = cy[i] / cy[3];
    py[0] = 1.0;
    CUBICROOTS(py, r);
    nroots = 3;
  } else if (fabs(cy[2]) > 0.0) {
    for (i = 0; i <= 1; i++)
      py[2 - i] = cy[i] / cy[2];
    py[0] = 1.0;
    QUADROOTS(py, r);
    nroots = 2;
  } else if (fabs(cy[1]) > 0.0) {
    r[1][1] = (-cy[0] / cy[1]);
    r[2][1] = 0.0;
    nroots = 1;
  } else {
    nroots = 0;
  }
  nychk = 0;
  for (i = 1; i <= nroots; i++) {
    if (fabs(r[2][i]) < +1.0E-06) {
      nychk++;
      ychk[nychk] = r[1][i] * B1;
    }
  }
  for (j = 2; j <= nychk; j++) {
    tmp0 = ychk[j];
    for (k = j - 1; k >= 1; k--) {
      if (ychk[k] <= tmp0)
        break;
      ychk[k + 1] = ychk[k];
    }
    ychk[k + 1] = tmp0;
  }
  nintpts = 0;
  for (i = 1; i <= nychk; i++) {
    if ((i > 1) && (fabs(ychk[i] - ychk[i - 1]) < (+1.0E-06 / 2.0)))
      continue;
    if (fabs(ychk[i]) > B1)
      x1 = 0.0;
    else
      x1 = A1 * sqrt(1.0 - (ychk[i] * ychk[i]) / (B1 * B1));
    x2 = -x1;
    if (fabs(ellipse2tr(x1, ychk[i], AA, BB, CC, DD, EE, FF)) <
        +1.0E-06 / 2.0) {
      nintpts++;
      if (nintpts > 4) {
        (*rtnCode) = -109;
        return -1.0;
      }
      xint[nintpts] = x1;
      yint[nintpts] = ychk[i];
    }
    if ((fabs(ellipse2tr(x2, ychk[i], AA, BB, CC, DD, EE, FF)) <
         +1.0E-06 / 2.0) &&
        (fabs(x2 - x1) > +1.0E-06 / 2.0)) {
      nintpts++;
      if (nintpts > 4) {
        (*rtnCode) = -109;
        return -1.0;
      }
      xint[nintpts] = x2;
      yint[nintpts] = ychk[i];
    }
  }
  switch (nintpts) {
  case 0:
  case 1:
    OverlapArea = nointpts(A1, B1, A2, B2, H1, K1, H2, K2, PHI_1, PHI_2, H2_TR,
                           K2_TR, AA, BB, CC, DD, EE, FF, rtnCode);
    return OverlapArea;
  case 2:
    fnRtnCode = istanpt(xint[1], yint[1], A1, B1, AA, BB, CC, DD, EE, FF);
    if (fnRtnCode == 114)
      OverlapArea = nointpts(A1, B1, A2, B2, H1, K1, H2, K2, PHI_1, PHI_2,
                             H2_TR, K2_TR, AA, BB, CC, DD, EE, FF, rtnCode);
    else
      OverlapArea = twointpts(xint, yint, A1, B1, PHI_1, A2, B2, H2_TR, K2_TR,
                              PHI_2, AA, BB, CC, DD, EE, FF, rtnCode);
    return OverlapArea;
  case 3:
    OverlapArea = threeintpts(xint, yint, A1, B1, PHI_1, A2, B2, H2_TR, K2_TR,
                              PHI_2, AA, BB, CC, DD, EE, FF, rtnCode);
    return OverlapArea;
  case 4:
    OverlapArea = fourintpts(xint, yint, A1, B1, PHI_1, A2, B2, H2_TR, K2_TR,
                             PHI_2, AA, BB, CC, DD, EE, FF, rtnCode);
    return OverlapArea;
  default:
    (*rtnCode) = -109;
    return -1.0;
  }
}


x86 assembly (clang, -O0):
<ellipse_ellipse_overlap>:
push   %rbp
mov    %rsp,%rbp
sub    $0x380,%rsp
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
movsd  %xmm6,-0x40(%rbp)
movsd  %xmm7,-0x48(%rbp)
mov    %rdi,-0x50(%rbp)
lea    -0x140(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1070 <memset@plt>
lea    -0x170(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1070 <memset@plt>
lea    -0x1f0(%rbp),%rdi
xor    %esi,%esi
mov    $0x78,%edx
call   1070 <memset@plt>
lea    -0x240(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1070 <memset@plt>
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    12d7 <ellipse_ellipse_overlap+0xd7>
movsd  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    12d7 <ellipse_ellipse_overlap+0xd7>
movsd  -0x40(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    12d7 <ellipse_ellipse_overlap+0xd7>
movsd  -0x48(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
ja     12f3 <ellipse_ellipse_overlap+0xf3>
mov    -0x50(%rbp),%rax
movl   $0xffffff9c,(%rax)
movsd  0x1d17(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    26f8 <ellipse_ellipse_overlap+0x14f8>
movsd  -0x10(%rbp),%xmm0
movaps 0x1d41(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x2c0(%rbp)
ff
movsd  0x1cfd(%rip),%xmm0
call   10b0 <asin@plt>
movaps %xmm0,%xmm1
movsd  -0x2c0(%rbp),%xmm0
ff
movsd  0x1cdd(%rip),%xmm2
mulsd  %xmm1,%xmm2
movsd  0x1cd1(%rip),%xmm1
mulsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    138c <ellipse_ellipse_overlap+0x18c>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x2c8(%rbp)
ff
movsd  0x1cb6(%rip),%xmm0
call   10b0 <asin@plt>
movaps %xmm0,%xmm1
movsd  -0x2c8(%rbp),%xmm0
ff
movsd  0x1c96(%rip),%xmm2
mulsd  %xmm1,%xmm2
movsd  0x1c8a(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   1050 <fmod@plt>
movsd  %xmm0,-0x10(%rbp)
movsd  -0x38(%rbp),%xmm0
movaps 0x1ca8(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x2d0(%rbp)
ff
movsd  0x1c64(%rip),%xmm0
call   10b0 <asin@plt>
movaps %xmm0,%xmm1
movsd  -0x2d0(%rbp),%xmm0
ff
movsd  0x1c44(%rip),%xmm2
mulsd  %xmm1,%xmm2
movsd  0x1c38(%rip),%xmm1
mulsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    1425 <ellipse_ellipse_overlap+0x225>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x2d8(%rbp)
ff
movsd  0x1c1d(%rip),%xmm0
call   10b0 <asin@plt>
movaps %xmm0,%xmm1
movsd  -0x2d8(%rbp),%xmm0
ff
movsd  0x1bfd(%rip),%xmm2
mulsd  %xmm1,%xmm2
movsd  0x1bf1(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   1050 <fmod@plt>
movsd  %xmm0,-0x38(%rbp)
movsd  -0x10(%rbp),%xmm0
call   10f0 <cos@plt>
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
call   10a0 <sin@plt>
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0x10(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  -0xd0(%rbp),%xmm2
ff
movsd  0x18(%rbp),%xmm1
subsd  -0x30(%rbp),%xmm1
mulsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
subsd  0x10(%rbp),%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
movsd  0x18(%rbp),%xmm1
subsd  -0x30(%rbp),%xmm1
mulsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
movaps 0x1b6e(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x2e0(%rbp)
ff
movsd  0x1b2a(%rip),%xmm0
call   10b0 <asin@plt>
movaps %xmm0,%xmm1
movsd  -0x2e0(%rbp),%xmm0
ff
movsd  0x1b0a(%rip),%xmm2
mulsd  %xmm1,%xmm2
movsd  0x1afe(%rip),%xmm1
mulsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    1565 <ellipse_ellipse_overlap+0x365>
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x2e8(%rbp)
ff
movsd  0x1ae0(%rip),%xmm0
call   10b0 <asin@plt>
movaps %xmm0,%xmm1
movsd  -0x2e8(%rbp),%xmm0
ff
movsd  0x1ac0(%rip),%xmm2
mulsd  %xmm1,%xmm2
movsd  0x1ab4(%rip),%xmm1
mulsd  %xmm2,%xmm1
call   1050 <fmod@plt>
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   10f0 <cos@plt>
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   10a0 <sin@plt>
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  0x1a41(%rip),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xb0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xb0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
movsd  -0xd8(%rbp),%xmm0
ff
divsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xe8(%rbp),%xmm1
ff
divsd  -0xc0(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0xf0(%rbp),%xmm0
ff
divsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm1
ff
divsd  -0xc0(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0xe8(%rbp),%xmm0
ff
divsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm1
ff
divsd  -0xc0(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0x1899(%rip),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  -0xf8(%rbp),%xmm2
ff
movsd  0x1869(%rip),%xmm1
mulsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0x100(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0x1842(%rip),%xmm0
mulsd  -0xe0(%rbp),%xmm0
ff
movsd  -0xf8(%rbp),%xmm2
ff
movsd  0x1812(%rip),%xmm1
mulsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0x100(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
mulsd  -0x108(%rbp),%xmm0
ff
divsd  -0xb8(%rbp),%xmm0
ff
movsd  -0x110(%rbp),%xmm1
ff
mulsd  -0x110(%rbp),%xmm1
ff
divsd  -0xc0(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
movsd  0x17be(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  0x17ad(%rip),%xmm1
call   1110 <pow@plt>
mulsd  -0x78(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm1
mulsd  -0x20(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm3
mulsd  -0x18(%rbp),%xmm3
movsd  -0x80(%rbp),%xmm5
movsd  -0x80(%rbp),%xmm6
movsd  0x1768(%rip),%xmm4
mulsd  -0x78(%rbp),%xmm4
mulsd  -0x88(%rbp),%xmm4
ff
movq   %xmm4,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
mulsd  %xmm6,%xmm5
addsd  %xmm4,%xmm5
movsd  -0x20(%rbp),%xmm4
mulsd  -0x20(%rbp),%xmm4
mulsd  -0x88(%rbp),%xmm4
ff
mulsd  -0x88(%rbp),%xmm4
ff
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  0x16fe(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  -0x20(%rbp),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm3
ff
movsd  -0x18(%rbp),%xmm2
mulsd  -0x18(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm4
movsd  -0x90(%rbp),%xmm6
ff
movsd  -0x78(%rbp),%xmm5
mulsd  -0x98(%rbp),%xmm5
ff
movq   %xmm5,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm5
mulsd  %xmm6,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm2
mulsd  -0x20(%rbp),%xmm2
movsd  0x1668(%rip),%xmm3
mulsd  -0x78(%rbp),%xmm3
movsd  -0x88(%rbp),%xmm4
ff
movsd  -0x80(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm4,%xmm3
addsd  %xmm1,%xmm3
movsd  -0x90(%rbp),%xmm1
ff
mulsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x1612(%rip),%xmm1
mulsd  -0x78(%rbp),%xmm1
movsd  -0xa0(%rbp),%xmm3
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x15de(%rip),%xmm2
mulsd  -0x18(%rbp),%xmm2
mulsd  -0x18(%rbp),%xmm2
mulsd  -0x78(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm3
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x20(%rbp),%xmm1
mulsd  -0x20(%rbp),%xmm1
movsd  0x1599(%rip),%xmm3
mulsd  -0x88(%rbp),%xmm3
ff
movsd  -0xa0(%rbp),%xmm5
ff
movsd  -0x98(%rbp),%xmm4
ff
mulsd  -0x98(%rbp),%xmm4
ff
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  0x1555(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  -0x18(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm3
movsd  -0x98(%rbp),%xmm4
ff
movsd  -0x80(%rbp),%xmm2
mulsd  -0x90(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm4,%xmm3
addsd  %xmm2,%xmm3
movsd  -0x98(%rbp),%xmm2
ff
mulsd  -0xa0(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm3
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm3
movsd  -0x78(%rbp),%xmm4
movsd  -0x90(%rbp),%xmm2
ff
mulsd  %xmm4,%xmm3
addsd  %xmm2,%xmm3
movsd  -0xa0(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x120(%rbp),%xmm0
ff
movaps 0x1491(%rip),%xmm1
pand   %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1c38 <ellipse_ellipse_overlap+0xa38>
movl   $0x0,-0x54(%rbp)
cmpl   $0x3,-0x54(%rbp)
jg     1c07 <ellipse_ellipse_overlap+0xa07>
movslq -0x54(%rbp),%rax
movsd  -0x140(%rbp,%rax,8),%xmm0
ff ff
divsd  -0x120(%rbp),%xmm0
ff
mov    $0x4,%eax
sub    -0x54(%rbp),%eax
cltq
movsd  %xmm0,-0x170(%rbp,%rax,8)
ff ff
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1bc7 <ellipse_ellipse_overlap+0x9c7>
movsd  0x1401(%rip),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
lea    -0x170(%rbp),%rdi
lea    -0x1f0(%rbp),%rsi
mov    $0x0,%al
call   1040 <BIQUADROOTS@plt>
movl   $0x4,-0x60(%rbp)
jmp    1de4 <ellipse_ellipse_overlap+0xbe4>
movsd  -0x128(%rbp),%xmm0
ff
movaps 0x13f9(%rip),%xmm1
pand   %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1cd0 <ellipse_ellipse_overlap+0xad0>
movl   $0x0,-0x54(%rbp)
cmpl   $0x2,-0x54(%rbp)
jg     1c9f <ellipse_ellipse_overlap+0xa9f>
movslq -0x54(%rbp),%rax
movsd  -0x140(%rbp,%rax,8),%xmm0
ff ff
divsd  -0x128(%rbp),%xmm0
ff
mov    $0x3,%eax
sub    -0x54(%rbp),%eax
cltq
movsd  %xmm0,-0x170(%rbp,%rax,8)
ff ff
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1c5f <ellipse_ellipse_overlap+0xa5f>
movsd  0x1369(%rip),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
lea    -0x170(%rbp),%rdi
lea    -0x1f0(%rbp),%rsi
mov    $0x0,%al
call   1090 <CUBICROOTS@plt>
movl   $0x3,-0x60(%rbp)
jmp    1ddf <ellipse_ellipse_overlap+0xbdf>
movsd  -0x130(%rbp),%xmm0
ff
movaps 0x1361(%rip),%xmm1
pand   %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1d68 <ellipse_ellipse_overlap+0xb68>
movl   $0x0,-0x54(%rbp)
cmpl   $0x1,-0x54(%rbp)
jg     1d37 <ellipse_ellipse_overlap+0xb37>
movslq -0x54(%rbp),%rax
movsd  -0x140(%rbp,%rax,8),%xmm0
ff ff
divsd  -0x130(%rbp),%xmm0
ff
mov    $0x2,%eax
sub    -0x54(%rbp),%eax
cltq
movsd  %xmm0,-0x170(%rbp,%rax,8)
ff ff
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1cf7 <ellipse_ellipse_overlap+0xaf7>
movsd  0x12d1(%rip),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
lea    -0x170(%rbp),%rdi
lea    -0x1f0(%rbp),%rsi
mov    $0x0,%al
call   10e0 <QUADROOTS@plt>
movl   $0x2,-0x60(%rbp)
jmp    1dda <ellipse_ellipse_overlap+0xbda>
movsd  -0x138(%rbp),%xmm0
ff
movaps 0x12c9(%rip),%xmm1
pand   %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1dce <ellipse_ellipse_overlap+0xbce>
movsd  -0x140(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0x138(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movl   $0x1,-0x60(%rbp)
jmp    1dd5 <ellipse_ellipse_overlap+0xbd5>
movl   $0x0,-0x60(%rbp)
jmp    1dda <ellipse_ellipse_overlap+0xbda>
jmp    1ddf <ellipse_ellipse_overlap+0xbdf>
jmp    1de4 <ellipse_ellipse_overlap+0xbe4>
movl   $0x0,-0x64(%rbp)
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x60(%rbp),%eax
jg     1e63 <ellipse_ellipse_overlap+0xc63>
movslq -0x54(%rbp),%rax
movsd  -0x1a0(%rbp,%rax,8),%xmm1
ff ff
movaps 0x122e(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0x1212(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1e50 <ellipse_ellipse_overlap+0xc50>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
movslq -0x54(%rbp),%rax
movsd  -0x1c8(%rbp,%rax,8),%xmm0
ff ff
mulsd  -0x20(%rbp),%xmm0
movslq -0x64(%rbp),%rax
movsd  %xmm0,-0x240(%rbp,%rax,8)
ff ff
jmp    1e55 <ellipse_ellipse_overlap+0xc55>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1df2 <ellipse_ellipse_overlap+0xbf2>
movl   $0x2,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x64(%rbp),%eax
jg     1f15 <ellipse_ellipse_overlap+0xd15>
movslq -0x58(%rbp),%rax
movsd  -0x240(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x58(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x5c(%rbp)
cmpl   $0x1,-0x5c(%rbp)
jl     1eee <ellipse_ellipse_overlap+0xcee>
movslq -0x5c(%rbp),%rax
movsd  -0x240(%rbp,%rax,8),%xmm1
ff ff
movsd  -0xf8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jb     1ec2 <ellipse_ellipse_overlap+0xcc2>
jmp    1eee <ellipse_ellipse_overlap+0xcee>
movslq -0x5c(%rbp),%rax
movsd  -0x240(%rbp,%rax,8),%xmm0
ff ff
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
cltq
movsd  %xmm0,-0x240(%rbp,%rax,8)
ff ff
mov    -0x5c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x5c(%rbp)
jmp    1e94 <ellipse_ellipse_overlap+0xc94>
movsd  -0xf8(%rbp),%xmm0
ff
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
cltq
movsd  %xmm0,-0x240(%rbp,%rax,8)
ff ff
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1e6a <ellipse_ellipse_overlap+0xc6a>
movl   $0x0,-0x68(%rbp)
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x64(%rbp),%eax
jg     21fa <ellipse_ellipse_overlap+0xffa>
cmpl   $0x1,-0x54(%rbp)
jle    1f79 <ellipse_ellipse_overlap+0xd79>
movslq -0x54(%rbp),%rax
movsd  -0x240(%rbp,%rax,8),%xmm1
ff ff
mov    -0x54(%rbp),%eax
sub    $0x1,%eax
cltq
subsd  -0x240(%rbp,%rax,8),%xmm1
ff ff
movaps 0x10e2(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0x10be(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1f79 <ellipse_ellipse_overlap+0xd79>
jmp    21ec <ellipse_ellipse_overlap+0xfec>
movslq -0x54(%rbp),%rax
movsd  -0x240(%rbp,%rax,8),%xmm0
ff ff
movaps 0x10b3(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    1fac <ellipse_ellipse_overlap+0xdac>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x1f8(%rbp)
ff
jmp    2009 <ellipse_ellipse_overlap+0xe09>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x2f0(%rbp)
ff
movslq -0x54(%rbp),%rax
movsd  -0x240(%rbp,%rax,8),%xmm1
ff ff
movslq -0x54(%rbp),%rax
mulsd  -0x240(%rbp,%rax,8),%xmm1
ff ff
movsd  -0x20(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
divsd  %xmm0,%xmm1
movsd  0x1027(%rip),%xmm0
subsd  %xmm1,%xmm0
call   1120 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x2f0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1f8(%rbp)
movsd  -0x1f8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x200(%rbp)
ff
movsd  -0x1f8(%rbp),%xmm0
ff
movslq -0x54(%rbp),%rax
movsd  -0x240(%rbp,%rax,8),%xmm1
ff ff
movsd  -0x78(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm3
movsd  -0x88(%rbp),%xmm4
ff
movsd  -0x90(%rbp),%xmm5
ff
movsd  -0x98(%rbp),%xmm6
ff
movsd  -0xa0(%rbp),%xmm7
ff
mov    $0x8,%al
call   10d0 <ellipse2tr@plt>
cvtsi2sd %eax,%xmm1
movaps 0xfbf(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xf9b(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    20f5 <ellipse_ellipse_overlap+0xef5>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
cmpl   $0x4,-0x68(%rbp)
jle    20c6 <ellipse_ellipse_overlap+0xec6>
mov    -0x50(%rbp),%rax
movl   $0xffffff93,(%rax)
movsd  0xf44(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    26f8 <ellipse_ellipse_overlap+0x14f8>
movsd  -0x1f8(%rbp),%xmm0
ff
movslq -0x68(%rbp),%rax
movsd  %xmm0,-0x270(%rbp,%rax,8)
ff ff
movslq -0x54(%rbp),%rax
movsd  -0x240(%rbp,%rax,8),%xmm0
ff ff
movslq -0x68(%rbp),%rax
movsd  %xmm0,-0x2a0(%rbp,%rax,8)
ff ff
movsd  -0x200(%rbp),%xmm0
ff
movslq -0x54(%rbp),%rax
movsd  -0x240(%rbp,%rax,8),%xmm1
ff ff
movsd  -0x78(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm3
movsd  -0x88(%rbp),%xmm4
ff
movsd  -0x90(%rbp),%xmm5
ff
movsd  -0x98(%rbp),%xmm6
ff
movsd  -0xa0(%rbp),%xmm7
ff
mov    $0x8,%al
call   10d0 <ellipse2tr@plt>
cvtsi2sd %eax,%xmm1
movaps 0xefa(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xed6(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    21e7 <ellipse_ellipse_overlap+0xfe7>
movsd  -0x200(%rbp),%xmm0
ff
subsd  -0x1f8(%rbp),%xmm0
ff
movaps 0xecd(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xea9(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    21e7 <ellipse_ellipse_overlap+0xfe7>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
cmpl   $0x4,-0x68(%rbp)
jle    21b8 <ellipse_ellipse_overlap+0xfb8>
mov    -0x50(%rbp),%rax
movl   $0xffffff93,(%rax)
movsd  0xe52(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    26f8 <ellipse_ellipse_overlap+0x14f8>
movsd  -0x200(%rbp),%xmm0
ff
movslq -0x68(%rbp),%rax
movsd  %xmm0,-0x270(%rbp,%rax,8)
ff ff
movslq -0x54(%rbp),%rax
movsd  -0x240(%rbp,%rax,8),%xmm0
ff ff
movslq -0x68(%rbp),%rax
movsd  %xmm0,-0x2a0(%rbp,%rax,8)
ff ff
jmp    21ec <ellipse_ellipse_overlap+0xfec>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1f23 <ellipse_ellipse_overlap+0xd23>
mov    -0x68(%rbp),%eax
mov    %rax,-0x2f8(%rbp)
sub    $0x4,%rax
ja     26e1 <ellipse_ellipse_overlap+0x14e1>
mov    -0x2f8(%rbp),%rax
lea    0xe34(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x310(%rbp)
ff
movsd  -0x20(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm3
movsd  -0x28(%rbp),%xmm4
movsd  -0x30(%rbp),%xmm5
movsd  0x10(%rbp),%xmm6
movsd  0x18(%rbp),%xmm7
movsd  -0x10(%rbp),%xmm8
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x308(%rbp)
ff
movsd  -0xa8(%rbp),%xmm15
ff ff
movsd  -0xb0(%rbp),%xmm14
ff ff
movsd  -0x78(%rbp),%xmm13
movsd  -0x80(%rbp),%xmm12
movsd  -0x88(%rbp),%xmm11
ff ff
movsd  -0x90(%rbp),%xmm10
ff ff
movsd  -0x98(%rbp),%xmm9
ff ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x300(%rbp)
ff
movsd  -0x310(%rbp),%xmm0
ff
mov    -0x50(%rbp),%rdi
movsd  %xmm8,(%rsp)
movsd  -0x308(%rbp),%xmm8
ff ff
movsd  %xmm8,0x8(%rsp)
movsd  -0x300(%rbp),%xmm8
ff ff
movsd  %xmm15,0x10(%rsp)
movsd  %xmm14,0x18(%rsp)
movsd  %xmm13,0x20(%rsp)
movsd  %xmm12,0x28(%rsp)
movsd  %xmm11,0x30(%rsp)
movsd  %xmm10,0x38(%rsp)
movsd  %xmm9,0x40(%rsp)
movsd  %xmm8,0x48(%rsp)
mov    $0x8,%al
call   1030 <nointpts@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x2b8(%rbp)
ff
movsd  -0x2b8(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    26f8 <ellipse_ellipse_overlap+0x14f8>
movsd  -0x268(%rbp),%xmm0
ff
movsd  -0x298(%rbp),%xmm1
ff
movsd  -0x18(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm3
movsd  -0x78(%rbp),%xmm4
movsd  -0x80(%rbp),%xmm5
movsd  -0x88(%rbp),%xmm6
ff
movsd  -0x90(%rbp),%xmm7
ff
movsd  -0x98(%rbp),%xmm9
ff ff
movsd  -0xa0(%rbp),%xmm8
ff ff
movsd  %xmm9,(%rsp)
movsd  %xmm8,0x8(%rsp)
mov    $0x8,%al
call   10c0 <istanpt@plt>
mov    %eax,-0x6c(%rbp)
cmpl   $0x72,-0x6c(%rbp)
jne    24a7 <ellipse_ellipse_overlap+0x12a7>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x328(%rbp)
ff
movsd  -0x20(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm3
movsd  -0x28(%rbp),%xmm4
movsd  -0x30(%rbp),%xmm5
movsd  0x10(%rbp),%xmm6
movsd  0x18(%rbp),%xmm7
movsd  -0x10(%rbp),%xmm8
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x320(%rbp)
ff
movsd  -0xa8(%rbp),%xmm15
ff ff
movsd  -0xb0(%rbp),%xmm14
ff ff
movsd  -0x78(%rbp),%xmm13
movsd  -0x80(%rbp),%xmm12
movsd  -0x88(%rbp),%xmm11
ff ff
movsd  -0x90(%rbp),%xmm10
ff ff
movsd  -0x98(%rbp),%xmm9
ff ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x318(%rbp)
ff
movsd  -0x328(%rbp),%xmm0
ff
mov    -0x50(%rbp),%rdi
movsd  %xmm8,(%rsp)
movsd  -0x320(%rbp),%xmm8
ff ff
movsd  %xmm8,0x8(%rsp)
movsd  -0x318(%rbp),%xmm8
ff ff
movsd  %xmm15,0x10(%rsp)
movsd  %xmm14,0x18(%rsp)
movsd  %xmm13,0x20(%rsp)
movsd  %xmm12,0x28(%rsp)
movsd  %xmm11,0x30(%rsp)
movsd  %xmm10,0x38(%rsp)
movsd  %xmm9,0x40(%rsp)
movsd  %xmm8,0x48(%rsp)
mov    $0x8,%al
call   1030 <nointpts@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x2b8(%rbp)
ff
jmp    2553 <ellipse_ellipse_overlap+0x1353>
lea    -0x270(%rbp),%rdi
lea    -0x2a0(%rbp),%rsi
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0xa8(%rbp),%xmm5
ff
movsd  -0xb0(%rbp),%xmm6
ff
movsd  -0x38(%rbp),%xmm7
movsd  -0x78(%rbp),%xmm13
movsd  -0x80(%rbp),%xmm12
movsd  -0x88(%rbp),%xmm11
ff ff
movsd  -0x90(%rbp),%xmm10
ff ff
movsd  -0x98(%rbp),%xmm9
ff ff
movsd  -0xa0(%rbp),%xmm8
ff ff
mov    -0x50(%rbp),%rdx
movsd  %xmm13,(%rsp)
movsd  %xmm12,0x8(%rsp)
movsd  %xmm11,0x10(%rsp)
movsd  %xmm10,0x18(%rsp)
movsd  %xmm9,0x20(%rsp)
movsd  %xmm8,0x28(%rsp)
mov    $0x8,%al
call   1080 <twointpts@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x2b8(%rbp)
ff
movsd  -0x2b8(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    26f8 <ellipse_ellipse_overlap+0x14f8>
lea    -0x270(%rbp),%rdi
lea    -0x2a0(%rbp),%rsi
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0xa8(%rbp),%xmm5
ff
movsd  -0xb0(%rbp),%xmm6
ff
movsd  -0x38(%rbp),%xmm7
movsd  -0x78(%rbp),%xmm13
movsd  -0x80(%rbp),%xmm12
movsd  -0x88(%rbp),%xmm11
ff ff
movsd  -0x90(%rbp),%xmm10
ff ff
movsd  -0x98(%rbp),%xmm9
ff ff
movsd  -0xa0(%rbp),%xmm8
ff ff
mov    -0x50(%rbp),%rdx
movsd  %xmm13,(%rsp)
movsd  %xmm12,0x8(%rsp)
movsd  %xmm11,0x10(%rsp)
movsd  %xmm10,0x18(%rsp)
movsd  %xmm9,0x20(%rsp)
movsd  %xmm8,0x28(%rsp)
mov    $0x8,%al
call   1100 <threeintpts@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x2b8(%rbp)
ff
movsd  -0x2b8(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    26f8 <ellipse_ellipse_overlap+0x14f8>
lea    -0x270(%rbp),%rdi
lea    -0x2a0(%rbp),%rsi
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0xa8(%rbp),%xmm5
ff
movsd  -0xb0(%rbp),%xmm6
ff
movsd  -0x38(%rbp),%xmm7
movsd  -0x78(%rbp),%xmm13
movsd  -0x80(%rbp),%xmm12
movsd  -0x88(%rbp),%xmm11
ff ff
movsd  -0x90(%rbp),%xmm10
ff ff
movsd  -0x98(%rbp),%xmm9
ff ff
movsd  -0xa0(%rbp),%xmm8
ff ff
mov    -0x50(%rbp),%rdx
movsd  %xmm13,(%rsp)
movsd  %xmm12,0x8(%rsp)
movsd  %xmm11,0x10(%rsp)
movsd  %xmm10,0x18(%rsp)
movsd  %xmm9,0x20(%rsp)
movsd  %xmm8,0x28(%rsp)
mov    $0x8,%al
call   1060 <fourintpts@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x2b8(%rbp)
ff
movsd  -0x2b8(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    26f8 <ellipse_ellipse_overlap+0x14f8>
mov    -0x50(%rbp),%rax
movl   $0xffffff93,(%rax)
movsd  0x90d(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x380,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ellipse_ellipse_overlap>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x2b8,%rsp
mov    %rdi,%r14
movapd %xmm7,0x130(%rsp)
movapd %xmm6,0x140(%rsp)
movapd %xmm5,0x100(%rsp)
movsd  %xmm4,0x158(%rsp)
movsd  %xmm3,0x150(%rsp)
movapd %xmm0,%xmm4
xorpd  %xmm0,%xmm0
movapd %xmm0,0x170(%rsp)
movapd %xmm0,0x160(%rsp)
movq   $0x0,0x180(%rsp)
movapd %xmm0,0x220(%rsp)
movapd %xmm0,0x210(%rsp)
movapd %xmm0,0x200(%rsp)
movapd %xmm0,0x1f0(%rsp)
movapd %xmm0,0x1e0(%rsp)
movapd %xmm0,0x1d0(%rsp)
movapd %xmm0,0x1c0(%rsp)
movq   $0x0,0x230(%rsp)
movapd %xmm0,0xe0(%rsp)
movapd %xmm0,0xd0(%rsp)
movq   $0x0,0xf0(%rsp)
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jbe    17db <ellipse_ellipse_overlap+0x5fb>
ucomisd %xmm0,%xmm2
jbe    17db <ellipse_ellipse_overlap+0x5fb>
movapd %xmm1,%xmm3
xorpd  %xmm0,%xmm0
movapd 0x140(%rsp),%xmm1
ucomisd %xmm0,%xmm1
jbe    17db <ellipse_ellipse_overlap+0x5fb>
movapd 0x130(%rsp),%xmm1
ucomisd %xmm0,%xmm1
jbe    17db <ellipse_ellipse_overlap+0x5fb>
movapd 0x1d46(%rip),%xmm0
andpd  %xmm4,%xmm0
ucomisd 0x1d02(%rip),%xmm0
movsd  %xmm2,0x58(%rsp)
movapd %xmm3,0x110(%rsp)
jbe    132c <ellipse_ellipse_overlap+0x14c>
movsd  0x1ce9(%rip),%xmm1
movapd %xmm4,%xmm0
call   1050 <fmod@plt>
movapd %xmm0,%xmm4
movapd 0x100(%rsp),%xmm0
movapd 0x1d03(%rip),%xmm1
andpd  %xmm0,%xmm1
ucomisd 0x1cbf(%rip),%xmm1
movapd %xmm4,0x120(%rsp)
jbe    1373 <ellipse_ellipse_overlap+0x193>
movsd  0x1cac(%rip),%xmm1
call   1050 <fmod@plt>
movapd 0x120(%rsp),%xmm4
movapd %xmm0,0x100(%rsp)
movapd %xmm4,%xmm0
call   10d0 <cos@plt>
movsd  %xmm0,0x60(%rsp)
movapd 0x120(%rsp),%xmm0
call   1090 <sin@plt>
movsd  0x2e0(%rsp),%xmm5
movapd %xmm5,%xmm4
movsd  0x150(%rsp),%xmm3
subsd  %xmm3,%xmm4
movsd  0x2e8(%rsp),%xmm1
subsd  0x158(%rsp),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm0,%xmm2
movsd  0x60(%rsp),%xmm6
mulsd  %xmm6,%xmm4
addsd  %xmm2,%xmm4
movsd  %xmm4,0x88(%rsp)
subsd  %xmm5,%xmm3
mulsd  %xmm6,%xmm1
mulsd  %xmm0,%xmm3
addsd  %xmm1,%xmm3
movsd  %xmm3,0x80(%rsp)
movapd 0x100(%rsp),%xmm0
subsd  0x120(%rsp),%xmm0
movapd 0x1c32(%rip),%xmm1
andpd  %xmm0,%xmm1
ucomisd 0x1bee(%rip),%xmm1
jbe    1429 <ellipse_ellipse_overlap+0x249>
movsd  0x1be4(%rip),%xmm1
call   1050 <fmod@plt>
movapd %xmm0,0x70(%rsp)
call   10d0 <cos@plt>
movapd %xmm0,0x60(%rsp)
movapd 0x70(%rsp),%xmm0
call   1090 <sin@plt>
movapd 0x60(%rsp),%xmm12
movapd %xmm12,%xmm1
unpcklpd %xmm0,%xmm1
mulpd  %xmm1,%xmm1
movapd %xmm12,%xmm8
addsd  %xmm12,%xmm8
movapd %xmm8,%xmm7
mulsd  %xmm0,%xmm7
movapd 0x140(%rsp),%xmm4
unpcklpd 0x130(%rsp),%xmm4
mulpd  %xmm4,%xmm4
movsd  0x80(%rsp),%xmm5
movapd %xmm5,%xmm3
mulsd  %xmm0,%xmm3
movapd %xmm12,%xmm2
movsd  0x88(%rsp),%xmm6
mulsd  %xmm6,%xmm2
addsd  %xmm3,%xmm2
movapd %xmm2,%xmm9
divsd  %xmm4,%xmm9
mulsd  %xmm12,%xmm5
movapd %xmm0,%xmm3
mulsd  %xmm6,%xmm3
subsd  %xmm5,%xmm3
movapd %xmm1,%xmm6
divpd  %xmm4,%xmm6
unpcklpd %xmm7,%xmm7
divpd  %xmm4,%xmm7
movapd %xmm7,%xmm10
movapd %xmm4,%xmm11
mulsd  %xmm2,%xmm2
divsd  %xmm4,%xmm2
unpckhpd %xmm4,%xmm4
movapd %xmm3,%xmm7
divsd  %xmm4,%xmm7
movapd %xmm6,%xmm5
unpckhpd %xmm6,%xmm5
addpd  %xmm6,%xmm5
movapd %xmm5,0xa0(%rsp)
movapd %xmm10,%xmm5
unpckhpd %xmm10,%xmm5
subsd  %xmm5,%xmm10
movapd %xmm10,0x70(%rsp)
shufpd $0x1,%xmm11,%xmm11
divpd  %xmm11,%xmm1
movapd %xmm1,%xmm5
unpckhpd %xmm1,%xmm5
addsd  %xmm1,%xmm5
movapd %xmm5,0x90(%rsp)
movsd  0x1acb(%rip),%xmm1
movapd %xmm12,%xmm5
mulsd  %xmm1,%xmm5
movapd %xmm0,%xmm6
mulsd  %xmm1,%xmm6
movapd %xmm6,%xmm0
mulsd  %xmm7,%xmm0
mulsd  %xmm9,%xmm5
addsd  %xmm0,%xmm5
movapd %xmm5,0x60(%rsp)
mulsd  %xmm8,%xmm7
mulsd  %xmm9,%xmm6
addsd  %xmm7,%xmm6
movapd %xmm6,0xc0(%rsp)
mulsd  %xmm3,%xmm3
divsd  %xmm4,%xmm3
addsd  %xmm2,%xmm3
addsd  0x1a68(%rip),%xmm3
movapd %xmm3,0xb0(%rsp)
movsd  0x1a6f(%rip),%xmm1
movapd 0x110(%rsp),%xmm0
call   10f0 <pow@plt>
movapd 0xa0(%rsp),%xmm8
mulsd  %xmm8,%xmm0
movsd  0x58(%rsp),%xmm14
movapd %xmm14,%xmm10
mulsd  %xmm14,%xmm10
movapd 0x110(%rsp),%xmm12
movapd %xmm12,%xmm9
mulsd  %xmm12,%xmm9
movapd %xmm8,%xmm4
addsd  %xmm8,%xmm4
movapd 0x70(%rsp),%xmm2
movapd %xmm2,%xmm5
mulsd  %xmm2,%xmm5
movapd %xmm4,%xmm3
movapd 0x90(%rsp),%xmm15
mulsd  %xmm15,%xmm3
movapd %xmm5,%xmm6
subsd  %xmm3,%xmm6
movapd %xmm10,%xmm1
mulsd  %xmm15,%xmm1
movapd %xmm15,%xmm7
mulsd  %xmm1,%xmm7
mulsd  %xmm9,%xmm6
addsd  %xmm7,%xmm6
mulsd  %xmm10,%xmm6
mulsd  %xmm8,%xmm0
addsd  %xmm6,%xmm0
movapd 0xc0(%rsp),%xmm13
movapd %xmm13,%xmm6
mulsd  %xmm8,%xmm6
movapd %xmm2,%xmm7
movapd 0x60(%rsp),%xmm11
mulsd  %xmm11,%xmm7
subsd  %xmm6,%xmm7
movsd  0x1998(%rip),%xmm6
mulsd  %xmm9,%xmm7
mulsd  %xmm13,%xmm1
addsd  %xmm7,%xmm1
subsd  %xmm5,%xmm3
movapd %xmm11,%xmm5
mulsd  %xmm11,%xmm5
mulsd  %xmm10,%xmm3
addsd  %xmm5,%xmm3
movapd 0xb0(%rsp),%xmm7
mulsd  %xmm7,%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm12,%xmm6
mulsd  %xmm12,%xmm6
mulsd  %xmm8,%xmm6
mulsd  %xmm8,%xmm6
addsd  %xmm3,%xmm6
movapd %xmm15,%xmm3
addsd  %xmm15,%xmm3
movapd %xmm13,%xmm4
mulsd  %xmm13,%xmm4
mulsd  %xmm7,%xmm3
addsd  %xmm4,%xmm3
movsd  %xmm10,0x1b8(%rsp)
mulsd  %xmm10,%xmm3
mulsd  %xmm9,%xmm6
addsd  %xmm3,%xmm6
movapd %xmm13,%xmm3
unpcklpd %xmm8,%xmm3
movapd %xmm8,%xmm4
unpcklpd %xmm12,%xmm4
mulpd  %xmm3,%xmm4
movapd 0x1936(%rip),%xmm5
xorpd  0x70(%rsp),%xmm5
mulsd  %xmm11,%xmm5
unpcklpd %xmm11,%xmm5
addpd  %xmm4,%xmm5
movapd %xmm14,%xmm3
addsd  %xmm14,%xmm3
mulsd  %xmm3,%xmm1
unpcklpd %xmm12,%xmm9
mulpd  %xmm9,%xmm5
movapd %xmm13,%xmm2
mulsd  %xmm7,%xmm2
unpcklpd %xmm7,%xmm2
addpd  %xmm5,%xmm2
movapd %xmm12,%xmm4
mulsd  %xmm8,%xmm4
subsd  %xmm11,%xmm4
mulsd  %xmm12,%xmm4
addsd  %xmm7,%xmm4
unpcklpd %xmm4,%xmm3
mulpd  %xmm2,%xmm3
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
je     17e7 <ellipse_ellipse_overlap+0x607>
unpcklpd %xmm0,%xmm0
divpd  %xmm0,%xmm3
movupd %xmm3,0x178(%rsp)
unpcklpd %xmm6,%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,0x168(%rsp)
movabs $0x3ff0000000000000,%rax
mov    %rax,0x160(%rsp)
xor    %ebx,%ebx
lea    0x160(%rsp),%rdi
lea    0x1c0(%rsp),%rsi
xor    %eax,%eax
call   1040 <BIQUADROOTS@plt>
movsd  0x58(%rsp),%xmm14
xor    %edx,%edx
xor    %ecx,%ecx
jmp    184d <ellipse_ellipse_overlap+0x66d>
movl   $0xffffff9c,(%r14)
jmp    1db7 <ellipse_ellipse_overlap+0xbd7>
ucomisd %xmm2,%xmm1
je     1dcd <ellipse_ellipse_overlap+0xbed>
unpcklpd %xmm3,%xmm6
unpckhpd %xmm3,%xmm3
divsd  %xmm1,%xmm3
movsd  %xmm3,0x178(%rsp)
unpcklpd %xmm1,%xmm1
divpd  %xmm1,%xmm6
movupd %xmm6,0x168(%rsp)
movabs $0x3ff0000000000000,%rax
mov    %rax,0x160(%rsp)
xor    %ebx,%ebx
lea    0x160(%rsp),%rdi
lea    0x1c0(%rsp),%rsi
xor    %eax,%eax
call   1080 <CUBICROOTS@plt>
movsd  0x58(%rsp),%xmm14
mov    $0x1,%cl
xor    %edx,%edx
movsd  0x218(%rsp),%xmm1
andpd  0x17e2(%rip),%xmm1
xor    %eax,%eax
movsd  0x17b8(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    188a <ellipse_ellipse_overlap+0x6aa>
movsd  0x1f0(%rsp),%xmm1
mulsd  %xmm14,%xmm1
movsd  %xmm1,0xd8(%rsp)
mov    $0x1,%eax
test   %bl,%bl
jne    192f <ellipse_ellipse_overlap+0x74f>
movsd  0x220(%rsp),%xmm1
andpd  0x179d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    18c5 <ellipse_ellipse_overlap+0x6e5>
movsd  0x1f8(%rsp),%xmm1
mulsd  %xmm14,%xmm1
mov    %eax,%esi
add    $0x1,%eax
movsd  %xmm1,0xd8(%rsp,%rsi,8)
test   %dl,%dl
jne    192f <ellipse_ellipse_overlap+0x74f>
movsd  0x228(%rsp),%xmm1
andpd  0x1766(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    18fa <ellipse_ellipse_overlap+0x71a>
add    $0x1,%eax
movsd  0x200(%rsp),%xmm1
mulsd  %xmm14,%xmm1
movsd  %xmm1,0xd0(%rsp,%rax,8)
test   %cl,%cl
jne    192f <ellipse_ellipse_overlap+0x74f>
movsd  0x230(%rsp),%xmm1
andpd  0x1731(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    192f <ellipse_ellipse_overlap+0x74f>
add    $0x1,%eax
movsd  0x208(%rsp),%xmm0
mulsd  %xmm14,%xmm0
movsd  %xmm0,0xd0(%rsp,%rax,8)
cmp    $0x2,%eax
jl     1a3c <ellipse_ellipse_overlap+0x85c>
lea    0x1(%rax),%ecx
movsd  0xd8(%rsp),%xmm1
movsd  0xe0(%rsp),%xmm0
mov    $0x2,%edx
ucomisd %xmm1,%xmm0
jae    1966 <ellipse_ellipse_overlap+0x786>
movsd  %xmm1,0xe0(%rsp)
mov    $0x1,%edx
movsd  %xmm0,0xd0(%rsp,%rdx,8)
cmp    $0x3,%ecx
je     1a3c <ellipse_ellipse_overlap+0x85c>
movsd  0xe0(%rsp),%xmm1
movsd  0xe8(%rsp),%xmm0
mov    $0x3,%edx
ucomisd %xmm1,%xmm0
jae    19c0 <ellipse_ellipse_overlap+0x7e0>
movsd  %xmm1,0xe8(%rsp)
movsd  0xd8(%rsp),%xmm1
mov    $0x2,%edx
ucomisd %xmm1,%xmm0
jae    19c0 <ellipse_ellipse_overlap+0x7e0>
movsd  %xmm1,0xe0(%rsp)
mov    $0x1,%edx
movsd  %xmm0,0xd0(%rsp,%rdx,8)
cmp    $0x4,%ecx
je     1a3c <ellipse_ellipse_overlap+0x85c>
movsd  0xe8(%rsp),%xmm1
movsd  0xf0(%rsp),%xmm0
mov    $0x4,%ecx
ucomisd %xmm1,%xmm0
jae    1a33 <ellipse_ellipse_overlap+0x853>
movsd  %xmm1,0xf0(%rsp)
movsd  0xe0(%rsp),%xmm1
mov    $0x3,%ecx
ucomisd %xmm1,%xmm0
jae    1a33 <ellipse_ellipse_overlap+0x853>
movsd  %xmm1,0xe8(%rsp)
movsd  0xd8(%rsp),%xmm1
mov    $0x2,%ecx
ucomisd %xmm1,%xmm0
jae    1a33 <ellipse_ellipse_overlap+0x853>
movsd  %xmm1,0xe0(%rsp)
mov    $0x1,%ecx
movsd  %xmm0,0xd0(%rsp,%rcx,8)
test   %eax,%eax
jle    1cd3 <ellipse_ellipse_overlap+0xaf3>
add    $0x1,%eax
mov    $0x1,%ebx
mov    $0x1,%r15d
sub    %rax,%r15
xor    %ebp,%ebp
movapd 0x15e1(%rip),%xmm3
movsd  0x15c1(%rip),%xmm2
jmp    1a8d <ellipse_ellipse_overlap+0x8ad>
nopl   0x0(%rax)
movsd  0x58(%rsp),%xmm14
lea    (%r15,%rbx,1),%rax
add    $0x1,%rax
add    $0x1,%rbx
cmp    $0x1,%rax
je     1cb8 <ellipse_ellipse_overlap+0xad8>
movsd  0xd0(%rsp,%rbx,8),%xmm1
cmp    $0x2,%rbx
jb     1ab3 <ellipse_ellipse_overlap+0x8d3>
movapd %xmm1,%xmm0
subsd  0xc8(%rsp,%rbx,8),%xmm0
andpd  %xmm3,%xmm0
ucomisd %xmm0,%xmm2
ja     1a77 <ellipse_ellipse_overlap+0x897>
movapd %xmm1,%xmm2
andpd  %xmm3,%xmm2
xorpd  %xmm0,%xmm0
ucomisd %xmm14,%xmm2
movaps 0x60(%rsp),%xmm5
movapd 0x70(%rsp),%xmm8
movaps 0xc0(%rsp),%xmm6
movaps 0xb0(%rsp),%xmm7
movaps 0xa0(%rsp),%xmm2
movaps 0x90(%rsp),%xmm4
movapd %xmm1,0x190(%rsp)
ja     1b6b <ellipse_ellipse_overlap+0x98b>
movapd %xmm1,%xmm3
mulsd  %xmm1,%xmm3
divsd  0x1b8(%rsp),%xmm3
movsd  0x151c(%rip),%xmm0
subsd  %xmm3,%xmm0
ucomisd 0x1518(%rip),%xmm0
jb     1b28 <ellipse_ellipse_overlap+0x948>
sqrtsd %xmm0,%xmm0
jmp    1b62 <ellipse_ellipse_overlap+0x982>
call   1100 <sqrt@plt>
movapd 0x190(%rsp),%xmm1
movaps 0x90(%rsp),%xmm4
movaps 0xa0(%rsp),%xmm2
movaps 0xb0(%rsp),%xmm7
movaps 0xc0(%rsp),%xmm6
movapd 0x70(%rsp),%xmm8
movaps 0x60(%rsp),%xmm5
mulsd  0x110(%rsp),%xmm0
movapd %xmm0,0x1a0(%rsp)
movapd %xmm8,%xmm3
mov    $0x8,%al
call   10b0 <ellipse2tr@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
andpd  0x14b1(%rip),%xmm0
movsd  0x1491(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    1be0 <ellipse_ellipse_overlap+0xa00>
cmp    $0x4,%ebp
jge    1db0 <ellipse_ellipse_overlap+0xbd0>
add    $0x1,%ebp
movslq %ebp,%rax
movaps 0x1a0(%rsp),%xmm0
movsd  %xmm0,0x270(%rsp,%rax,8)
movapd 0x190(%rsp),%xmm1
movsd  %xmm1,0x240(%rsp,%rax,8)
jmp    1bf1 <ellipse_ellipse_overlap+0xa11>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movapd 0x190(%rsp),%xmm1
movaps 0x1a0(%rsp),%xmm0
xorps  0x1458(%rip),%xmm0
movaps %xmm0,0x2a0(%rsp)
movaps 0xa0(%rsp),%xmm2
movaps 0x70(%rsp),%xmm3
movapd 0x90(%rsp),%xmm4
movapd 0x60(%rsp),%xmm5
movapd 0xc0(%rsp),%xmm6
movapd 0xb0(%rsp),%xmm7
mov    $0x8,%al
call   10b0 <ellipse2tr@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd 0x13fc(%rip),%xmm3
andpd  %xmm3,%xmm0
movsd  0x13d8(%rip),%xmm2
ucomisd %xmm0,%xmm2
jbe    1a70 <ellipse_ellipse_overlap+0x890>
movapd 0x2a0(%rsp),%xmm1
movapd %xmm1,%xmm0
subsd  0x1a0(%rsp),%xmm0
andpd  %xmm3,%xmm0
ucomisd %xmm2,%xmm0
movsd  0x58(%rsp),%xmm14
jbe    1a77 <ellipse_ellipse_overlap+0x897>
cmp    $0x4,%ebp
jge    1db0 <ellipse_ellipse_overlap+0xbd0>
movapd %xmm1,%xmm0
add    $0x1,%ebp
movslq %ebp,%rax
movsd  %xmm1,0x270(%rsp,%rax,8)
movapd 0x190(%rsp),%xmm0
movsd  %xmm0,0x240(%rsp,%rax,8)
jmp    1a77 <ellipse_ellipse_overlap+0x897>
cmp    $0x4,%ebp
ja     1db0 <ellipse_ellipse_overlap+0xbd0>
mov    %ebp,%eax
lea    0x1396(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movaps 0xb0(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movaps 0xc0(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movaps 0x60(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
movaps 0x90(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movaps 0x70(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movaps 0xa0(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x80(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x88(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movaps 0x100(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movaps 0x120(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movaps 0x110(%rsp),%xmm0
movapd %xmm14,%xmm1
movapd 0x140(%rsp),%xmm2
movapd 0x130(%rsp),%xmm3
movsd  0x150(%rsp),%xmm4
movsd  0x158(%rsp),%xmm5
movsd  0x2e0(%rsp),%xmm6
movsd  0x2e8(%rsp),%xmm7
mov    %r14,%rdi
mov    $0x8,%al
call   1030 <nointpts@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
jmp    1dbf <ellipse_ellipse_overlap+0xbdf>
movl   $0xffffff93,(%r14)
movsd  0x1241(%rip),%xmm0
add    $0x2b8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm6
je     2094 <ellipse_ellipse_overlap+0xeb4>
unpcklpd %xmm6,%xmm6
divpd  %xmm6,%xmm3
movupd %xmm3,0x168(%rsp)
movabs $0x3ff0000000000000,%rax
mov    %rax,0x160(%rsp)
xor    %ebx,%ebx
lea    0x160(%rsp),%rdi
lea    0x1c0(%rsp),%rsi
xor    %eax,%eax
call   10c0 <QUADROOTS@plt>
movsd  0x58(%rsp),%xmm14
mov    $0x1,%dl
jmp    17d7 <ellipse_ellipse_overlap+0x5f7>
movsd  0x278(%rsp),%xmm0
movsd  0x248(%rsp),%xmm1
movaps 0xb0(%rsp),%xmm2
movsd  %xmm2,0x8(%rsp)
movaps 0xc0(%rsp),%xmm2
movsd  %xmm2,(%rsp)
movapd 0x110(%rsp),%xmm2
movapd %xmm14,%xmm3
movapd 0xa0(%rsp),%xmm4
movapd 0x70(%rsp),%xmm5
movapd 0x90(%rsp),%xmm6
movapd 0x60(%rsp),%xmm7
mov    $0x8,%al
call   10a0 <istanpt@plt>
cmp    $0x72,%eax
jne    20ce <ellipse_ellipse_overlap+0xeee>
movaps 0xb0(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movaps 0xc0(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movaps 0x60(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
movaps 0x90(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movaps 0x70(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movaps 0xa0(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x80(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x88(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movaps 0x100(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movaps 0x120(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movaps 0x110(%rsp),%xmm0
movsd  0x58(%rsp),%xmm1
jmp    1d67 <ellipse_ellipse_overlap+0xb87>
movaps 0xb0(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movaps 0xc0(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movaps 0x60(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movaps 0x90(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movaps 0x70(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movaps 0xa0(%rsp),%xmm0
movsd  %xmm0,(%rsp)
lea    0x270(%rsp),%rdi
lea    0x240(%rsp),%rsi
movaps 0x110(%rsp),%xmm0
movapd %xmm14,%xmm1
movapd 0x120(%rsp),%xmm2
movapd 0x140(%rsp),%xmm3
movapd 0x130(%rsp),%xmm4
movsd  0x88(%rsp),%xmm5
movsd  0x80(%rsp),%xmm6
movapd 0x100(%rsp),%xmm7
mov    %r14,%rdx
mov    $0x8,%al
call   10e0 <threeintpts@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
jmp    1dbf <ellipse_ellipse_overlap+0xbdf>
movaps 0xb0(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movaps 0xc0(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movaps 0x60(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movaps 0x90(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movaps 0x70(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movaps 0xa0(%rsp),%xmm0
movsd  %xmm0,(%rsp)
lea    0x270(%rsp),%rdi
lea    0x240(%rsp),%rsi
movaps 0x110(%rsp),%xmm0
movapd %xmm14,%xmm1
movapd 0x120(%rsp),%xmm2
movapd 0x140(%rsp),%xmm3
movapd 0x130(%rsp),%xmm4
movsd  0x88(%rsp),%xmm5
movsd  0x80(%rsp),%xmm6
movapd 0x100(%rsp),%xmm7
mov    %r14,%rdx
mov    $0x8,%al
call   1060 <fourintpts@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
jmp    1dbf <ellipse_ellipse_overlap+0xbdf>
ucomisd %xmm0,%xmm3
je     1cd3 <ellipse_ellipse_overlap+0xaf3>
movapd %xmm3,%xmm0
unpckhpd %xmm3,%xmm0
xorpd  0xfa2(%rip),%xmm0
divsd  %xmm3,%xmm0
movsd  %xmm0,0x1f0(%rsp)
movq   $0x0,0x218(%rsp)
mov    $0x1,%bl
jmp    17d5 <ellipse_ellipse_overlap+0x5f5>
movaps 0xb0(%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movaps 0xc0(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movaps 0x60(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movaps 0x90(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movaps 0x70(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
movaps 0xa0(%rsp),%xmm0
movsd  %xmm0,(%rsp)
lea    0x270(%rsp),%rdi
lea    0x240(%rsp),%rsi
movaps 0x110(%rsp),%xmm0
movsd  0x58(%rsp),%xmm1
movapd 0x120(%rsp),%xmm2
movapd 0x140(%rsp),%xmm3
movapd 0x130(%rsp),%xmm4
movsd  0x88(%rsp),%xmm5
movsd  0x80(%rsp),%xmm6
movapd 0x100(%rsp),%xmm7
mov    %r14,%rdx
mov    $0x8,%al
call   1070 <twointpts@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
jmp    1dbf <ellipse_ellipse_overlap+0xbdf>

LLVM IR (-O0):
define double @ellipse_ellipse_overlap(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, i32* %10) {
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca i32*
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32
%29 = alloca i32
%30 = alloca i32
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
%45 = alloca double
%46 = alloca double
%47 = alloca double
%48 = alloca double
%49 = alloca double
%50 = alloca double
%51 = alloca [5 x double]
%52 = alloca [5 x double]
%53 = alloca [3 x [5 x double]]
%54 = alloca double
%55 = alloca double
%56 = alloca double
%57 = alloca double
%58 = alloca [5 x double]
%59 = alloca [5 x double]
%60 = alloca [5 x double]
%61 = alloca double
%62 = alloca double
%63 = alloca double
store double %0, double* %13
store double %1, double* %14
store double %2, double* %15
store double %3, double* %16
store double %4, double* %17
store double %5, double* %18
store double %6, double* %19
store double %7, double* %20
store double %8, double* %21
store double %9, double* %22
store i32* %10, i32** %23
%64 = bitcast [5 x double]* %51 to i8*
%65 = bitcast [5 x double]* %52 to i8*
%66 = bitcast [3 x [5 x double]]* %53 to i8*
%67 = bitcast [5 x double]* %58 to i8*
%68 = load double, double* %14
%69 = fcmp ogt double %68, 0.000000e+00
br i1 %69, label %70, label %79
70: ; preds = %11
%71 = load double, double* %15
%72 = fcmp ogt double %71, 0.000000e+00
br i1 %72, label %73, label %79
73: ; preds = %70
%74 = load double, double* %19
%75 = fcmp ogt double %74, 0.000000e+00
br i1 %75, label %76, label %79
76: ; preds = %73
%77 = load double, double* %20
%78 = fcmp ogt double %77, 0.000000e+00
br i1 %78, label %81, label %79
79: ; preds = %76, %73, %70, %11
%80 = load i32*, i32** %23
store i32 -100, i32* %80
store double -1.000000e+00, double* %12
br label %820
81: ; preds = %76
%82 = load double, double* %13
%83 = call double @llvm.fabs.f64(double %82)
%84 = call double @asin(double 1.000000e+00)
%85 = fmul double 2.000000e+00, %84
%86 = fmul double 2.000000e+00, %85
%87 = fcmp ogt double %83, %86
br i1 %87, label %88, label %94
88: ; preds = %81
%89 = load double, double* %13
%90 = call double @asin(double 1.000000e+00)
%91 = fmul double 2.000000e+00, %90
%92 = fmul double 2.000000e+00, %91
%93 = call double @fmod(double %89, double %92)
store double %93, double* %13
br label %94
94: ; preds = %88, %81
%95 = load double, double* %18
%96 = call double @llvm.fabs.f64(double %95)
%97 = call double @asin(double 1.000000e+00)
%98 = fmul double 2.000000e+00, %97
%99 = fmul double 2.000000e+00, %98
%100 = fcmp ogt double %96, %99
br i1 %100, label %101, label %107
101: ; preds = %94
%102 = load double, double* %18
%103 = call double @asin(double 1.000000e+00)
%104 = fmul double 2.000000e+00, %103
%105 = fmul double 2.000000e+00, %104
%106 = call double @fmod(double %102, double %105)
store double %106, double* %18
br label %107
107: ; preds = %101, %94
%108 = load double, double* %13
%109 = call double @cos(double %108)
store double %109, double* %42
%110 = load double, double* %13
%111 = call double @sin(double %110)
store double %111, double* %44
%112 = load double, double* %21
%113 = load double, double* %16
%114 = fsub double %112, %113
%115 = load double, double* %42
%116 = load double, double* %22
%117 = load double, double* %17
%118 = fsub double %116, %117
%119 = load double, double* %44
%120 = fmul double %118, %119
%121 = call double @llvm.fmuladd.f64(double %114, double %115, double %120)
store double %121, double* %37
%122 = load double, double* %16
%123 = load double, double* %21
%124 = fsub double %122, %123
%125 = load double, double* %44
%126 = load double, double* %22
%127 = load double, double* %17
%128 = fsub double %126, %127
%129 = load double, double* %42
%130 = fmul double %128, %129
%131 = call double @llvm.fmuladd.f64(double %124, double %125, double %130)
store double %131, double* %38
%132 = load double, double* %18
%133 = load double, double* %13
%134 = fsub double %132, %133
store double %134, double* %41
%135 = load double, double* %41
%136 = call double @llvm.fabs.f64(double %135)
%137 = call double @asin(double 1.000000e+00)
%138 = fmul double 2.000000e+00, %137
%139 = fmul double 2.000000e+00, %138
%140 = fcmp ogt double %136, %139
br i1 %140, label %141, label %147
141: ; preds = %107
%142 = load double, double* %41
%143 = call double @asin(double 1.000000e+00)
%144 = fmul double 2.000000e+00, %143
%145 = fmul double 2.000000e+00, %144
%146 = call double @fmod(double %142, double %145)
store double %146, double* %41
br label %147
147: ; preds = %141, %107
%148 = load double, double* %41
%149 = call double @cos(double %148)
store double %149, double* %42
%150 = load double, double* %42
%151 = load double, double* %42
%152 = fmul double %150, %151
store double %152, double* %43
%153 = load double, double* %41
%154 = call double @sin(double %153)
store double %154, double* %44
%155 = load double, double* %44
%156 = load double, double* %44
%157 = fmul double %155, %156
store double %157, double* %45
%158 = load double, double* %42
%159 = fmul double 2.000000e+00, %158
%160 = load double, double* %44
%161 = fmul double %159, %160
store double %161, double* %46
%162 = load double, double* %19
%163 = load double, double* %19
%164 = fmul double %162, %163
store double %164, double* %39
%165 = load double, double* %20
%166 = load double, double* %20
%167 = fmul double %165, %166
store double %167, double* %40
%168 = load double, double* %42
%169 = load double, double* %37
%170 = load double, double* %44
%171 = load double, double* %38
%172 = fmul double %170, %171
%173 = call double @llvm.fmuladd.f64(double %168, double %169, double %172)
%174 = load double, double* %39
%175 = fdiv double %173, %174
store double %175, double* %47
%176 = load double, double* %44
%177 = load double, double* %37
%178 = load double, double* %42
%179 = load double, double* %38
%180 = fmul double %178, %179
%181 = fneg double %180
%182 = call double @llvm.fmuladd.f64(double %176, double %177, double %181)
%183 = load double, double* %40
%184 = fdiv double %182, %183
store double %184, double* %48
%185 = load double, double* %42
%186 = load double, double* %37
%187 = load double, double* %44
%188 = load double, double* %38
%189 = fmul double %187, %188
%190 = call double @llvm.fmuladd.f64(double %185, double %186, double %189)
store double %190, double* %49
%191 = load double, double* %44
%192 = load double, double* %37
%193 = load double, double* %42
%194 = load double, double* %38
%195 = fmul double %193, %194
%196 = fneg double %195
%197 = call double @llvm.fmuladd.f64(double %191, double %192, double %196)
store double %197, double* %50
%198 = load double, double* %43
%199 = load double, double* %39
%200 = fdiv double %198, %199
%201 = load double, double* %45
%202 = load double, double* %40
%203 = fdiv double %201, %202
%204 = fadd double %200, %203
store double %204, double* %31
%205 = load double, double* %46
%206 = load double, double* %39
%207 = fdiv double %205, %206
%208 = load double, double* %46
%209 = load double, double* %40
%210 = fdiv double %208, %209
%211 = fsub double %207, %210
store double %211, double* %32
%212 = load double, double* %45
%213 = load double, double* %39
%214 = fdiv double %212, %213
%215 = load double, double* %43
%216 = load double, double* %40
%217 = fdiv double %215, %216
%218 = fadd double %214, %217
store double %218, double* %33
%219 = load double, double* %42
%220 = fmul double -2.000000e+00, %219
%221 = load double, double* %47
%222 = load double, double* %44
%223 = fmul double 2.000000e+00, %222
%224 = load double, double* %48
%225 = fmul double %223, %224
%226 = fneg double %225
%227 = call double @llvm.fmuladd.f64(double %220, double %221, double %226)
store double %227, double* %34
%228 = load double, double* %44
%229 = fmul double -2.000000e+00, %228
%230 = load double, double* %47
%231 = load double, double* %42
%232 = fmul double 2.000000e+00, %231
%233 = load double, double* %48
%234 = fmul double %232, %233
%235 = call double @llvm.fmuladd.f64(double %229, double %230, double %234)
store double %235, double* %35
%236 = load double, double* %49
%237 = load double, double* %49
%238 = fmul double %236, %237
%239 = load double, double* %39
%240 = fdiv double %238, %239
%241 = load double, double* %50
%242 = load double, double* %50
%243 = fmul double %241, %242
%244 = load double, double* %40
%245 = fdiv double %243, %244
%246 = fadd double %240, %245
%247 = fsub double %246, 1.000000e+00
store double %247, double* %36
%248 = load double, double* %14
%249 = call double @pow(double %248, double 4.000000e+00)
%250 = load double, double* %31
%251 = fmul double %249, %250
%252 = load double, double* %31
%253 = load double, double* %15
%254 = load double, double* %15
%255 = fmul double %253, %254
%256 = load double, double* %14
%257 = load double, double* %14
%258 = fmul double %256, %257
%259 = load double, double* %32
%260 = load double, double* %32
%261 = load double, double* %31
%262 = fmul double 2.000000e+00, %261
%263 = load double, double* %33
%264 = fmul double %262, %263
%265 = fneg double %264
%266 = call double @llvm.fmuladd.f64(double %259, double %260, double %265)
%267 = load double, double* %15
%268 = load double, double* %15
%269 = fmul double %267, %268
%270 = load double, double* %33
%271 = fmul double %269, %270
%272 = load double, double* %33
%273 = fmul double %271, %272
%274 = call double @llvm.fmuladd.f64(double %258, double %266, double %273)
%275 = fmul double %255, %274
%276 = call double @llvm.fmuladd.f64(double %251, double %252, double %275)
%277 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 4
store double %276, double* %277
%278 = load double, double* %15
%279 = fmul double 2.000000e+00, %278
%280 = load double, double* %15
%281 = load double, double* %15
%282 = fmul double %280, %281
%283 = load double, double* %33
%284 = fmul double %282, %283
%285 = load double, double* %35
%286 = load double, double* %14
%287 = load double, double* %14
%288 = fmul double %286, %287
%289 = load double, double* %32
%290 = load double, double* %34
%291 = load double, double* %31
%292 = load double, double* %35
%293 = fmul double %291, %292
%294 = fneg double %293
%295 = call double @llvm.fmuladd.f64(double %289, double %290, double %294)
%296 = fmul double %288, %295
%297 = call double @llvm.fmuladd.f64(double %284, double %285, double %296)
%298 = fmul double %279, %297
%299 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 3
store double %298, double* %299
%300 = load double, double* %14
%301 = load double, double* %14
%302 = fmul double %300, %301
%303 = load double, double* %15
%304 = load double, double* %15
%305 = fmul double %303, %304
%306 = load double, double* %31
%307 = fmul double 2.000000e+00, %306
%308 = load double, double* %33
%309 = load double, double* %32
%310 = load double, double* %32
%311 = fmul double %309, %310
%312 = fneg double %311
%313 = call double @llvm.fmuladd.f64(double %307, double %308, double %312)
%314 = load double, double* %34
%315 = load double, double* %34
%316 = fmul double %314, %315
%317 = call double @llvm.fmuladd.f64(double %305, double %313, double %316)
%318 = load double, double* %31
%319 = fmul double 2.000000e+00, %318
%320 = load double, double* %36
%321 = fneg double %319
%322 = call double @llvm.fmuladd.f64(double %321, double %320, double %317)
%323 = load double, double* %14
%324 = fmul double 2.000000e+00, %323
%325 = load double, double* %14
%326 = fmul double %324, %325
%327 = load double, double* %31
%328 = fmul double %326, %327
%329 = load double, double* %31
%330 = fneg double %328
%331 = call double @llvm.fmuladd.f64(double %330, double %329, double %322)
%332 = load double, double* %15
%333 = load double, double* %15
%334 = fmul double %332, %333
%335 = load double, double* %33
%336 = fmul double 2.000000e+00, %335
%337 = load double, double* %36
%338 = load double, double* %35
%339 = load double, double* %35
%340 = fmul double %338, %339
%341 = call double @llvm.fmuladd.f64(double %336, double %337, double %340)
%342 = fmul double %334, %341
%343 = call double @llvm.fmuladd.f64(double %302, double %331, double %342)
%344 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 2
store double %343, double* %344
%345 = load double, double* %15
%346 = fmul double 2.000000e+00, %345
%347 = load double, double* %14
%348 = load double, double* %14
%349 = fmul double %347, %348
%350 = load double, double* %31
%351 = load double, double* %35
%352 = load double, double* %32
%353 = load double, double* %34
%354 = fmul double %352, %353
%355 = fneg double %354
%356 = call double @llvm.fmuladd.f64(double %350, double %351, double %355)
%357 = load double, double* %35
%358 = load double, double* %36
%359 = fmul double %357, %358
%360 = call double @llvm.fmuladd.f64(double %349, double %356, double %359)
%361 = fmul double %346, %360
%362 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 1
store double %361, double* %362
%363 = load double, double* %14
%364 = load double, double* %14
%365 = load double, double* %31
%366 = load double, double* %34
%367 = fneg double %366
%368 = call double @llvm.fmuladd.f64(double %364, double %365, double %367)
%369 = load double, double* %36
%370 = call double @llvm.fmuladd.f64(double %363, double %368, double %369)
%371 = load double, double* %14
%372 = load double, double* %14
%373 = load double, double* %31
%374 = load double, double* %34
%375 = call double @llvm.fmuladd.f64(double %372, double %373, double %374)
%376 = load double, double* %36
%377 = call double @llvm.fmuladd.f64(double %371, double %375, double %376)
%378 = fmul double %370, %377
%379 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 0
store double %378, double* %379
%380 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 4
%381 = load double, double* %380
%382 = call double @llvm.fabs.f64(double %381)
%383 = fcmp ogt double %382, 0.000000e+00
br i1 %383, label %384, label %408
384: ; preds = %147
store i32 0, i32* %24
br label %385
385: ; preds = %400, %384
%386 = load i32, i32* %24
%387 = icmp sle i32 %386, 3
br i1 %387, label %388, label %403
388: ; preds = %385
%389 = load i32, i32* %24
%390 = sext i32 %389 to i64
%391 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 %390
%392 = load double, double* %391
%393 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 4
%394 = load double, double* %393
%395 = fdiv double %392, %394
%396 = load i32, i32* %24
%397 = sub nsw i32 4, %396
%398 = sext i32 %397 to i64
%399 = getelementptr inbounds [5 x double], [5 x double]* %52, i64 0, i64 %398
store double %395, double* %399
br label %400
400: ; preds = %388
%401 = load i32, i32* %24
%402 = add nsw i32 %401, 1
store i32 %402, i32* %24
br label %385
403: ; preds = %385
%404 = getelementptr inbounds [5 x double], [5 x double]* %52, i64 0, i64 0
store double 1.000000e+00, double* %404
%405 = getelementptr inbounds [5 x double], [5 x double]* %52, i64 0, i64 0
%406 = getelementptr inbounds [3 x [5 x double]], [3 x [5 x double]]* %53, i64 0, i64 0
%407 = call i32 (double*, [5 x double]*, ...) bitcast (i32 (...)* @BIQUADROOTS to i32 (double*, [5 x double]*, ...)*)(double* %405, [5 x double]* %406)
store i32 4, i32* %27
br label %486
408: ; preds = %147
%409 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 3
%410 = load double, double* %409
%411 = call double @llvm.fabs.f64(double %410)
%412 = fcmp ogt double %411, 0.000000e+00
br i1 %412, label %413, label %437
413: ; preds = %408
store i32 0, i32* %24
br label %414
414: ; preds = %429, %413
%415 = load i32, i32* %24
%416 = icmp sle i32 %415, 2
br i1 %416, label %417, label %432
417: ; preds = %414
%418 = load i32, i32* %24
%419 = sext i32 %418 to i64
%420 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 %419
%421 = load double, double* %420
%422 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 3
%423 = load double, double* %422
%424 = fdiv double %421, %423
%425 = load i32, i32* %24
%426 = sub nsw i32 3, %425
%427 = sext i32 %426 to i64
%428 = getelementptr inbounds [5 x double], [5 x double]* %52, i64 0, i64 %427
store double %424, double* %428
br label %429
429: ; preds = %417
%430 = load i32, i32* %24
%431 = add nsw i32 %430, 1
store i32 %431, i32* %24
br label %414
432: ; preds = %414
%433 = getelementptr inbounds [5 x double], [5 x double]* %52, i64 0, i64 0
store double 1.000000e+00, double* %433
%434 = getelementptr inbounds [5 x double], [5 x double]* %52, i64 0, i64 0
%435 = getelementptr inbounds [3 x [5 x double]], [3 x [5 x double]]* %53, i64 0, i64 0
%436 = call i32 (double*, [5 x double]*, ...) bitcast (i32 (...)* @CUBICROOTS to i32 (double*, [5 x double]*, ...)*)(double* %434, [5 x double]* %435)
store i32 3, i32* %27
br label %485
437: ; preds = %408
%438 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 2
%439 = load double, double* %438
%440 = call double @llvm.fabs.f64(double %439)
%441 = fcmp ogt double %440, 0.000000e+00
br i1 %441, label %442, label %466
442: ; preds = %437
store i32 0, i32* %24
br label %443
443: ; preds = %458, %442
%444 = load i32, i32* %24
%445 = icmp sle i32 %444, 1
br i1 %445, label %446, label %461
446: ; preds = %443
%447 = load i32, i32* %24
%448 = sext i32 %447 to i64
%449 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 %448
%450 = load double, double* %449
%451 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 2
%452 = load double, double* %451
%453 = fdiv double %450, %452
%454 = load i32, i32* %24
%455 = sub nsw i32 2, %454
%456 = sext i32 %455 to i64
%457 = getelementptr inbounds [5 x double], [5 x double]* %52, i64 0, i64 %456
store double %453, double* %457
br label %458
458: ; preds = %446
%459 = load i32, i32* %24
%460 = add nsw i32 %459, 1
store i32 %460, i32* %24
br label %443
461: ; preds = %443
%462 = getelementptr inbounds [5 x double], [5 x double]* %52, i64 0, i64 0
store double 1.000000e+00, double* %462
%463 = getelementptr inbounds [5 x double], [5 x double]* %52, i64 0, i64 0
%464 = getelementptr inbounds [3 x [5 x double]], [3 x [5 x double]]* %53, i64 0, i64 0
%465 = call i32 (double*, [5 x double]*, ...) bitcast (i32 (...)* @QUADROOTS to i32 (double*, [5 x double]*, ...)*)(double* %463, [5 x double]* %464)
store i32 2, i32* %27
br label %484
466: ; preds = %437
%467 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 1
%468 = load double, double* %467
%469 = call double @llvm.fabs.f64(double %468)
%470 = fcmp ogt double %469, 0.000000e+00
br i1 %470, label %471, label %482
471: ; preds = %466
%472 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 0
%473 = load double, double* %472
%474 = fneg double %473
%475 = getelementptr inbounds [5 x double], [5 x double]* %51, i64 0, i64 1
%476 = load double, double* %475
%477 = fdiv double %474, %476
%478 = getelementptr inbounds [3 x [5 x double]], [3 x [5 x double]]* %53, i64 0, i64 1
%479 = getelementptr inbounds [5 x double], [5 x double]* %478, i64 0, i64 1
store double %477, double* %479
%480 = getelementptr inbounds [3 x [5 x double]], [3 x [5 x double]]* %53, i64 0, i64 2
%481 = getelementptr inbounds [5 x double], [5 x double]* %480, i64 0, i64 1
store double 0.000000e+00, double* %481
store i32 1, i32* %27
br label %483
482: ; preds = %466
store i32 0, i32* %27
br label %483
483: ; preds = %482, %471
br label %484
484: ; preds = %483, %461
br label %485
485: ; preds = %484, %432
br label %486
486: ; preds = %485, %403
store i32 0, i32* %28
store i32 1, i32* %24
br label %487
487: ; preds = %513, %486
%488 = load i32, i32* %24
%489 = load i32, i32* %27
%490 = icmp sle i32 %488, %489
br i1 %490, label %491, label %516
491: ; preds = %487
%492 = getelementptr inbounds [3 x [5 x double]], [3 x [5 x double]]* %53, i64 0, i64 2
%493 = load i32, i32* %24
%494 = sext i32 %493 to i64
%495 = getelementptr inbounds [5 x double], [5 x double]* %492, i64 0, i64 %494
%496 = load double, double* %495
%497 = call double @llvm.fabs.f64(double %496)
%498 = fcmp olt double %497, 0x3EB0C6F7A0B5ED8D
br i1 %498, label %499, label %512
499: ; preds = %491
%500 = load i32, i32* %28
%501 = add nsw i32 %500, 1
store i32 %501, i32* %28
%502 = getelementptr inbounds [3 x [5 x double]], [3 x [5 x double]]* %53, i64 0, i64 1
%503 = load i32, i32* %24
%504 = sext i32 %503 to i64
%505 = getelementptr inbounds [5 x double], [5 x double]* %502, i64 0, i64 %504
%506 = load double, double* %505
%507 = load double, double* %15
%508 = fmul double %506, %507
%509 = load i32, i32* %28
%510 = sext i32 %509 to i64
%511 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %510
store double %508, double* %511
br label %512
512: ; preds = %499, %491
br label %513
513: ; preds = %512
%514 = load i32, i32* %24
%515 = add nsw i32 %514, 1
store i32 %515, i32* %24
br label %487
516: ; preds = %487
store i32 2, i32* %25
br label %517
517: ; preds = %557, %516
%518 = load i32, i32* %25
%519 = load i32, i32* %28
%520 = icmp sle i32 %518, %519
br i1 %520, label %521, label %560
521: ; preds = %517
%522 = load i32, i32* %25
%523 = sext i32 %522 to i64
%524 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %523
%525 = load double, double* %524
store double %525, double* %47
%526 = load i32, i32* %25
%527 = sub nsw i32 %526, 1
store i32 %527, i32* %26
br label %528
528: ; preds = %548, %521
%529 = load i32, i32* %26
%530 = icmp sge i32 %529, 1
br i1 %530, label %531, label %551
531: ; preds = %528
%532 = load i32, i32* %26
%533 = sext i32 %532 to i64
%534 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %533
%535 = load double, double* %534
%536 = load double, double* %47
%537 = fcmp ole double %535, %536
br i1 %537, label %538, label %539
538: ; preds = %531
br label %551
539: ; preds = %531
%540 = load i32, i32* %26
%541 = sext i32 %540 to i64
%542 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %541
%543 = load double, double* %542
%544 = load i32, i32* %26
%545 = add nsw i32 %544, 1
%546 = sext i32 %545 to i64
%547 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %546
store double %543, double* %547
br label %548
548: ; preds = %539
%549 = load i32, i32* %26
%550 = add nsw i32 %549, -1
store i32 %550, i32* %26
br label %528
551: ; preds = %538, %528
%552 = load double, double* %47
%553 = load i32, i32* %26
%554 = add nsw i32 %553, 1
%555 = sext i32 %554 to i64
%556 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %555
store double %552, double* %556
br label %557
557: ; preds = %551
%558 = load i32, i32* %25
%559 = add nsw i32 %558, 1
store i32 %559, i32* %25
br label %517
560: ; preds = %517
store i32 0, i32* %29
store i32 1, i32* %24
br label %561
561: ; preds = %688, %560
%562 = load i32, i32* %24
%563 = load i32, i32* %28
%564 = icmp sle i32 %562, %563
br i1 %564, label %565, label %691
565: ; preds = %561
%566 = load i32, i32* %24
%567 = icmp sgt i32 %566, 1
br i1 %567, label %568, label %582
568: ; preds = %565
%569 = load i32, i32* %24
%570 = sext i32 %569 to i64
%571 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %570
%572 = load double, double* %571
%573 = load i32, i32* %24
%574 = sub nsw i32 %573, 1
%575 = sext i32 %574 to i64
%576 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %575
%577 = load double, double* %576
%578 = fsub double %572, %577
%579 = call double @llvm.fabs.f64(double %578)
%580 = fcmp olt double %579, 5.000000e-07
br i1 %580, label %581, label %582
581: ; preds = %568
br label %688
582: ; preds = %568, %565
%583 = load i32, i32* %24
%584 = sext i32 %583 to i64
%585 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %584
%586 = load double, double* %585
%587 = call double @llvm.fabs.f64(double %586)
%588 = load double, double* %15
%589 = fcmp ogt double %587, %588
br i1 %589, label %590, label %591
590: ; preds = %582
store double 0.000000e+00, double* %54
br label %609
591: ; preds = %582
%592 = load double, double* %14
%593 = load i32, i32* %24
%594 = sext i32 %593 to i64
%595 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %594
%596 = load double, double* %595
%597 = load i32, i32* %24
%598 = sext i32 %597 to i64
%599 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %598
%600 = load double, double* %599
%601 = fmul double %596, %600
%602 = load double, double* %15
%603 = load double, double* %15
%604 = fmul double %602, %603
%605 = fdiv double %601, %604
%606 = fsub double 1.000000e+00, %605
%607 = call double @sqrt(double %606)
%608 = fmul double %592, %607
store double %608, double* %54
br label %609
609: ; preds = %591, %590
%610 = load double, double* %54
%611 = fneg double %610
store double %611, double* %55
%612 = load double, double* %54
%613 = load i32, i32* %24
%614 = sext i32 %613 to i64
%615 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %614
%616 = load double, double* %615
%617 = load double, double* %31
%618 = load double, double* %32
%619 = load double, double* %33
%620 = load double, double* %34
%621 = load double, double* %35
%622 = load double, double* %36
%623 = call i32 (double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @ellipse2tr to i32 (double, double, double, double, double, double, double, double, ...)*)(double %612, double %616, double %617, double %618, double %619, double %620, double %621, double %622)
%624 = sitofp i32 %623 to double
%625 = call double @llvm.fabs.f64(double %624)
%626 = fcmp olt double %625, 5.000000e-07
br i1 %626, label %627, label %646
627: ; preds = %609
%628 = load i32, i32* %29
%629 = add nsw i32 %628, 1
store i32 %629, i32* %29
%630 = load i32, i32* %29
%631 = icmp sgt i32 %630, 4
br i1 %631, label %632, label %634
632: ; preds = %627
%633 = load i32*, i32** %23
store i32 -109, i32* %633
store double -1.000000e+00, double* %12
br label %820
634: ; preds = %627
%635 = load double, double* %54
%636 = load i32, i32* %29
%637 = sext i32 %636 to i64
%638 = getelementptr inbounds [5 x double], [5 x double]* %59, i64 0, i64 %637
store double %635, double* %638
%639 = load i32, i32* %24
%640 = sext i32 %639 to i64
%641 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %640
%642 = load double, double* %641
%643 = load i32, i32* %29
%644 = sext i32 %643 to i64
%645 = getelementptr inbounds [5 x double], [5 x double]* %60, i64 0, i64 %644
store double %642, double* %645
br label %646
646: ; preds = %634, %609
%647 = load double, double* %55
%648 = load i32, i32* %24
%649 = sext i32 %648 to i64
%650 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %649
%651 = load double, double* %650
%652 = load double, double* %31
%653 = load double, double* %32
%654 = load double, double* %33
%655 = load double, double* %34
%656 = load double, double* %35
%657 = load double, double* %36
%658 = call i32 (double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @ellipse2tr to i32 (double, double, double, double, double, double, double, double, ...)*)(double %647, double %651, double %652, double %653, double %654, double %655, double %656, double %657)
%659 = sitofp i32 %658 to double
%660 = call double @llvm.fabs.f64(double %659)
%661 = fcmp olt double %660, 5.000000e-07
br i1 %661, label %662, label %687
662: ; preds = %646
%663 = load double, double* %55
%664 = load double, double* %54
%665 = fsub double %663, %664
%666 = call double @llvm.fabs.f64(double %665)
%667 = fcmp ogt double %666, 5.000000e-07
br i1 %667, label %668, label %687
668: ; preds = %662
%669 = load i32, i32* %29
%670 = add nsw i32 %669, 1
store i32 %670, i32* %29
%671 = load i32, i32* %29
%672 = icmp sgt i32 %671, 4
br i1 %672, label %673, label %675
673: ; preds = %668
%674 = load i32*, i32** %23
store i32 -109, i32* %674
store double -1.000000e+00, double* %12
br label %820
675: ; preds = %668
%676 = load double, double* %55
%677 = load i32, i32* %29
%678 = sext i32 %677 to i64
%679 = getelementptr inbounds [5 x double], [5 x double]* %59, i64 0, i64 %678
store double %676, double* %679
%680 = load i32, i32* %24
%681 = sext i32 %680 to i64
%682 = getelementptr inbounds [5 x double], [5 x double]* %58, i64 0, i64 %681
%683 = load double, double* %682
%684 = load i32, i32* %29
%685 = sext i32 %684 to i64
%686 = getelementptr inbounds [5 x double], [5 x double]* %60, i64 0, i64 %685
store double %683, double* %686
br label %687
687: ; preds = %675, %662, %646
br label %688
688: ; preds = %687, %581
%689 = load i32, i32* %24
%690 = add nsw i32 %689, 1
store i32 %690, i32* %24
br label %561
691: ; preds = %561
%692 = load i32, i32* %29
switch i32 %692, label %818 [
i32 0, label %693
i32 1, label %693
i32 2, label %716
i32 3, label %776
i32 4, label %797
]
693: ; preds = %691, %691
%694 = load double, double* %14
%695 = load double, double* %15
%696 = load double, double* %19
%697 = load double, double* %20
%698 = load double, double* %16
%699 = load double, double* %17
%700 = load double, double* %21
%701 = load double, double* %22
%702 = load double, double* %13
%703 = load double, double* %18
%704 = load double, double* %37
%705 = load double, double* %38
%706 = load double, double* %31
%707 = load double, double* %32
%708 = load double, double* %33
%709 = load double, double* %34
%710 = load double, double* %35
%711 = load double, double* %36
%712 = load i32*, i32** %23
%713 = call i32 (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32*, ...) bitcast (i32 (...)* @nointpts to i32 (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32*, ...)*)(double %694, double %695, double %696, double %697, double %698, double %699, double %700, double %701, double %702, double %703, double %704, double %705, double %706, double %707, double %708, double %709, double %710, double %711, i32* %712)
%714 = sitofp i32 %713 to double
store double %714, double* %63
%715 = load double, double* %63
store double %715, double* %12
br label %820
716: ; preds = %691
%717 = getelementptr inbounds [5 x double], [5 x double]* %59, i64 0, i64 1
%718 = load double, double* %717
%719 = getelementptr inbounds [5 x double], [5 x double]* %60, i64 0, i64 1
%720 = load double, double* %719
%721 = load double, double* %14
%722 = load double, double* %15
%723 = load double, double* %31
%724 = load double, double* %32
%725 = load double, double* %33
%726 = load double, double* %34
%727 = load double, double* %35
%728 = load double, double* %36
%729 = call i32 (double, double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @istanpt to i32 (double, double, double, double, double, double, double, double, double, double, ...)*)(double %718, double %720, double %721, double %722, double %723, double %724, double %725, double %726, double %727, double %728)
store i32 %729, i32* %30
%730 = load i32, i32* %30
%731 = icmp eq i32 %730, 114
br i1 %731, label %732, label %754
732: ; preds = %716
%733 = load double, double* %14
%734 = load double, double* %15
%735 = load double, double* %19
%736 = load double, double* %20
%737 = load double, double* %16
%738 = load double, double* %17
%739 = load double, double* %21
%740 = load double, double* %22
%741 = load double, double* %13
%742 = load double, double* %18
%743 = load double, double* %37
%744 = load double, double* %38
%745 = load double, double* %31
%746 = load double, double* %32
%747 = load double, double* %33
%748 = load double, double* %34
%749 = load double, double* %35
%750 = load double, double* %36
%751 = load i32*, i32** %23
%752 = call i32 (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32*, ...) bitcast (i32 (...)* @nointpts to i32 (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32*, ...)*)(double %733, double %734, double %735, double %736, double %737, double %738, double %739, double %740, double %741, double %742, double %743, double %744, double %745, double %746, double %747, double %748, double %749, double %750, i32* %751)
%753 = sitofp i32 %752 to double
store double %753, double* %63
br label %774
754: ; preds = %716
%755 = getelementptr inbounds [5 x double], [5 x double]* %59, i64 0, i64 0
%756 = getelementptr inbounds [5 x double], [5 x double]* %60, i64 0, i64 0
%757 = load double, double* %14
%758 = load double, double* %15
%759 = load double, double* %13
%760 = load double, double* %19
%761 = load double, double* %20
%762 = load double, double* %37
%763 = load double, double* %38
%764 = load double, double* %18
%765 = load double, double* %31
%766 = load double, double* %32
%767 = load double, double* %33
%768 = load double, double* %34
%769 = load double, double* %35
%770 = load double, double* %36
%771 = load i32*, i32** %23
%772 = call i32 (double*, double*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32*, ...) bitcast (i32 (...)* @twointpts to i32 (double*, double*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32*, ...)*)(double* %755, double* %756, double %757, double %758, double %759, double %760, double %761, double %762, double %763, double %764, double %765, double %766, double %767, double %768, double %769, double %770, i32* %771)
%773 = sitofp i32 %772 to double
store double %773, double* %63
br label %774
774: ; preds = %754, %732
%775 = load double, double* %63
store double %775, double* %12
br label %820
776: ; preds = %691
%777 = getelementptr inbounds [5 x double], [5 x double]* %59, i64 0, i64 0
%778 = getelementptr inbounds [5 x double], [5 x double]* %60, i64 0, i64 0
%779 = load double, double* %14
%780 = load double, double* %15
%781 = load double, double* %13
%782 = load double, double* %19
%783 = load double, double* %20
%784 = load double, double* %37
%785 = load double, double* %38
%786 = load double, double* %18
%787 = load double, double* %31
%788 = load double, double* %32
%789 = load double, double* %33
%790 = load double, double* %34
%791 = load double, double* %35
%792 = load double, double* %36
%793 = load i32*, i32** %23
%794 = call i32 (double*, double*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32*, ...) bitcast (i32 (...)* @threeintpts to i32 (double*, double*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32*, ...)*)(double* %777, double* %778, double %779, double %780, double %781, double %782, double %783, double %784, double %785, double %786, double %787, double %788, double %789, double %790, double %791, double %792, i32* %793)
%795 = sitofp i32 %794 to double
store double %795, double* %63
%796 = load double, double* %63
store double %796, double* %12
br label %820
797: ; preds = %691
%798 = getelementptr inbounds [5 x double], [5 x double]* %59, i64 0, i64 0
%799 = getelementptr inbounds [5 x double], [5 x double]* %60, i64 0, i64 0
%800 = load double, double* %14
%801 = load double, double* %15
%802 = load double, double* %13
%803 = load double, double* %19
%804 = load double, double* %20
%805 = load double, double* %37
%806 = load double, double* %38
%807 = load double, double* %18
%808 = load double, double* %31
%809 = load double, double* %32
%810 = load double, double* %33
%811 = load double, double* %34
%812 = load double, double* %35
%813 = load double, double* %36
%814 = load i32*, i32** %23
%815 = call i32 (double*, double*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32*, ...) bitcast (i32 (...)* @fourintpts to i32 (double*, double*, double, double, double, double, double, double, double, double, double, double, double, double, double, double, i32*, ...)*)(double* %798, double* %799, double %800, double %801, double %802, double %803, double %804, double %805, double %806, double %807, double %808, double %809, double %810, double %811, double %812, double %813, i32* %814)
%816 = sitofp i32 %815 to double
store double %816, double* %63
%817 = load double, double* %63
store double %817, double* %12
br label %820
818: ; preds = %691
%819 = load i32*, i32** %23
store i32 -109, i32* %819
store double -1.000000e+00, double* %12
br label %820
820: ; preds = %818, %797, %776, %774, %693, %673, %632, %79
%821 = load double, double* %12
ret double %821
}

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