int nkep_drift3_pert(double mu, double B2, double *r0, double *v0, double dt) {
  double r0mag2, r0mag, v0mag2, r0dot, rdot;
  double r0v0;
  double rcalc, dtcalc, terr;
  double u;
  double beta;
  double P;
  double dU;
  int n;
  double q;
  double U0w2, U1w2;
  double U, U0, U1, U2, U3;
  double f, g;
  double r1[3], v1[3];
  int d;
  int no_iter;
  double pthe[3], pthemag2, ppsimag2, theta2;
  double pthe_cro_r0[3], pthe_cro_r[3];
  double ypsi, xi;
  double du1, du2, du3, dqdu, d2qdu2, drdu, d2rdu2, fn, fnp, fnpp, fnppp;
  r0mag2 = r0[0] * r0[0] + r0[1] * r0[1] + r0[2] * r0[2];
  r0mag = sqrt(r0mag2);
  r0v0 = r0[0] * v0[0] + r0[1] * v0[1] + r0[2] * v0[2];
  r0dot = r0v0 / r0mag;
  pthe[0] = r0[1] * v0[2] - r0[2] * v0[1];
  pthe[1] = r0[2] * v0[0] - r0[0] * v0[2];
  pthe[2] = r0[0] * v0[1] - r0[1] * v0[0];
  pthemag2 = pthe[0] * pthe[0] + pthe[1] * pthe[1] + pthe[2] * pthe[2];
  ppsimag2 = pthemag2 - 2 * B2;
  v0mag2 = r0dot * r0dot + ppsimag2 / r0mag2;
  beta = 2 * mu / r0mag - v0mag2;
  if (beta > 0) {
    P = 2 * ((double)3.14159265358979323846264338327950288419716939937510) *
        mu / sqrt(beta * beta * beta);
    n = floor((dt + P / 2.0 - 2 * r0v0 / beta) / P);
    dU = 2 * n *
         ((double)3.14159265358979323846264338327950288419716939937510) /
         sqrt(beta * beta * beta * beta * beta);
  } else {
    dU = 0.0;
  }
  u = 0;
  no_iter = 0;
  do {
    q = beta * u * u / (1 + beta * u * u);
    if (q > 0.5 || no_iter > 12)
      return -1;
    dqdu = 2 * beta * u / (1 + beta * u * u) / (1 + beta * u * u);
    d2qdu2 = 2 * beta / (1 + beta * u * u) -
             8 * beta * beta * u * u / (1 + beta * u * u) / (1 + beta * u * u) /
                 (1 + beta * u * u);
    U0w2 = 1 - 2 * q;
    U1w2 = 2 * (1 - q) * u;
    U = 16.0 / 15 * U1w2 * U1w2 * U1w2 * U1w2 * U1w2 * G_func2(q) + dU;
    U0 = 2 * U0w2 * U0w2 - 1;
    U1 = 2 * U0w2 * U1w2;
    U2 = 2 * U1w2 * U1w2;
    U3 = beta * U + U1 * U2 / 3.0;
    rcalc = r0mag * U0 + r0v0 * U1 + mu * U2;
    drdu = 4 * (1 - q) * (r0v0 * U0 + (mu - beta * r0mag) * U1);
    d2rdu2 = -4 * dqdu * (r0v0 * U0 + (mu - beta * r0mag) * U1) +
             (4 * (1 - q) * 4 * (1 - q)) *
                 (-beta * r0v0 * U1 + (mu - beta * r0mag) * U0);
    dtcalc = r0mag * U1 + r0v0 * U2 + mu * U3;
    fn = dtcalc - dt;
    fnp = 4 * (1 - q) * rcalc;
    fnpp = 4 * (drdu * (1 - q) - rcalc * dqdu);
    fnppp = -8 * drdu * dqdu - 4 * rcalc * d2qdu2 + 4 * (1 - q) * d2rdu2;
    du1 = -fn / fnp;
    du2 = -fn / (fnp + du1 * fnpp / 2);
    du3 = -fn / (fnp + du2 * fnpp / 2 + du2 * du2 * fnppp / 6);
    u += du3;
    no_iter++;
    terr = fabs((dt - dtcalc) / dt);
  } while (terr > 1e-15);
  f = 1 - (mu / r0mag) * U2;
  g = r0mag * U1 + r0v0 * U2;
  xi = g / (r0mag2 * f + r0v0 * g);
  ypsi = xi * at1(ppsimag2 * xi * xi);
  rdot = (r0v0 * U0 + (mu - beta * r0mag) * U1) / rcalc;
  theta2 = pthemag2 * ypsi * ypsi;
  pthe_cro_r0[0] = pthe[1] * r0[2] - pthe[2] * r0[1];
  pthe_cro_r0[1] = pthe[2] * r0[0] - pthe[0] * r0[2];
  pthe_cro_r0[2] = pthe[0] * r0[1] - pthe[1] * r0[0];
  {
    double ttt1 = rcalc / r0mag;
    double ttt2 = c0(theta2);
    double ttt3 = ypsi * c1(theta2);
    r1[0] = ttt1 * (ttt2 * r0[0] + ttt3 * pthe_cro_r0[0]);
    r1[1] = ttt1 * (ttt2 * r0[1] + ttt3 * pthe_cro_r0[1]);
    r1[2] = ttt1 * (ttt2 * r0[2] + ttt3 * pthe_cro_r0[2]);
  }
  pthe_cro_r[0] = pthe[1] * r1[2] - pthe[2] * r1[1];
  pthe_cro_r[1] = pthe[2] * r1[0] - pthe[0] * r1[2];
  pthe_cro_r[2] = pthe[0] * r1[1] - pthe[1] * r1[0];
  v1[0] = rdot / rcalc * r1[0] + 1 / (rcalc * rcalc) * pthe_cro_r[0];
  v1[1] = rdot / rcalc * r1[1] + 1 / (rcalc * rcalc) * pthe_cro_r[1];
  v1[2] = rdot / rcalc * r1[2] + 1 / (rcalc * rcalc) * pthe_cro_r[2];
  for (d = 0; d < 3; d++) {
    r0[d] = r1[d];
    v0[d] = v1[d];
  }
  return 0;
}


