int asy1(double *nodes, double *weights, unsigned long int n) {
  int s = n % 2;
  unsigned long int n3, n4;
  int k, iter;
  double x, w, t, dt, C, theta, sint, f, fp, S, dS, dn = (double)n;
  double fn, fn5, nk, n5k, pn, jk, num, den, p, pp;
  dS = -.125 / dn;
  S = dS;
  k = 1;
  while (fabs(dS / S) > 2.2204460492503131e-16 / 100) {
    k += 1;
    dS *= -.5 * (k - 1) / (k + 1) / dn;
    S += dS;
  }
  double stirling[10] = {1.,
                         1. / 12.,
                         1. / 288.,
                         -139. / 51840.,
                         -571. / 2488320.,
                         163879. / 209018880.,
                         5246819. / 75246796800.,
                         -534703531. / 902961561600.,
                         -4483131259. / 86684309913600.,
                         432261921612371. / 514904800886784000.};
  fn = 1;
  fn5 = 1;
  nk = dn;
  n5k = dn + .5;
  for (k = 1; k < 10; k++) {
    fn += stirling[k] / nk;
    fn5 += stirling[k] / n5k;
    nk *= dn;
    n5k *= dn + .5;
  }
  C = exp(S) * sqrt(4.0 / (dn + .5) / 3.141592653589793) * fn / fn5;
  double besselroots[32] = {
      2.404825557695773,  5.520078110286311,  8.653727912911013,
      11.791534439014280, 14.930917708487790, 18.071063967910920,
      21.211636629879269, 24.352471530749284, 27.493479132040250,
      30.634606468431990, 33.775820213573560, 36.917098353664045,
      40.058425764628240, 43.199791713176737, 46.341188371661815,
      49.482609897397822, 52.624051841114984, 55.765510755019974,
      58.906983926080954, 62.048469190227159, 65.189964800206866,
      68.331469329856787, 71.472981603593752, 74.614500643701817,
      77.756025630388066, 80.897555871137627, 84.039090776938195,
      87.180629843641128, 90.322172637210500, 93.463718781944763,
      96.605267950996279, 99.746819858680624};
  pn = dn * dn + dn + 1. / 3.;
  n3 = n * n * n;
  n4 = n3 * n;
  for (k = (n + s) / 2; k > 0; k--) {
    dt = 1.0;
    iter = 1;
    theta = 3.141592653589793 * (4.0 * k - 1) / (4.0 * n + 2.0);
    sint = sin(theta);
    x = (1.0 - (n - 1.0) / (8.0 * n3) -
         (39.0 - 28.0 / (sint * sint)) / (384.0 * n4)) *
        cos(theta);
    t = acos(x);
    if (x > 0.5) {
      if (k < 30) {
        jk = besselroots[k - 1];
      } else {
        p = (k - 0.25) * 3.141592653589793;
        pp = p * p;
        num = 0.0682894897349453 +
              pp * (0.131420807470708 +
                    pp * (0.0245988241803681 + pp * 0.000813005721543268));
        den = p * (1.0 +
                   pp * (1.16837242570470 + pp * (0.200991122197811 +
                                                  pp * (0.00650404577261471))));
        jk = p + num / den;
      }
      if (k <= 5) {
        t = jk / sqrt(pn) * (1. - (jk * jk - 1.) / (pn * pn) / 360.);
        dt = 0.0;
      } else {
        p = jk / (n + .5);
        t = p + (p / tan(p) - 1.) / (8. * p * (n + .5) * (n + .5));
      }
    }
    while (fabs(dt) > 2.2204460492503131e-16) {
      feval(n, t, C, &f, &fp, k);
      dt = f / fp;
      t += dt;
      if (iter++ > 10) {
        break;
      }
    }
    feval(n, t, C, &f, &fp, k);
    if (dt != 0) {
      t += f / fp;
    }
    x = cos(t);
    w = 2. / (fp * fp);
    nodes[n - k] = x;
    nodes[k - 1] = -x;
    weights[n - k] = w;
    weights[k - 1] = w;
  }
  if (s == 1) {
    nodes[(n + s) / 2 - 1] = 0;
  }
  return 0;
}