x86 assembly (clang, -O0):
<nkep_drift3_pert>:
push   %rbp
mov    %rsp,%rbp
sub    $0x250,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
mov    %rdi,-0x20(%rbp)
mov    %rsi,-0x28(%rbp)
movsd  %xmm2,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
call   1070 <sqrt@plt>
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x28(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
divsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm2
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm1
mov    -0x28(%rbp),%rax
mulsd  0x8(%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x28(%rbp),%rax
mulsd  0x10(%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm2
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm1
mov    -0x28(%rbp),%rax
mulsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x150(%rbp),%xmm1
ff
movsd  -0x150(%rbp),%xmm2
ff
movsd  -0x148(%rbp),%xmm0
ff
mulsd  -0x148(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x140(%rbp),%xmm0
ff
movsd  -0x140(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
movsd  -0x18(%rbp),%xmm1
addsd  %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x160(%rbp),%xmm1
ff
divsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0x1c60(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
divsd  -0x40(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14cc <nkep_drift3_pert+0x36c>
movsd  0x1c3c(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x230(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
call   1070 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x230(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm1
ff
movsd  0x1bd6(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0x1bc6(%rip),%xmm1
mulsd  -0x60(%rbp),%xmm1
divsd  -0x88(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
divsd  -0x90(%rbp),%xmm0
ff
call   1080 <floor@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x9c(%rbp)
mov    -0x9c(%rbp),%eax
shl    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  0x1b91(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x228(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
call   1070 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x228(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    14d7 <nkep_drift3_pert+0x377>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
movl   $0x0,-0x138(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x80(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x1b07(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  0x1adf(%rip),%xmm1
ucomisd %xmm1,%xmm0
ja     1550 <nkep_drift3_pert+0x3f0>
cmpl   $0xc,-0x138(%rbp)
jle    155c <nkep_drift3_pert+0x3fc>
movl   $0xffffffff,-0x4(%rbp)
jmp    21c5 <nkep_drift3_pert+0x1065>
movsd  0x1a9c(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x80(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x1a91(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x80(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x1a6b(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  0x1a33(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x80(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x1a2d(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  0x1a5d(%rip),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x80(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm2
ff
mulsd  -0x80(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm2
movsd  0x19e5(%rip),%xmm3
addsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
movsd  -0x88(%rbp),%xmm2
ff
mulsd  -0x80(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm2
movsd  0x19bf(%rip),%xmm3
addsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
movsd  -0x88(%rbp),%xmm2
ff
mulsd  -0x80(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm2
movsd  0x1999(%rip),%xmm3
addsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x1d8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm1
ff
addsd  %xmm1,%xmm1
movsd  0x1971(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0x195d(%rip),%xmm1
subsd  -0xa8(%rbp),%xmm1
ff
movsd  0x192d(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0x196c(%rip),%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x238(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1040 <G_func2@plt>
movsd  -0x238(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0x18a9(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  0x18dd(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0x1879(%rip),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0x1859(%rip),%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xd8(%rbp),%xmm1
ff
movsd  0x1861(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x40(%rbp),%xmm1
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0x60(%rbp),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x10(%rbp),%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0x17e1(%rip),%xmm1
subsd  -0xa8(%rbp),%xmm1
ff
movsd  0x17e1(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  -0xc8(%rbp),%xmm3
ff
movsd  -0x10(%rbp),%xmm4
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0x40(%rbp),%xmm5
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm5,%xmm2
addsd  %xmm4,%xmm2
mulsd  -0xd0(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1e0(%rbp)
ff
movsd  0x178b(%rip),%xmm0
mulsd  -0x1d0(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm3
ff
movsd  -0x10(%rbp),%xmm4
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x40(%rbp),%xmm5
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm5,%xmm1
addsd  %xmm4,%xmm1
mulsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x170d(%rip),%xmm3
subsd  -0xa8(%rbp),%xmm3
ff
movsd  0x170d(%rip),%xmm1
mulsd  %xmm3,%xmm1
movsd  0x1701(%rip),%xmm3
mulsd  %xmm3,%xmm1
movsd  0x16e5(%rip),%xmm3
subsd  -0xa8(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm1
movsd  -0x88(%rbp),%xmm3
ff
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  -0x60(%rbp),%xmm3
movsd  -0xd0(%rbp),%xmm5
ff
movsd  -0x10(%rbp),%xmm6
movsd  -0x88(%rbp),%xmm4
ff
movsd  -0x40(%rbp),%xmm7
movq   %xmm4,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
mulsd  %xmm7,%xmm4
addsd  %xmm6,%xmm4
mulsd  -0xc8(%rbp),%xmm4
ff
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1e8(%rbp)
ff
movsd  -0x40(%rbp),%xmm1
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0x60(%rbp),%xmm0
mulsd  -0xd8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x10(%rbp),%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x1f0(%rbp)
ff
movsd  0x1602(%rip),%xmm1
subsd  -0xa8(%rbp),%xmm1
ff
movsd  0x1602(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x1f8(%rbp)
ff
movsd  -0x1e0(%rbp),%xmm1
ff
movsd  0x15d1(%rip),%xmm2
subsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x1d0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x15a5(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x200(%rbp)
ff
movsd  0x1599(%rip),%xmm1
mulsd  -0x1e0(%rbp),%xmm1
ff
movsd  -0x1d0(%rbp),%xmm2
ff
movsd  0x1579(%rip),%xmm0
mulsd  -0x68(%rbp),%xmm0
mulsd  -0x1d8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x1535(%rip),%xmm2
subsd  -0xa8(%rbp),%xmm2
ff
movsd  0x1535(%rip),%xmm0
mulsd  %xmm2,%xmm0
movsd  -0x1e8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x208(%rbp)
ff
movsd  -0x1f0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0x1f8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x1f0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x1f8(%rbp),%xmm1
ff
movsd  -0x1b8(%rbp),%xmm2
ff
mulsd  -0x200(%rbp),%xmm2
ff
movsd  0x147b(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0x1f0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x1f8(%rbp),%xmm1
ff
movsd  -0x1c0(%rbp),%xmm2
ff
mulsd  -0x200(%rbp),%xmm2
ff
movsd  0x1428(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm1
movsd  -0x1c0(%rbp),%xmm2
ff
mulsd  -0x1c0(%rbp),%xmm2
ff
mulsd  -0x208(%rbp),%xmm2
ff
movsd  0x1428(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0x1c8(%rbp),%xmm0
ff
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x138(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x138(%rbp)
movsd  -0x30(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movaps 0x1425(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  0x1407(%rip),%xmm1
ucomisd %xmm1,%xmm0
ja     14e9 <nkep_drift3_pert+0x389>
movsd  -0x10(%rbp),%xmm0
divsd  -0x40(%rbp),%xmm0
movsd  -0xd8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0x1380(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0x60(%rbp),%xmm1
mulsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
movsd  -0x38(%rbp),%xmm1
movsd  -0xe8(%rbp),%xmm3
ff
movsd  -0x60(%rbp),%xmm2
mulsd  -0xf0(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x1b0(%rbp),%xmm0
ff
movsd  %xmm0,-0x248(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
mulsd  -0x1b0(%rbp),%xmm0
ff
mulsd  -0x1b0(%rbp),%xmm0
ff
mov    $0x1,%al
call   1050 <at1@plt>
movsd  -0x248(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0x10(%rbp),%xmm3
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x40(%rbp),%xmm4
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
mulsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x158(%rbp),%xmm0
ff
mulsd  -0x1a8(%rbp),%xmm0
ff
mulsd  -0x1a8(%rbp),%xmm0
ff
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm2
movsd  -0x140(%rbp),%xmm1
ff
mov    -0x20(%rbp),%rax
mulsd  0x8(%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x150(%rbp),%xmm1
ff
mov    -0x20(%rbp),%rax
mulsd  0x10(%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm2
movsd  -0x148(%rbp),%xmm1
ff
mov    -0x20(%rbp),%rax
mulsd  (%rax),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
divsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x210(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
mov    $0x1,%al
call   1030 <c0@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x218(%rbp)
ff
movsd  -0x1a8(%rbp),%xmm0
ff
movsd  %xmm0,-0x240(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
mov    $0x1,%al
call   1060 <c1@plt>
movsd  -0x240(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x220(%rbp)
ff
movsd  -0x210(%rbp),%xmm0
ff
movsd  -0x218(%rbp),%xmm1
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm3
movsd  -0x220(%rbp),%xmm2
ff
mulsd  -0x180(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x210(%rbp),%xmm0
ff
movsd  -0x218(%rbp),%xmm1
ff
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm3
movsd  -0x220(%rbp),%xmm2
ff
mulsd  -0x178(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x210(%rbp),%xmm0
ff
movsd  -0x218(%rbp),%xmm1
ff
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm3
movsd  -0x220(%rbp),%xmm2
ff
mulsd  -0x170(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
movsd  -0x100(%rbp),%xmm2
ff
movsd  -0x140(%rbp),%xmm1
ff
mulsd  -0x108(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a0(%rbp)
movsd  -0x140(%rbp),%xmm0
movsd  -0x110(%rbp),%xmm2
ff
movsd  -0x150(%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,-0x198(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
movsd  -0x108(%rbp),%xmm2
ff
movsd  -0x148(%rbp),%xmm1
ff
mulsd  -0x110(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  -0x110(%rbp),%xmm2
ff
movsd  -0x68(%rbp),%xmm3
mulsd  -0x68(%rbp),%xmm3
movsd  0xf69(%rip),%xmm1
divsd  %xmm3,%xmm1
mulsd  -0x1a0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  -0x108(%rbp),%xmm2
ff
movsd  -0x68(%rbp),%xmm3
mulsd  -0x68(%rbp),%xmm3
movsd  0xf29(%rip),%xmm1
divsd  %xmm3,%xmm1
mulsd  -0x198(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  -0x100(%rbp),%xmm2
ff
movsd  -0x68(%rbp),%xmm3
mulsd  -0x68(%rbp),%xmm3
movsd  0xee9(%rip),%xmm1
divsd  %xmm3,%xmm1
mulsd  -0x190(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movl   $0x0,-0x134(%rbp)
cmpl   $0x3,-0x134(%rbp)
jge    21be <nkep_drift3_pert+0x105e>
movslq -0x134(%rbp),%rax
movsd  -0x110(%rbp,%rax,8),%xmm0
ff ff
mov    -0x20(%rbp),%rax
movslq -0x134(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movslq -0x134(%rbp),%rax
movsd  -0x130(%rbp,%rax,8),%xmm0
ff ff
mov    -0x28(%rbp),%rax
movslq -0x134(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x134(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x134(%rbp)
jmp    215d <nkep_drift3_pert+0xffd>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x250,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<nkep_drift3_pert>:
push   %rbp
push   %r14
push   %rbx
sub    $0x130,%rsp
movsd  %xmm2,0x88(%rsp)
mov    %rsi,%r14
mov    %rdi,%rbx
movapd %xmm1,%xmm10
movaps %xmm0,0x40(%rsp)
movsd  (%rdi),%xmm2
movsd  0x8(%rdi),%xmm1
mulsd  %xmm1,%xmm1
mulsd  %xmm2,%xmm2
addsd  %xmm1,%xmm2
movsd  0x10(%rdi),%xmm0
mulsd  %xmm0,%xmm0
addsd  %xmm2,%xmm0
xorpd  %xmm2,%xmm2
xorpd  %xmm1,%xmm1
movsd  %xmm1,0x18(%rsp)
ucomisd %xmm2,%xmm0
movsd  %xmm0,0x80(%rsp)
jb     11cf <nkep_drift3_pert+0x6f>
sqrtsd %xmm0,%xmm9
movapd %xmm0,%xmm11
jmp    11ef <nkep_drift3_pert+0x8f>
movsd  %xmm10,(%rsp)
call   1070 <sqrt@plt>
movsd  0x80(%rsp),%xmm11
movsd  (%rsp),%xmm10
movapd %xmm0,%xmm9
movsd  (%rbx),%xmm5
movsd  0x8(%rbx),%xmm2
movsd  (%r14),%xmm0
movsd  0x8(%r14),%xmm8
movapd %xmm5,%xmm3
mulsd  %xmm0,%xmm3
movsd  0x10(%rbx),%xmm6
movapd %xmm6,%xmm7
movapd %xmm8,%xmm4
mulsd  %xmm6,%xmm4
movapd %xmm2,%xmm1
mulsd  %xmm0,%xmm6
mulsd  %xmm2,%xmm0
mulsd  %xmm8,%xmm2
addsd  %xmm2,%xmm3
movsd  0x10(%r14),%xmm2
mulsd  %xmm2,%xmm7
addsd  %xmm3,%xmm7
movapd %xmm7,0x90(%rsp)
movapd %xmm7,%xmm3
divsd  %xmm9,%xmm3
mulsd  %xmm2,%xmm1
subsd  %xmm4,%xmm1
mulsd  %xmm5,%xmm2
subsd  %xmm2,%xmm6
mulsd  %xmm8,%xmm5
subsd  %xmm0,%xmm5
movsd  %xmm6,0x70(%rsp)
movapd %xmm6,%xmm0
mulsd  %xmm6,%xmm0
movsd  %xmm1,0x68(%rsp)
mulsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm5,0x78(%rsp)
mulsd  %xmm5,%xmm5
addsd  %xmm1,%xmm5
addsd  %xmm10,%xmm10
movsd  %xmm5,0x38(%rsp)
movapd %xmm5,%xmm0
subsd  %xmm10,%xmm0
movsd  %xmm0,0xf0(%rsp)
divsd  %xmm11,%xmm0
mulsd  %xmm3,%xmm3
addsd  %xmm0,%xmm3
movapd 0x40(%rsp),%xmm4
addsd  %xmm4,%xmm4
divsd  %xmm9,%xmm4
subsd  %xmm3,%xmm4
ucomisd 0xdb6(%rip),%xmm4
movapd %xmm4,0x20(%rsp)
movsd  %xmm9,0x10(%rsp)
jbe    13c6 <nkep_drift3_pert+0x266>
movapd %xmm4,%xmm0
mulsd  %xmm4,%xmm0
mulsd  %xmm4,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movapd %xmm0,(%rsp)
jb     130e <nkep_drift3_pert+0x1ae>
sqrtsd %xmm0,%xmm0
jmp    1319 <nkep_drift3_pert+0x1b9>
call   1070 <sqrt@plt>
movapd 0x20(%rsp),%xmm4
movapd 0x90(%rsp),%xmm1
unpcklpd 0x40(%rsp),%xmm1
mulpd  0xcd0(%rip),%xmm1
movapd %xmm4,%xmm2
unpcklpd %xmm0,%xmm2
divpd  %xmm2,%xmm1
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
movsd  0xce4(%rip),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x88(%rsp),%xmm0
subsd  %xmm1,%xmm0
divsd  %xmm2,%xmm0
call   1080 <floor@plt>
movapd 0x20(%rsp),%xmm4
cvttsd2si %xmm0,%eax
add    %eax,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xcb7(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
movapd (%rsp),%xmm0
mulsd  %xmm4,%xmm0
mulsd  %xmm4,%xmm0
ucomisd 0xcf4(%rip),%xmm0
jb     13a4 <nkep_drift3_pert+0x244>
sqrtsd %xmm0,%xmm0
jmp    13af <nkep_drift3_pert+0x24f>
call   1070 <sqrt@plt>
movapd 0x20(%rsp),%xmm4
movsd  0x10(%rsp),%xmm9
movsd  0x18(%rsp),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsp)
movapd %xmm4,%xmm0
addsd  %xmm4,%xmm0
movapd %xmm0,0x120(%rsp)
movsd  0xc61(%rip),%xmm0
mulsd  %xmm4,%xmm0
mulsd  %xmm4,%xmm0
movsd  %xmm0,0xf8(%rsp)
movapd 0xc18(%rip),%xmm1
xorpd  %xmm4,%xmm1
movapd %xmm4,%xmm0
mulsd  %xmm9,%xmm0
movapd 0x40(%rsp),%xmm2
subsd  %xmm0,%xmm2
movapd %xmm2,0x100(%rsp)
mulsd  0x90(%rsp),%xmm1
movapd %xmm1,0x110(%rsp)
xorpd  %xmm2,%xmm2
xor    %ebp,%ebp
movsd  0xc10(%rip),%xmm3
movsd  0xbef(%rip),%xmm12
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movapd %xmm4,%xmm0
mulsd  %xmm2,%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm0,%xmm1
addsd  %xmm3,%xmm1
divsd  %xmm1,%xmm0
ucomisd %xmm12,%xmm0
mov    $0xffffffff,%eax
ja     1a1b <nkep_drift3_pert+0x8bb>
cmp    $0xc,%ebp
ja     1a1b <nkep_drift3_pert+0x8bb>
movapd 0x120(%rsp),%xmm4
movapd %xmm4,%xmm5
mulsd  %xmm2,%xmm5
divsd  %xmm1,%xmm5
divsd  %xmm1,%xmm5
movapd %xmm5,0xd0(%rsp)
movsd  %xmm2,(%rsp)
movsd  0xf8(%rsp),%xmm2
mulsd  (%rsp),%xmm2
mulsd  (%rsp),%xmm2
divsd  %xmm1,%xmm2
divsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm4
unpcklpd %xmm1,%xmm1
divpd  %xmm1,%xmm4
movapd %xmm4,%xmm1
unpckhpd %xmm4,%xmm1
subsd  %xmm1,%xmm4
movapd %xmm4,0xe0(%rsp)
movapd %xmm0,%xmm1
addsd  %xmm0,%xmm1
movapd %xmm3,%xmm2
subsd  %xmm1,%xmm2
movapd %xmm2,0xa0(%rsp)
subsd  %xmm0,%xmm3
movsd  %xmm3,0xc0(%rsp)
addsd  %xmm3,%xmm3
mulsd  (%rsp),%xmm3
movapd %xmm3,0x50(%rsp)
movapd %xmm3,%xmm1
mulsd  0xb2b(%rip),%xmm1
mulsd  %xmm3,%xmm1
mulsd  %xmm3,%xmm1
mulsd  %xmm3,%xmm1
mulsd  %xmm3,%xmm1
movapd %xmm1,0xb0(%rsp)
mov    $0x1,%al
call   1040 <G_func2@plt>
movsd  0xae2(%rip),%xmm12
movsd  0x10(%rsp),%xmm8
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  0xb0(%rsp),%xmm1
addsd  0x18(%rsp),%xmm1
movapd 0xa0(%rsp),%xmm2
movapd %xmm2,%xmm0
movapd 0x50(%rsp),%xmm14
unpcklpd %xmm14,%xmm0
addpd  %xmm0,%xmm0
mulsd  %xmm0,%xmm2
addsd  0xac4(%rip),%xmm2
movapd %xmm2,%xmm6
unpcklpd %xmm14,%xmm14
mulpd  %xmm0,%xmm14
movapd %xmm14,%xmm10
unpckhpd %xmm14,%xmm10
movapd %xmm14,%xmm2
mulsd  %xmm10,%xmm2
divsd  0xaa2(%rip),%xmm2
mulsd  0x20(%rsp),%xmm1
addsd  %xmm2,%xmm1
movapd 0x90(%rsp),%xmm15
movapd %xmm15,%xmm2
mulsd  %xmm14,%xmm2
movapd %xmm8,%xmm3
mulsd  %xmm6,%xmm3
addsd  %xmm2,%xmm3
movapd 0x40(%rsp),%xmm9
movapd %xmm9,%xmm7
mulsd  %xmm10,%xmm7
addsd  %xmm3,%xmm7
movsd  0xc0(%rsp),%xmm0
movapd %xmm0,%xmm4
movsd  0xa54(%rip),%xmm13
mulsd  %xmm13,%xmm4
movapd 0x100(%rsp),%xmm3
movapd %xmm3,%xmm2
mulsd  %xmm14,%xmm2
movapd %xmm15,%xmm11
mulsd  %xmm6,%xmm11
addsd  %xmm2,%xmm11
movapd %xmm4,%xmm2
mulsd  %xmm3,%xmm6
movapd 0x110(%rsp),%xmm5
mulsd  %xmm14,%xmm5
addsd  %xmm6,%xmm5
movapd %xmm4,%xmm3
mulsd  %xmm11,%xmm3
mulsd  %xmm13,%xmm2
mulsd  %xmm0,%xmm2
movapd %xmm0,%xmm13
mulsd  %xmm2,%xmm5
movapd 0xd0(%rsp),%xmm0
movapd %xmm0,%xmm2
movsd  0x9ec(%rip),%xmm6
mulsd  %xmm6,%xmm2
mulsd  %xmm11,%xmm2
addsd  %xmm5,%xmm2
movapd %xmm15,%xmm5
mulsd  %xmm10,%xmm5
mulsd  %xmm8,%xmm14
addsd  %xmm5,%xmm14
movapd %xmm0,%xmm5
mulsd  %xmm7,%xmm5
mulsd  %xmm3,%xmm13
subsd  %xmm5,%xmm13
movapd %xmm7,%xmm5
mulsd  %xmm6,%xmm5
mulsd  0xe0(%rsp),%xmm5
mulsd  %xmm4,%xmm2
mulsd  %xmm9,%xmm1
addsd  %xmm14,%xmm1
mulsd  0x99a(%rip),%xmm3
mulsd  %xmm0,%xmm3
movsd  0x88(%rsp),%xmm0
movapd %xmm0,%xmm6
subsd  %xmm1,%xmm6
subsd  %xmm0,%xmm1
mulsd  %xmm7,%xmm4
mulsd  0x964(%rip),%xmm13
addsd  %xmm5,%xmm3
addsd  %xmm3,%xmm2
movapd %xmm1,%xmm3
divsd  %xmm4,%xmm3
mulsd  %xmm13,%xmm3
mulsd  %xmm12,%xmm3
movapd %xmm4,%xmm5
subsd  %xmm3,%xmm5
movapd %xmm1,%xmm3
xorpd  0x8de(%rip),%xmm3
divsd  %xmm5,%xmm3
mulsd  %xmm3,%xmm13
mulsd  %xmm12,%xmm13
addsd  %xmm4,%xmm13
movapd 0x20(%rsp),%xmm4
mulsd  %xmm3,%xmm3
mulsd  %xmm2,%xmm3
movsd  (%rsp),%xmm2
divsd  0x920(%rip),%xmm3
addsd  %xmm13,%xmm3
divsd  %xmm3,%xmm1
movsd  0x8d7(%rip),%xmm3
subsd  %xmm1,%xmm2
add    $0x1,%ebp
divsd  %xmm0,%xmm6
andpd  0x89c(%rip),%xmm6
ucomisd 0x8fc(%rip),%xmm6
ja     1450 <nkep_drift3_pert+0x2f0>
movapd %xmm14,%xmm9
movapd 0x40(%rsp),%xmm1
divsd  0x10(%rsp),%xmm1
mulsd  %xmm10,%xmm1
movapd %xmm3,%xmm0
subsd  %xmm1,%xmm0
movapd 0x90(%rsp),%xmm2
mulsd  %xmm14,%xmm2
movsd  0x80(%rsp),%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm9
movapd %xmm9,0x50(%rsp)
movsd  0xf0(%rsp),%xmm0
mulsd  %xmm9,%xmm0
mulsd  %xmm9,%xmm0
mov    $0x1,%al
movapd %xmm7,0xa0(%rsp)
movapd %xmm11,(%rsp)
call   1050 <at1@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  0x50(%rsp),%xmm1
movsd  %xmm1,0x20(%rsp)
movapd 0xa0(%rsp),%xmm3
movapd (%rsp),%xmm0
divsd  %xmm3,%xmm0
movapd %xmm0,(%rsp)
movsd  0x38(%rsp),%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x10(%rbx),%xmm6
movsd  (%rbx),%xmm1
movsd  0x8(%rbx),%xmm8
movapd %xmm8,%xmm2
movsd  0x78(%rsp),%xmm4
mulsd  %xmm4,%xmm2
movsd  0x70(%rsp),%xmm5
movapd %xmm5,%xmm7
mulsd  %xmm6,%xmm7
subsd  %xmm2,%xmm7
movsd  %xmm7,0xd0(%rsp)
movsd  0x68(%rsp),%xmm2
mulsd  %xmm2,%xmm6
mulsd  %xmm1,%xmm4
subsd  %xmm6,%xmm4
movsd  %xmm4,0xe0(%rsp)
mulsd  %xmm5,%xmm1
movapd %xmm8,%xmm6
mulsd  %xmm2,%xmm6
subsd  %xmm1,%xmm6
movsd  %xmm6,0x50(%rsp)
divsd  0x10(%rsp),%xmm3
movapd %xmm3,0xc0(%rsp)
mov    $0x1,%al
call   1030 <c0@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0xb0(%rsp)
movsd  0x38(%rsp),%xmm0
mov    $0x1,%al
call   1060 <c1@plt>
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
mulsd  0x20(%rsp),%xmm2
movsd  0xd0(%rsp),%xmm0
mulsd  %xmm2,%xmm0
movsd  (%rbx),%xmm1
movsd  0xb0(%rsp),%xmm10
mulsd  %xmm10,%xmm1
addsd  %xmm0,%xmm1
movapd 0xc0(%rsp),%xmm3
mulsd  %xmm3,%xmm1
movsd  0xe0(%rsp),%xmm4
mulsd  %xmm2,%xmm4
movsd  0x8(%rbx),%xmm0
mulsd  %xmm10,%xmm0
addsd  %xmm4,%xmm0
mulsd  %xmm3,%xmm0
mulsd  0x50(%rsp),%xmm2
mulsd  0x10(%rbx),%xmm10
addsd  %xmm2,%xmm10
mulsd  %xmm3,%xmm10
movapd %xmm0,%xmm2
movsd  0x78(%rsp),%xmm5
mulsd  %xmm5,%xmm2
mulsd  %xmm1,%xmm5
movapd (%rsp),%xmm4
movapd 0xa0(%rsp),%xmm9
divsd  %xmm9,%xmm4
movapd %xmm4,%xmm3
movapd %xmm4,%xmm8
mulsd  %xmm1,%xmm3
movsd  %xmm1,(%rbx)
movsd  0x70(%rsp),%xmm6
mulsd  %xmm6,%xmm1
mulsd  %xmm10,%xmm6
subsd  %xmm2,%xmm6
movapd %xmm10,%xmm2
movsd  0x68(%rsp),%xmm4
mulsd  %xmm4,%xmm2
subsd  %xmm2,%xmm5
mulsd  %xmm0,%xmm4
subsd  %xmm1,%xmm4
movapd %xmm4,%xmm7
movapd %xmm9,%xmm1
mulsd  %xmm9,%xmm1
movsd  0x67a(%rip),%xmm4
divsd  %xmm1,%xmm4
mulsd  %xmm4,%xmm6
addsd  %xmm6,%xmm3
mulsd  %xmm4,%xmm5
movapd %xmm8,%xmm2
movapd %xmm8,%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm5,%xmm1
mulsd  %xmm7,%xmm4
mulsd  %xmm10,%xmm2
addsd  %xmm4,%xmm2
movsd  %xmm3,(%r14)
movsd  %xmm0,0x8(%rbx)
movsd  %xmm1,0x8(%r14)
movsd  %xmm10,0x10(%rbx)
movsd  %xmm2,0x10(%r14)
xor    %eax,%eax
add    $0x130,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret

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

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