x86 assembly (clang, -O0):
<asy1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2b0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x18(%rbp),%eax
and    $0x1,%eax
mov    %eax,-0x1c(%rbp)
movaps 0xf29(%rip),%xmm1
movq   -0x18(%rbp),%xmm0
punpckldq %xmm1,%xmm0
movapd 0xf28(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xe29(%rip),%xmm0
divsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movl   $0x1,-0x34(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
divsd  -0x88(%rbp),%xmm0
ff
movaps 0xedb(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xde7(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    128d <asy1+0x10d>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
movsd  0xe7a(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x34(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
divsd  -0x98(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
jmp    11fe <asy1+0x7e>
lea    -0x140(%rbp),%rdi
lea    0xe65(%rip),%rsi
mov    $0x50,%edx
call   1050 <memcpy@plt>
movsd  0xd6b(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xd5b(%rip),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xd33(%rip),%xmm0
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movl   $0x1,-0x34(%rbp)
cmpl   $0xa,-0x34(%rbp)
jge    138e <asy1+0x20e>
movslq -0x34(%rbp),%rax
movsd  -0x140(%rbp,%rax,8),%xmm0
ff ff
divsd  -0xb0(%rbp),%xmm0
ff
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movslq -0x34(%rbp),%rax
movsd  -0x140(%rbp,%rax,8),%xmm0
ff ff
divsd  -0xb8(%rbp),%xmm0
ff
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xca8(%rip),%xmm0
addsd  -0x98(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12f4 <asy1+0x174>
movsd  -0x88(%rbp),%xmm0
ff
call   1070 <exp@plt>
movsd  %xmm0,-0x248(%rbp)
ff
movsd  0xc65(%rip),%xmm1
addsd  -0x98(%rbp),%xmm1
ff
movsd  0xc75(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  0xc61(%rip),%xmm1
divsd  %xmm1,%xmm0
call   10a0 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x248(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
divsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
lea    -0x240(%rbp),%rdi
lea    0xd4e(%rip),%rsi
mov    $0x100,%edx
call   1050 <memcpy@plt>
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xbec(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x18(%rbp),%rax
imul   -0x18(%rbp),%rax
imul   -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
imul   -0x18(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
add    %rcx,%rax
shr    $0x1,%rax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
jle    1a7c <asy1+0x8fc>
movabs $0x3ff0000000000000,%rax
mov    %rax,-0x58(%rbp)
movl   $0x1,-0x38(%rbp)
cvtsi2sdl -0x34(%rbp),%xmm0
movsd  0xb93(%rip),%xmm2
mulsd  %xmm2,%xmm0
movsd  0xb97(%rip),%xmm1
movsd  %xmm1,-0x278(%rbp)
ff
addsd  %xmm1,%xmm0
movsd  0xb6b(%rip),%xmm1
mulsd  %xmm1,%xmm0
movq   -0x18(%rbp),%xmm1
movaps 0xc03(%rip),%xmm3
movaps %xmm3,-0x270(%rbp)
punpckldq %xmm3,%xmm1
movapd 0xc00(%rip),%xmm3
movaps %xmm3,-0x260(%rbp)
subpd  %xmm3,%xmm1
movaps %xmm1,%xmm3
unpckhpd %xmm1,%xmm1
addsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm1
movsd  0xb46(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
call   1040 <sin@plt>
movsd  -0x278(%rbp),%xmm1
ff
movaps -0x270(%rbp),%xmm4
movaps -0x260(%rbp),%xmm2
movsd  %xmm0,-0x70(%rbp)
movq   -0x18(%rbp),%xmm0
punpckldq %xmm4,%xmm0
subpd  %xmm2,%xmm0
movaps %xmm0,%xmm3
unpckhpd %xmm0,%xmm0
addsd  %xmm3,%xmm0
addsd  %xmm1,%xmm0
movq   -0x28(%rbp),%xmm1
punpckldq %xmm4,%xmm1
subpd  %xmm2,%xmm1
movaps %xmm1,%xmm3
unpckhpd %xmm1,%xmm1
addsd  %xmm3,%xmm1
movsd  0xae0(%rip),%xmm3
mulsd  %xmm3,%xmm1
divsd  %xmm1,%xmm0
movsd  0xa98(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x70(%rbp),%xmm3
mulsd  %xmm3,%xmm3
movsd  0xac3(%rip),%xmm1
divsd  %xmm3,%xmm1
movsd  0xabf(%rip),%xmm3
addsd  %xmm3,%xmm1
movq   -0x30(%rbp),%xmm3
punpckldq %xmm4,%xmm3
subpd  %xmm2,%xmm3
movaps %xmm3,%xmm2
unpckhpd %xmm3,%xmm3
addsd  %xmm2,%xmm3
movsd  0xa73(%rip),%xmm2
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x250(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
call   1090 <cos@plt>
movaps %xmm0,%xmm1
movsd  -0x250(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
call   1030 <acos@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  0x9fd(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    18f9 <asy1+0x779>
cmpl   $0x1e,-0x34(%rbp)
jge    1645 <asy1+0x4c5>
mov    -0x34(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  -0x240(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0xc8(%rbp)
ff
jmp    1762 <asy1+0x5e2>
cvtsi2sdl -0x34(%rbp),%xmm0
movsd  0xa4e(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0x9ca(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xe8(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm2
ff
movsd  0x9ee(%rip),%xmm3
mulsd  %xmm3,%xmm2
movsd  0x9ea(%rip),%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  0x9ca(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9b2(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  -0xe8(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm2
ff
movsd  -0xe8(%rbp),%xmm3
ff
movsd  0x96e(%rip),%xmm4
mulsd  %xmm4,%xmm3
movsd  0x96a(%rip),%xmm4
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm2
movsd  0x94a(%rip),%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  0x8ea(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm1
ff
divsd  -0xd8(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
cmpl   $0x5,-0x34(%rbp)
jg     17fa <asy1+0x67a>
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x280(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
call   10a0 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x280(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm2
movsd  0x88c(%rip),%xmm1
addsd  %xmm1,%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  -0xc0(%rbp),%xmm1
ff
divsd  %xmm1,%xmm2
movsd  0x8dc(%rip),%xmm1
divsd  %xmm1,%xmm2
movsd  0x838(%rip),%xmm1
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    18f4 <asy1+0x774>
movsd  -0xc8(%rbp),%xmm0
ff
movq   -0x18(%rbp),%xmm1
movaps 0x8c2(%rip),%xmm2
movaps %xmm2,-0x2b0(%rbp)
punpckldq %xmm2,%xmm1
movapd 0x8bf(%rip),%xmm2
movaps %xmm2,-0x2a0(%rbp)
subpd  %xmm2,%xmm1
movaps %xmm1,%xmm2
unpckhpd %xmm1,%xmm1
addsd  %xmm2,%xmm1
movsd  0x7d1(%rip),%xmm2
movsd  %xmm2,-0x290(%rbp)
ff
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0x288(%rbp)
ff
call   1080 <tan@plt>
movaps -0x2b0(%rbp),%xmm6
movaps -0x2a0(%rbp),%xmm4
movsd  -0x290(%rbp),%xmm5
ff
movaps %xmm0,%xmm2
movsd  -0x288(%rbp),%xmm0
ff
movaps %xmm0,%xmm1
divsd  %xmm2,%xmm1
movsd  0x7a4(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0xe0(%rbp),%xmm2
ff
movsd  0x7f8(%rip),%xmm3
mulsd  %xmm3,%xmm2
movq   -0x18(%rbp),%xmm3
punpckldq %xmm6,%xmm3
subpd  %xmm4,%xmm3
movaps %xmm3,%xmm4
unpckhpd %xmm3,%xmm3
addsd  %xmm4,%xmm3
movaps %xmm3,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm2
movsd  0x731(%rip),%xmm4
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    18f9 <asy1+0x779>
jmp    18fe <asy1+0x77e>
movsd  -0x58(%rbp),%xmm0
movaps 0x7e6(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0x7a2(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    197c <asy1+0x7fc>
mov    -0x18(%rbp),%rdi
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
mov    -0x34(%rbp),%ecx
lea    -0x78(%rbp),%rsi
lea    -0x80(%rbp),%rdx
mov    $0x2,%al
call   1060 <feval@plt>
movsd  -0x78(%rbp),%xmm0
divsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x38(%rbp)
cmp    $0xa,%eax
jle    1977 <asy1+0x7f7>
jmp    197c <asy1+0x7fc>
jmp    18fe <asy1+0x77e>
mov    -0x18(%rbp),%rdi
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
mov    -0x34(%rbp),%ecx
lea    -0x78(%rbp),%rsi
lea    -0x80(%rbp),%rdx
mov    $0x2,%al
call   1060 <feval@plt>
movsd  -0x58(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    19b9 <asy1+0x839>
jp     19b9 <asy1+0x839>
jmp    19cd <asy1+0x84d>
movsd  -0x78(%rbp),%xmm0
divsd  -0x80(%rbp),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
call   1090 <cos@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x80(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
movsd  0x65a(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq -0x34(%rbp),%rdx
sub    %rdx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq -0x34(%rbp),%rdx
sub    %rdx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
jmp    1471 <asy1+0x2f1>
cmpl   $0x1,-0x1c(%rbp)
jne    1aa5 <asy1+0x925>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
add    %rdx,%rcx
shr    $0x1,%rcx
sub    $0x1,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
xor    %eax,%eax
add    $0x2b0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<asy1>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xb8,%rsp
mov    %rdx,%r12
movq   %rdx,%xmm0
punpckldq 0xe6f(%rip),%xmm0
subpd  0xe77(%rip),%xmm0
movapd %xmm0,%xmm7
unpckhpd %xmm0,%xmm7
addsd  %xmm0,%xmm7
movsd  0xea3(%rip),%xmm1
divsd  %xmm7,%xmm1
movapd %xmm1,%xmm0
divsd  %xmm1,%xmm0
andpd  0xe5f(%rip),%xmm0
mov    %rsi,0x70(%rsp)
mov    %rdi,%r14
mov    %r12d,%ebx
ucomisd 0xe84(%rip),%xmm0
jbe    123c <asy1+0xcc>
mov    $0x1,%eax
movsd  0xe7d(%rip),%xmm2
movapd 0xe35(%rip),%xmm3
movsd  0xe65(%rip),%xmm4
movapd %xmm1,%xmm0
nopw   0x0(%rax,%rax,1)
xorps  %xmm5,%xmm5
cvtsi2sd %eax,%xmm5
mulsd  %xmm2,%xmm5
lea    0x2(%rax),%ecx
xorps  %xmm6,%xmm6
cvtsi2sd %ecx,%xmm6
divsd  %xmm6,%xmm5
divsd  %xmm7,%xmm5
mulsd  %xmm5,%xmm1
addsd  %xmm1,%xmm0
movapd %xmm1,%xmm5
divsd  %xmm0,%xmm5
andpd  %xmm3,%xmm5
add    $0x1,%eax
ucomisd %xmm4,%xmm5
ja     1200 <asy1+0x90>
jmp    1240 <asy1+0xd0>
movapd %xmm1,%xmm0
and    $0x1,%ebx
movsd  0xe1d(%rip),%xmm1
movapd %xmm7,0x40(%rsp)
addsd  %xmm7,%xmm1
movsd  %xmm1,0x10(%rsp)
call   1060 <exp@plt>
movsd  0xe58(%rip),%xmm1
divsd  0x10(%rsp),%xmm1
divsd  0xe52(%rip),%xmm1
movsd  %xmm0,0x18(%rsp)
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jb     128f <asy1+0x11f>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    1298 <asy1+0x128>
movapd %xmm1,%xmm0
call   1090 <sqrt@plt>
mov    %ebx,0x2c(%rsp)
mov    %ebx,%ecx
add    %r12,%rcx
shr    %rcx
mov    %rcx,%rax
mov    %rcx,0x30(%rsp)
test   %ecx,%ecx
jle    184d <asy1+0x6dd>
movsd  0xdb4(%rip),%xmm2
movapd %xmm2,%xmm3
movapd 0x40(%rsp),%xmm7
divsd  %xmm7,%xmm3
movsd  0xda6(%rip),%xmm5
movsd  0x10(%rsp),%xmm8
divsd  %xmm8,%xmm2
movapd %xmm7,%xmm9
mulsd  %xmm7,%xmm9
movapd %xmm8,%xmm1
mulsd  %xmm8,%xmm1
movsd  0xd86(%rip),%xmm4
addsd  %xmm5,%xmm3
addsd  %xmm5,%xmm2
movapd %xmm4,%xmm5
divsd  %xmm9,%xmm5
addsd  %xmm3,%xmm5
divsd  %xmm1,%xmm4
addsd  %xmm2,%xmm4
movapd %xmm9,%xmm2
mulsd  %xmm7,%xmm2
mulsd  %xmm8,%xmm1
movsd  0xd5b(%rip),%xmm3
movapd %xmm3,%xmm6
divsd  %xmm2,%xmm6
addsd  %xmm5,%xmm6
divsd  %xmm1,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm7,%xmm2
mulsd  %xmm8,%xmm1
movsd  0xd3e(%rip),%xmm4
movapd %xmm4,%xmm5
divsd  %xmm2,%xmm5
addsd  %xmm6,%xmm5
divsd  %xmm1,%xmm4
addsd  %xmm3,%xmm4
mulsd  %xmm7,%xmm2
mulsd  %xmm8,%xmm1
movsd  0xd21(%rip),%xmm3
movapd %xmm3,%xmm6
divsd  %xmm2,%xmm6
addsd  %xmm5,%xmm6
divsd  %xmm1,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm7,%xmm2
mulsd  %xmm8,%xmm1
movsd  0xd04(%rip),%xmm4
movapd %xmm4,%xmm5
divsd  %xmm2,%xmm5
addsd  %xmm6,%xmm5
divsd  %xmm1,%xmm4
addsd  %xmm3,%xmm4
mulsd  %xmm7,%xmm2
mulsd  %xmm8,%xmm1
movsd  0xce7(%rip),%xmm3
movapd %xmm3,%xmm6
divsd  %xmm2,%xmm6
addsd  %xmm5,%xmm6
divsd  %xmm1,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm7,%xmm2
mulsd  %xmm8,%xmm1
movsd  0xcca(%rip),%xmm4
movapd %xmm4,%xmm5
divsd  %xmm2,%xmm5
addsd  %xmm6,%xmm5
divsd  %xmm1,%xmm4
addsd  %xmm3,%xmm4
mulsd  %xmm7,%xmm2
mulsd  %xmm8,%xmm1
movsd  0xcad(%rip),%xmm3
movapd %xmm3,%xmm6
divsd  %xmm2,%xmm6
addsd  %xmm5,%xmm6
divsd  %xmm1,%xmm3
addsd  %xmm4,%xmm3
movsd  0x18(%rsp),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm6,%xmm1
divsd  %xmm3,%xmm1
movsd  %xmm1,0x18(%rsp)
addsd  %xmm7,%xmm9
addsd  0xc8b(%rip),%xmm9
mov    %r12,%rax
imul   %r12,%rax
imul   %r12,%rax
movsd  0xc68(%rip),%xmm0
mulsd  %xmm7,%xmm0
addsd  0xc74(%rip),%xmm0
movsd  %xmm0,0x68(%rsp)
addsd  0xc6e(%rip),%xmm7
movq   %rax,%xmm0
imul   %r12,%rax
movdqa 0xb7d(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xb81(%rip),%xmm2
subpd  %xmm2,%xmm0
movapd %xmm0,%xmm3
unpckhpd %xmm0,%xmm3
addsd  %xmm0,%xmm3
mulsd  0xc41(%rip),%xmm3
divsd  %xmm3,%xmm7
addsd  0xbc5(%rip),%xmm7
movapd %xmm7,0x40(%rsp)
movq   %rax,%xmm0
punpckldq %xmm1,%xmm0
subpd  %xmm2,%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  %xmm0,%xmm1
mulsd  0xc16(%rip),%xmm1
movapd %xmm1,0xa0(%rsp)
movapd %xmm9,%xmm0
mulsd  %xmm9,%xmm0
movapd %xmm0,0x90(%rsp)
movslq 0x30(%rsp),%rbx
movapd %xmm9,0x80(%rsp)
xorps  %xmm0,%xmm0
sqrtsd %xmm9,%xmm0
movsd  %xmm0,0x60(%rsp)
lea    0x38(%rsp),%r13
lea    0x20(%rsp),%rbp
jmp    1590 <asy1+0x420>
nop
movsd  0x38(%rsp),%xmm0
divsd  0x20(%rsp),%xmm0
movapd (%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
call   1080 <cos@plt>
movsd  0x20(%rsp),%xmm1
mulsd  %xmm1,%xmm1
movsd  0xb88(%rip),%xmm2
divsd  %xmm1,%xmm2
mov    %r12,%rax
sub    %rbx,%rax
movsd  %xmm0,(%r14,%rax,8)
xorpd  0xad8(%rip),%xmm0
lea    -0x1(%rbx),%rcx
mov    %ecx,%edx
movlpd %xmm0,(%r14,%rdx,8)
mov    0x70(%rsp),%rsi
movsd  %xmm2,(%rsi,%rax,8)
movsd  %xmm2,(%rsi,%rdx,8)
cmp    $0x1,%rbx
mov    %rcx,%rbx
jle    184d <asy1+0x6dd>
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
movsd  %xmm0,0x78(%rsp)
mulsd  0xb1b(%rip),%xmm0
addsd  0xb33(%rip),%xmm0
mulsd  0xb13(%rip),%xmm0
divsd  0x68(%rsp),%xmm0
movsd  %xmm0,(%rsp)
call   1040 <sin@plt>
mulsd  %xmm0,%xmm0
movsd  0xb27(%rip),%xmm1
divsd  %xmm0,%xmm1
addsd  0xb23(%rip),%xmm1
divsd  0xa0(%rsp),%xmm1
movapd 0x40(%rsp),%xmm0
subsd  %xmm1,%xmm0
movapd %xmm0,0x50(%rsp)
movsd  (%rsp),%xmm0
call   1080 <cos@plt>
mulsd  0x50(%rsp),%xmm0
movsd  %xmm0,(%rsp)
call   1030 <acos@plt>
movapd %xmm0,%xmm2
movsd  (%rsp),%xmm0
ucomisd 0xa47(%rip),%xmm0
jbe    179b <asy1+0x62b>
movsd  0x78(%rsp),%xmm2
cmp    $0x1e,%rbx
jae    16d0 <asy1+0x560>
lea    0xb22(%rip),%rax
movsd  -0x8(%rax,%rbx,8),%xmm3
cmp    $0x5,%rbx
ja     1750 <asy1+0x5e0>
movapd 0x80(%rsp),%xmm0
ucomisd 0xaf9(%rip),%xmm0
movsd  0x60(%rsp),%xmm0
jae    167f <asy1+0x50f>
movapd 0x80(%rsp),%xmm0
movapd %xmm3,(%rsp)
call   1090 <sqrt@plt>
movapd (%rsp),%xmm3
movapd 0x9a9(%rip),%xmm1
unpcklpd %xmm0,%xmm1
movapd %xmm3,%xmm2
mulsd  %xmm3,%xmm2
addsd  0xa45(%rip),%xmm2
divsd  0x90(%rsp),%xmm2
unpcklpd %xmm3,%xmm2
divpd  %xmm1,%xmm2
movsd  0x9c4(%rip),%xmm0
subsd  %xmm2,%xmm0
unpckhpd %xmm2,%xmm2
mulsd  %xmm0,%xmm2
xorpd  %xmm1,%xmm1
jmp    17a3 <asy1+0x633>
nopl   0x0(%rax)
addsd  0xa30(%rip),%xmm2
mulsd  0x9e8(%rip),%xmm2
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm0,%xmm3
mulsd  0xa1c(%rip),%xmm3
addsd  0xa1c(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xa18(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xa14(%rip),%xmm3
movapd %xmm0,%xmm1
mulsd  0xa10(%rip),%xmm1
addsd  0xa10(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xa0c(%rip),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x938(%rip),%xmm0
addsd  %xmm0,%xmm1
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm3
addsd  %xmm2,%xmm3
divsd  0x10(%rsp),%xmm3
movapd %xmm3,(%rsp)
movapd %xmm3,%xmm0
call   1070 <tan@plt>
movapd (%rsp),%xmm1
movapd %xmm1,%xmm2
divsd  %xmm0,%xmm2
addsd  0x967(%rip),%xmm2
movapd %xmm1,%xmm0
mulsd  0x9c3(%rip),%xmm0
movsd  0x10(%rsp),%xmm3
mulsd  %xmm3,%xmm0
mulsd  %xmm3,%xmm0
divsd  %xmm0,%xmm2
addsd  %xmm1,%xmm2
movsd  0x8d5(%rip),%xmm1
mov    $0xb,%r15d
nopl   0x0(%rax)
movapd %xmm1,%xmm0
andpd  0x864(%rip),%xmm0
ucomisd 0x98c(%rip),%xmm0
jbe    1802 <asy1+0x692>
mov    %r12,%rdi
movapd %xmm2,%xmm0
movsd  0x18(%rsp),%xmm1
mov    %r13,%rsi
mov    %rbp,%rdx
mov    %ebx,%ecx
mov    $0x2,%al
movapd %xmm2,(%rsp)
call   1050 <feval@plt>
movapd (%rsp),%xmm2
movsd  0x38(%rsp),%xmm1
divsd  0x20(%rsp),%xmm1
addsd  %xmm1,%xmm2
add    $0xffffffff,%r15d
jne    17b0 <asy1+0x640>
movapd %xmm1,0x50(%rsp)
movapd %xmm2,(%rsp)
mov    %r12,%rdi
movapd %xmm2,%xmm0
movsd  0x18(%rsp),%xmm1
mov    %r13,%rsi
mov    %rbp,%rdx
mov    %ebx,%ecx
mov    $0x2,%al
call   1050 <feval@plt>
movapd 0x50(%rsp),%xmm0
ucomisd 0x921(%rip),%xmm0
jne    1520 <asy1+0x3b0>
jp     1520 <asy1+0x3b0>
movapd (%rsp),%xmm0
jmp    1539 <asy1+0x3c9>
cmpl   $0x0,0x2c(%rsp)
je     1862 <asy1+0x6f2>
mov    0x30(%rsp),%rax
movq   $0x0,-0x8(%r14,%rax,8)
xor    %eax,%eax
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.asy1.stirling = [10 x double] [double 1.000000e+00, double 0x3FB5555555555555, double 0x3F6C71C71C71C71C, double 0xBF65F7268EDAB4C8, double 0xBF2E13CE465FA859, double 0x3F49B0FF6874F2C4, double 0x3F1247604839C038, double 0xBF436773BDB97B48, double 0xBF0B1D75D3346711, double 0x3F4B8239C670E690]
@__const.asy1.besselroots = [32 x double] [double 0x40033D152E971B40, double 0x4016148F5B2C2E45, double 0x40214EB56CCCDECA, double 0x40279544008272B5, double 0x402DDCA13EF271D4, double 0x403212313F8A19F5, double 0x4035362DD173F795, double 0x40385A3B930156D8, double 0x403B7E54A5FD5F10, double 0x403EA27591CBBED6, double 0x4040E34E13A66FE5, double 0x404275637A9619EC, double 0x4044077A7ED6293A, double 0x40459992C65D0D8E, double 0x40472BAC0F810810, double 0x4048BDC6293F0658, double 0x404A4FE0EE444C79, double 0x404BE1FC41A4C606, double 0x404D74180C9E41F8, double 0x404F06343D0971D3, double 0x40504C28621F11E6, double 0x40511536CB22D72A, double 0x4051DE4554A1C2DE, double 0x4052A753FA82047F, double 0x40537062B9535D17, double 0x405439718E2E379C, double 0x40550280769A2196, double 0x4055CB8F7079C7B2, double 0x4056949E79FB1F0D, double 0x40575DAD918ABF99, double 0x405826BCB5C9B624, double 0x4058EFCBE5854258]
define i32 @asy1(double* %0, double* %1, i64 %2) {
%4 = alloca double*
%5 = alloca double*
%6 = alloca i64
%7 = alloca i32
%8 = alloca i64
%9 = alloca i64
%10 = alloca i32
%11 = alloca i32
%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 double
%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 [10 x double]
%35 = alloca [32 x double]
store double* %0, double** %4
store double* %1, double** %5
store i64 %2, i64* %6
%36 = load i64, i64* %6
%37 = urem i64 %36, 2
%38 = trunc i64 %37 to i32
store i32 %38, i32* %7
%39 = load i64, i64* %6
%40 = uitofp i64 %39 to double
store double %40, double* %23
%41 = load double, double* %23
%42 = fdiv double -1.250000e-01, %41
store double %42, double* %22
%43 = load double, double* %22
store double %43, double* %21
store i32 1, i32* %10
br label %44
44: ; preds = %50, %3
%45 = load double, double* %22
%46 = load double, double* %21
%47 = fdiv double %45, %46
%48 = call double @llvm.fabs.f64(double %47)
%49 = fcmp ogt double %48, 0x3C447AE147AE147B
br i1 %49, label %50, label %68
50: ; preds = %44
%51 = load i32, i32* %10
%52 = add nsw i32 %51, 1
store i32 %52, i32* %10
%53 = load i32, i32* %10
%54 = sub nsw i32 %53, 1
%55 = sitofp i32 %54 to double
%56 = fmul double -5.000000e-01, %55
%57 = load i32, i32* %10
%58 = add nsw i32 %57, 1
%59 = sitofp i32 %58 to double
%60 = fdiv double %56, %59
%61 = load double, double* %23
%62 = fdiv double %60, %61
%63 = load double, double* %22
%64 = fmul double %63, %62
store double %64, double* %22
%65 = load double, double* %22
%66 = load double, double* %21
%67 = fadd double %66, %65
store double %67, double* %21
br label %44
68: ; preds = %44
%69 = bitcast [10 x double]* %34 to i8*
store double 1.000000e+00, double* %24
store double 1.000000e+00, double* %25
%70 = load double, double* %23
store double %70, double* %26
%71 = load double, double* %23
%72 = fadd double %71, 5.000000e-01
store double %72, double* %27
store i32 1, i32* %10
br label %73
73: ; preds = %100, %68
%74 = load i32, i32* %10
%75 = icmp slt i32 %74, 10
br i1 %75, label %76, label %103
76: ; preds = %73
%77 = load i32, i32* %10
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds [10 x double], [10 x double]* %34, i64 0, i64 %78
%80 = load double, double* %79
%81 = load double, double* %26
%82 = fdiv double %80, %81
%83 = load double, double* %24
%84 = fadd double %83, %82
store double %84, double* %24
%85 = load i32, i32* %10
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds [10 x double], [10 x double]* %34, i64 0, i64 %86
%88 = load double, double* %87
%89 = load double, double* %27
%90 = fdiv double %88, %89
%91 = load double, double* %25
%92 = fadd double %91, %90
store double %92, double* %25
%93 = load double, double* %23
%94 = load double, double* %26
%95 = fmul double %94, %93
store double %95, double* %26
%96 = load double, double* %23
%97 = fadd double %96, 5.000000e-01
%98 = load double, double* %27
%99 = fmul double %98, %97
store double %99, double* %27
br label %100
100: ; preds = %76
%101 = load i32, i32* %10
%102 = add nsw i32 %101, 1
store i32 %102, i32* %10
br label %73
103: ; preds = %73
%104 = load double, double* %21
%105 = call double @exp(double %104)
%106 = load double, double* %23
%107 = fadd double %106, 5.000000e-01
%108 = fdiv double 4.000000e+00, %107
%109 = fdiv double %108, 0x400921FB54442D18
%110 = call double @sqrt(double %109)
%111 = fmul double %105, %110
%112 = load double, double* %24
%113 = fmul double %111, %112
%114 = load double, double* %25
%115 = fdiv double %113, %114
store double %115, double* %16
%116 = bitcast [32 x double]* %35 to i8*
%117 = load double, double* %23
%118 = load double, double* %23
%119 = load double, double* %23
%120 = call double @llvm.fmuladd.f64(double %117, double %118, double %119)
%121 = fadd double %120, 0x3FD5555555555555
store double %121, double* %28
%122 = load i64, i64* %6
%123 = load i64, i64* %6
%124 = mul i64 %122, %123
%125 = load i64, i64* %6
%126 = mul i64 %124, %125
store i64 %126, i64* %8
%127 = load i64, i64* %8
%128 = load i64, i64* %6
%129 = mul i64 %127, %128
store i64 %129, i64* %9
%130 = load i64, i64* %6
%131 = load i32, i32* %7
%132 = sext i32 %131 to i64
%133 = add i64 %130, %132
%134 = udiv i64 %133, 2
%135 = trunc i64 %134 to i32
store i32 %135, i32* %10
br label %136
136: ; preds = %324, %103
%137 = load i32, i32* %10
%138 = icmp sgt i32 %137, 0
br i1 %138, label %139, label %327
139: ; preds = %136
store double 1.000000e+00, double* %15
store i32 1, i32* %11
%140 = load i32, i32* %10
%141 = sitofp i32 %140 to double
%142 = call double @llvm.fmuladd.f64(double 4.000000e+00, double %141, double -1.000000e+00)
%143 = fmul double 0x400921FB54442D18, %142
%144 = load i64, i64* %6
%145 = uitofp i64 %144 to double
%146 = call double @llvm.fmuladd.f64(double 4.000000e+00, double %145, double 2.000000e+00)
%147 = fdiv double %143, %146
store double %147, double* %17
%148 = load double, double* %17
%149 = call double @sin(double %148)
store double %149, double* %18
%150 = load i64, i64* %6
%151 = uitofp i64 %150 to double
%152 = fsub double %151, 1.000000e+00
%153 = load i64, i64* %8
%154 = uitofp i64 %153 to double
%155 = fmul double 8.000000e+00, %154
%156 = fdiv double %152, %155
%157 = fsub double 1.000000e+00, %156
%158 = load double, double* %18
%159 = load double, double* %18
%160 = fmul double %158, %159
%161 = fdiv double 2.800000e+01, %160
%162 = fsub double 3.900000e+01, %161
%163 = load i64, i64* %9
%164 = uitofp i64 %163 to double
%165 = fmul double 3.840000e+02, %164
%166 = fdiv double %162, %165
%167 = fsub double %157, %166
%168 = load double, double* %17
%169 = call double @cos(double %168)
%170 = fmul double %167, %169
store double %170, double* %12
%171 = load double, double* %12
%172 = call double @acos(double %171)
store double %172, double* %14
%173 = load double, double* %12
%174 = fcmp ogt double %173, 5.000000e-01
br i1 %174, label %175, label %254
175: ; preds = %139
%176 = load i32, i32* %10
%177 = icmp slt i32 %176, 30
br i1 %177, label %178, label %184
178: ; preds = %175
%179 = load i32, i32* %10
%180 = sub nsw i32 %179, 1
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds [32 x double], [32 x double]* %35, i64 0, i64 %181
%183 = load double, double* %182
store double %183, double* %29
br label %211
184: ; preds = %175
%185 = load i32, i32* %10
%186 = sitofp i32 %185 to double
%187 = fsub double %186, 2.500000e-01
%188 = fmul double %187, 0x400921FB54442D18
store double %188, double* %32
%189 = load double, double* %32
%190 = load double, double* %32
%191 = fmul double %189, %190
store double %191, double* %33
%192 = load double, double* %33
%193 = load double, double* %33
%194 = load double, double* %33
%195 = call double @llvm.fmuladd.f64(double %194, double 0x3F4AA3FC7E2482BE, double 0x3F99306F257FBA88)
%196 = call double @llvm.fmuladd.f64(double %193, double %195, double 0x3FC0D265A30CE092)
%197 = call double @llvm.fmuladd.f64(double %192, double %196, double 0x3FB17B6B8512764F)
store double %197, double* %30
%198 = load double, double* %32
%199 = load double, double* %33
%200 = load double, double* %33
%201 = load double, double* %33
%202 = call double @llvm.fmuladd.f64(double %201, double 0x3F7AA3FC7E293C42, double 0x3FC9BA13BC501EBC)
%203 = call double @llvm.fmuladd.f64(double %200, double %202, double 0x3FF2B1A748DF32B1)
%204 = call double @llvm.fmuladd.f64(double %199, double %203, double 1.000000e+00)
%205 = fmul double %198, %204
store double %205, double* %31
%206 = load double, double* %32
%207 = load double, double* %30
%208 = load double, double* %31
%209 = fdiv double %207, %208
%210 = fadd double %206, %209
store double %210, double* %29
br label %211
211: ; preds = %184, %178
%212 = load i32, i32* %10
%213 = icmp sle i32 %212, 5
br i1 %213, label %214, label %229
214: ; preds = %211
%215 = load double, double* %29
%216 = load double, double* %28
%217 = call double @sqrt(double %216)
%218 = fdiv double %215, %217
%219 = load double, double* %29
%220 = load double, double* %29
%221 = call double @llvm.fmuladd.f64(double %219, double %220, double -1.000000e+00)
%222 = load double, double* %28
%223 = load double, double* %28
%224 = fmul double %222, %223
%225 = fdiv double %221, %224
%226 = fdiv double %225, 3.600000e+02
%227 = fsub double 1.000000e+00, %226
%228 = fmul double %218, %227
store double %228, double* %14
store double 0.000000e+00, double* %15
br label %253
229: ; preds = %211
%230 = load double, double* %29
%231 = load i64, i64* %6
%232 = uitofp i64 %231 to double
%233 = fadd double %232, 5.000000e-01
%234 = fdiv double %230, %233
store double %234, double* %32
%235 = load double, double* %32
%236 = load double, double* %32
%237 = load double, double* %32
%238 = call double @tan(double %237)
%239 = fdiv double %236, %238
%240 = fsub double %239, 1.000000e+00
%241 = load double, double* %32
%242 = fmul double 8.000000e+00, %241
%243 = load i64, i64* %6
%244 = uitofp i64 %243 to double
%245 = fadd double %244, 5.000000e-01
%246 = fmul double %242, %245
%247 = load i64, i64* %6
%248 = uitofp i64 %247 to double
%249 = fadd double %248, 5.000000e-01
%250 = fmul double %246, %249
%251 = fdiv double %240, %250
%252 = fadd double %235, %251
store double %252, double* %14
br label %253
253: ; preds = %229, %214
br label %254
254: ; preds = %253, %139
br label %255
255: ; preds = %275, %254
%256 = load double, double* %15
%257 = call double @llvm.fabs.f64(double %256)
%258 = fcmp ogt double %257, 0x3CB0000000000000
br i1 %258, label %259, label %276
259: ; preds = %255
%260 = load i64, i64* %6
%261 = load double, double* %14
%262 = load double, double* %16
%263 = load i32, i32* %10
%264 = call i32 (i64, double, double, double*, double*, i32, ...) bitcast (i32 (...)* @feval to i32 (i64, double, double, double*, double*, i32, ...)*)(i64 %260, double %261, double %262, double* %19, double* %20, i32 %263)
%265 = load double, double* %19
%266 = load double, double* %20
%267 = fdiv double %265, %266
store double %267, double* %15
%268 = load double, double* %15
%269 = load double, double* %14
%270 = fadd double %269, %268
store double %270, double* %14
%271 = load i32, i32* %11
%272 = add nsw i32 %271, 1
store i32 %272, i32* %11
%273 = icmp sgt i32 %271, 10
br i1 %273, label %274, label %275
274: ; preds = %259
br label %276
275: ; preds = %259
br label %255
276: ; preds = %274, %255
%277 = load i64, i64* %6
%278 = load double, double* %14
%279 = load double, double* %16
%280 = load i32, i32* %10
%281 = call i32 (i64, double, double, double*, double*, i32, ...) bitcast (i32 (...)* @feval to i32 (i64, double, double, double*, double*, i32, ...)*)(i64 %277, double %278, double %279, double* %19, double* %20, i32 %280)
%282 = load double, double* %15
%283 = fcmp une double %282, 0.000000e+00
br i1 %283, label %284, label %290
284: ; preds = %276
%285 = load double, double* %19
%286 = load double, double* %20
%287 = fdiv double %285, %286
%288 = load double, double* %14
%289 = fadd double %288, %287
store double %289, double* %14
br label %290
290: ; preds = %284, %276
%291 = load double, double* %14
%292 = call double @cos(double %291)
store double %292, double* %12
%293 = load double, double* %20
%294 = load double, double* %20
%295 = fmul double %293, %294
%296 = fdiv double 2.000000e+00, %295
store double %296, double* %13
%297 = load double, double* %12
%298 = load double*, double** %4
%299 = load i64, i64* %6
%300 = load i32, i32* %10
%301 = sext i32 %300 to i64
%302 = sub i64 %299, %301
%303 = getelementptr inbounds double, double* %298, i64 %302
store double %297, double* %303
%304 = load double, double* %12
%305 = fneg double %304
%306 = load double*, double** %4
%307 = load i32, i32* %10
%308 = sub nsw i32 %307, 1
%309 = sext i32 %308 to i64
%310 = getelementptr inbounds double, double* %306, i64 %309
store double %305, double* %310
%311 = load double, double* %13
%312 = load double*, double** %5
%313 = load i64, i64* %6
%314 = load i32, i32* %10
%315 = sext i32 %314 to i64
%316 = sub i64 %313, %315
%317 = getelementptr inbounds double, double* %312, i64 %316
store double %311, double* %317
%318 = load double, double* %13
%319 = load double*, double** %5
%320 = load i32, i32* %10
%321 = sub nsw i32 %320, 1
%322 = sext i32 %321 to i64
%323 = getelementptr inbounds double, double* %319, i64 %322
store double %318, double* %323
br label %324
324: ; preds = %290
%325 = load i32, i32* %10
%326 = add nsw i32 %325, -1
store i32 %326, i32* %10
br label %136
327: ; preds = %136
%328 = load i32, i32* %7
%329 = icmp eq i32 %328, 1
br i1 %329, label %330, label %339
330: ; preds = %327
%331 = load double*, double** %4
%332 = load i64, i64* %6
%333 = load i32, i32* %7
%334 = sext i32 %333 to i64
%335 = add i64 %332, %334
%336 = udiv i64 %335, 2
%337 = sub i64 %336, 1
%338 = getelementptr inbounds double, double* %331, i64 %337
store double 0.000000e+00, double* %338
br label %339
339: ; preds = %330, %327
ret i32 0
}

LLVM IR (-O2):
@__const.asy1.besselroots = [32 x double] [double 0x40033D152E971B40, double 0x4016148F5B2C2E45, double 0x40214EB56CCCDECA, double 0x40279544008272B5, double 0x402DDCA13EF271D4, double 0x403212313F8A19F5, double 0x4035362DD173F795, double 0x40385A3B930156D8, double 0x403B7E54A5FD5F10, double 0x403EA27591CBBED6, double 0x4040E34E13A66FE5, double 0x404275637A9619EC, double 0x4044077A7ED6293A, double 0x40459992C65D0D8E, double 0x40472BAC0F810810, double 0x4048BDC6293F0658, double 0x404A4FE0EE444C79, double 0x404BE1FC41A4C606, double 0x404D74180C9E41F8, double 0x404F06343D0971D3, double 0x40504C28621F11E6, double 0x40511536CB22D72A, double 0x4051DE4554A1C2DE, double 0x4052A753FA82047F, double 0x40537062B9535D17, double 0x405439718E2E379C, double 0x40550280769A2196, double 0x4055CB8F7079C7B2, double 0x4056949E79FB1F0D, double 0x40575DAD918ABF99, double 0x405826BCB5C9B624, double 0x4058EFCBE5854258]
define i32 @asy1(double* nocapture writeonly %0, double* nocapture writeonly %1, i64 %2) {
%4 = alloca double
%5 = alloca double
%6 = trunc i64 %2 to i32
%7 = and i32 %6, 1
%8 = bitcast double* %4 to i8*
%9 = bitcast double* %5 to i8*
%10 = uitofp i64 %2 to double
%11 = fdiv double -1.250000e-01, %10
%12 = fdiv double %11, %11
%13 = tail call double @llvm.fabs.f64(double %12)
%14 = fcmp ogt double %13, 0x3C447AE147AE147B
br i1 %14, label %15, label %31
15: ; preds = %3, %15
%16 = phi i32 [ %19, %15 ], [ 1, %3 ]
%17 = phi double [ %26, %15 ], [ %11, %3 ]
%18 = phi double [ %27, %15 ], [ %11, %3 ]
%19 = add nuw nsw i32 %16, 1
%20 = sitofp i32 %16 to double
%21 = fmul double %20, -5.000000e-01
%22 = add nuw nsw i32 %16, 2
%23 = sitofp i32 %22 to double
%24 = fdiv double %21, %23
%25 = fdiv double %24, %10
%26 = fmul double %17, %25
%27 = fadd double %18, %26
%28 = fdiv double %26, %27
%29 = tail call double @llvm.fabs.f64(double %28)
%30 = fcmp ogt double %29, 0x3C447AE147AE147B
br i1 %30, label %15, label %31
31: ; preds = %15, %3
%32 = phi double [ %11, %3 ], [ %27, %15 ]
%33 = fadd double %10, 5.000000e-01
%34 = fdiv double 0x3FB5555555555555, %10
%35 = fadd double %34, 1.000000e+00
%36 = fdiv double 0x3FB5555555555555, %33
%37 = fadd double %36, 1.000000e+00
%38 = fmul double %10, %10
%39 = fmul double %33, %33
%40 = fdiv double 0x3F6C71C71C71C71C, %38
%41 = fadd double %35, %40
%42 = fdiv double 0x3F6C71C71C71C71C, %39
%43 = fadd double %37, %42
%44 = fmul double %38, %10
%45 = fmul double %33, %39
%46 = fdiv double 0xBF65F7268EDAB4C8, %44
%47 = fadd double %41, %46
%48 = fdiv double 0xBF65F7268EDAB4C8, %45
%49 = fadd double %43, %48
%50 = fmul double %44, %10
%51 = fmul double %33, %45
%52 = fdiv double 0xBF2E13CE465FA859, %50
%53 = fadd double %47, %52
%54 = fdiv double 0xBF2E13CE465FA859, %51
%55 = fadd double %49, %54
%56 = fmul double %50, %10
%57 = fmul double %33, %51
%58 = fdiv double 0x3F49B0FF6874F2C4, %56
%59 = fadd double %53, %58
%60 = fdiv double 0x3F49B0FF6874F2C4, %57
%61 = fadd double %55, %60
%62 = fmul double %56, %10
%63 = fmul double %33, %57
%64 = fdiv double 0x3F1247604839C038, %62
%65 = fadd double %59, %64
%66 = fdiv double 0x3F1247604839C038, %63
%67 = fadd double %61, %66
%68 = fmul double %62, %10
%69 = fmul double %33, %63
%70 = fdiv double 0xBF436773BDB97B48, %68
%71 = fadd double %65, %70
%72 = fdiv double 0xBF436773BDB97B48, %69
%73 = fadd double %67, %72
%74 = fmul double %68, %10
%75 = fmul double %33, %69
%76 = fdiv double 0xBF0B1D75D3346711, %74
%77 = fadd double %71, %76
%78 = fdiv double 0xBF0B1D75D3346711, %75
%79 = fadd double %73, %78
%80 = fmul double %74, %10
%81 = fmul double %33, %75
%82 = fdiv double 0x3F4B8239C670E690, %80
%83 = fadd double %77, %82
%84 = fdiv double 0x3F4B8239C670E690, %81
%85 = fadd double %79, %84
%86 = tail call double @exp(double %32)
%87 = fdiv double 4.000000e+00, %33
%88 = fdiv double %87, 0x400921FB54442D18
%89 = tail call double @sqrt(double %88)
%90 = fmul double %86, %89
%91 = fmul double %83, %90
%92 = fdiv double %91, %85
%93 = tail call double @llvm.fmuladd.f64(double %10, double %10, double %10)
%94 = fadd double %93, 0x3FD5555555555555
%95 = mul i64 %2, %2
%96 = mul i64 %95, %2
%97 = zext i32 %7 to i64
%98 = add i64 %97, %2
%99 = lshr i64 %98, 1
%100 = trunc i64 %99 to i32
%101 = icmp sgt i32 %100, 0
br i1 %101, label %102, label %217
102: ; preds = %31
%103 = mul i64 %96, %2
%104 = call double @llvm.fmuladd.f64(double %10, double 4.000000e+00, double 2.000000e+00)
%105 = fadd double %10, -1.000000e+00
%106 = uitofp i64 %96 to double
%107 = fmul double %106, 8.000000e+00
%108 = fdiv double %105, %107
%109 = fsub double 1.000000e+00, %108
%110 = uitofp i64 %103 to double
%111 = fmul double %110, 3.840000e+02
%112 = fmul double %94, %94
%113 = shl i64 %99, 32
%114 = ashr exact i64 %113, 32
br label %115
115: ; preds = %102, %202
%116 = phi i64 [ %114, %102 ], [ %211, %202 ]
%117 = trunc i64 %116 to i32
%118 = sitofp i32 %117 to double
%119 = call double @llvm.fmuladd.f64(double %118, double 4.000000e+00, double -1.000000e+00)
%120 = fmul double %119, 0x400921FB54442D18
%121 = fdiv double %120, %104
%122 = call double @sin(double %121)
%123 = fmul double %122, %122
%124 = fdiv double 2.800000e+01, %123
%125 = fsub double 3.900000e+01, %124
%126 = fdiv double %125, %111
%127 = fsub double %109, %126
%128 = call double @cos(double %121)
%129 = fmul double %128, %127
%130 = call double @acos(double %129)
%131 = fcmp ogt double %129, 5.000000e-01
br i1 %131, label %132, label %175
132: ; preds = %115
%133 = icmp ult i64 %116, 30
br i1 %133, label %147, label %134
134: ; preds = %132
%135 = fadd double %118, -2.500000e-01
%136 = fmul double %135, 0x400921FB54442D18
%137 = fmul double %136, %136
%138 = call double @llvm.fmuladd.f64(double %137, double 0x3F4AA3FC7E2482BE, double 0x3F99306F257FBA88)
%139 = call double @llvm.fmuladd.f64(double %137, double %138, double 0x3FC0D265A30CE092)
%140 = call double @llvm.fmuladd.f64(double %137, double %139, double 0x3FB17B6B8512764F)
%141 = call double @llvm.fmuladd.f64(double %137, double 0x3F7AA3FC7E293C42, double 0x3FC9BA13BC501EBC)
%142 = call double @llvm.fmuladd.f64(double %137, double %141, double 0x3FF2B1A748DF32B1)
%143 = call double @llvm.fmuladd.f64(double %137, double %142, double 1.000000e+00)
%144 = fmul double %136, %143
%145 = fdiv double %140, %144
%146 = fadd double %136, %145
br label %164
147: ; preds = %132
%148 = add nsw i64 %116, -1
%149 = getelementptr inbounds [32 x double], [32 x double]* @__const.asy1.besselroots, i64 0, i64 %148
%150 = load double, double* %149
%151 = icmp ult i64 %116, 6
br i1 %151, label %152, label %164
152: ; preds = %147
%153 = call double @sqrt(double %94)
%154 = call double @llvm.fmuladd.f64(double %150, double %150, double -1.000000e+00)
%155 = fdiv double %154, %112
%156 = insertelement <2 x double> poison, double %155, i64 0
%157 = insertelement <2 x double> %156, double %150, i64 1
%158 = insertelement <2 x double> <double 3.600000e+02, double poison>, double %153, i64 1
%159 = fdiv <2 x double> %157, %158
%160 = extractelement <2 x double> %159, i64 0
%161 = fsub double 1.000000e+00, %160
%162 = extractelement <2 x double> %159, i64 1
%163 = fmul double %161, %162
br label %175
164: ; preds = %134, %147
%165 = phi double [ %146, %134 ], [ %150, %147 ]
%166 = fdiv double %165, %33
%167 = call double @tan(double %166)
%168 = fdiv double %166, %167
%169 = fadd double %168, -1.000000e+00
%170 = fmul double %166, 8.000000e+00
%171 = fmul double %33, %170
%172 = fmul double %33, %171
%173 = fdiv double %169, %172
%174 = fadd double %166, %173
br label %175
175: ; preds = %152, %164, %115
%176 = phi double [ 1.000000e+00, %115 ], [ 1.000000e+00, %164 ], [ 0.000000e+00, %152 ]
%177 = phi double [ %130, %115 ], [ %174, %164 ], [ %163, %152 ]
br label %178
178: ; preds = %175, %184
%179 = phi double [ %188, %184 ], [ %176, %175 ]
%180 = phi double [ %189, %184 ], [ %177, %175 ]
%181 = phi i32 [ %190, %184 ], [ 1, %175 ]
%182 = call double @llvm.fabs.f64(double %179)
%183 = fcmp ogt double %182, 0x3CB0000000000000
br i1 %183, label %184, label %192
184: ; preds = %178
%185 = call i32 (i64, double, double, double*, double*, i32, ...) bitcast (i32 (...)* @feval to i32 (i64, double, double, double*, double*, i32, ...)*)(i64 %2, double %180, double %92, double* %4, double* %5, i32 %117)
%186 = load double, double* %4
%187 = load double, double* %5
%188 = fdiv double %186, %187
%189 = fadd double %180, %188
%190 = add nuw nsw i32 %181, 1
%191 = icmp eq i32 %190, 12
br i1 %191, label %192, label %178
192: ; preds = %184, %178
%193 = phi double [ %188, %184 ], [ %179, %178 ]
%194 = phi double [ %189, %184 ], [ %180, %178 ]
%195 = call i32 (i64, double, double, double*, double*, i32, ...) bitcast (i32 (...)* @feval to i32 (i64, double, double, double*, double*, i32, ...)*)(i64 %2, double %194, double %92, double* %4, double* %5, i32 %117)
%196 = fcmp une double %193, 0.000000e+00
br i1 %196, label %197, label %202
197: ; preds = %192
%198 = load double, double* %4
%199 = load double, double* %5
%200 = fdiv double %198, %199
%201 = fadd double %194, %200
br label %202
202: ; preds = %197, %192
%203 = phi double [ %201, %197 ], [ %194, %192 ]
%204 = call double @cos(double %203)
%205 = load double, double* %5
%206 = fmul double %205, %205
%207 = fdiv double 2.000000e+00, %206
%208 = sub i64 %2, %116
%209 = getelementptr inbounds double, double* %0, i64 %208
store double %204, double* %209
%210 = fneg double %204
%211 = add nsw i64 %116, -1
%212 = and i64 %211, 4294967295
%213 = getelementptr inbounds double, double* %0, i64 %212
store double %210, double* %213
%214 = getelementptr inbounds double, double* %1, i64 %208
store double %207, double* %214
%215 = getelementptr inbounds double, double* %1, i64 %212
store double %207, double* %215
%216 = icmp sgt i64 %116, 1
br i1 %216, label %115, label %217
217: ; preds = %202, %31
%218 = icmp eq i32 %7, 0
br i1 %218, label %222, label %219
219: ; preds = %217
%220 = add nsw i64 %99, -1
%221 = getelementptr inbounds double, double* %0, i64 %220
store double 0.000000e+00, double* %221
br label %222
222: ; preds = %219, %217
ret i32 0
}