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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double cosh(double);
double exp(float);
double fabs(double);
double log(double);
double sin(double);
double sinh(double);
double sqrt(double);
void bessik(float x, float xnu, float *ri, float *rk, float *rip, float *rkp) {
  void beschb(double x, double *gam1, double *gam2, double *gampl,
              double *gammi);
  void nrerror(char error_text[]);
  int i, l, nl;
  double a, a1, b, c, d, del, del1, delh, dels, e, f, fact, fact2, ff, gam1,
      gam2, gammi, gampl, h, p, pimu, q, q1, q2, qnew, ril, ril1, rimu, rip1,
      ripl, ritemp, rk1, rkmu, rkmup, rktemp, s, sum, sum1, x2, xi, xi2, xmu,
      xmu2;
  if (x <= 0.0 || xnu < 0.0)
    nrerror("bad arguments in bessik");
  nl = (int)(xnu + 0.5);
  xmu = xnu - nl;
  xmu2 = xmu * xmu;
  xi = 1.0 / x;
  xi2 = 2.0 * xi;
  h = xnu * xi;
  if (h < 1.0e-30)
    h = 1.0e-30;
  b = xi2 * xnu;
  d = 0.0;
  c = h;
  for (i = 1; i <= 10000; i++) {
    b += xi2;
    d = 1.0 / (b + d);
    c = b + 1.0 / c;
    del = c * d;
    h = del * h;
    if (fabs(del - 1.0) < 1.0e-10)
      break;
  }
  if (i > 10000)
    nrerror("x too large in bessik; try asymptotic expansion");
  ril = 1.0e-30;
  ripl = h * ril;
  ril1 = ril;
  rip1 = ripl;
  fact = xnu * xi;
  for (l = nl; l >= 1; l--) {
    ritemp = fact * ril + ripl;
    fact -= xi;
    ripl = fact * ritemp + ril;
    ril = ritemp;
  }
  f = ripl / ril;
  if (x < 2.0) {
    x2 = 0.5 * x;
    pimu = 3.141592653589793 * xmu;
    fact = (fabs(pimu) < 1.0e-10 ? 1.0 : pimu / sin(pimu));
    d = -log(x2);
    e = xmu * d;
    fact2 = (fabs(e) < 1.0e-10 ? 1.0 : sinh(e) / e);
    beschb(xmu, &gam1, &gam2, &gampl, &gammi);
    ff = fact * (gam1 * cosh(e) + gam2 * fact2 * d);
    sum = ff;
    e = exp(e);
    p = 0.5 * e / gampl;
    q = 0.5 / (e * gammi);
    c = 1.0;
    d = x2 * x2;
    sum1 = p;
    for (i = 1; i <= 10000; i++) {
      ff = (i * ff + p + q) / (i * i - xmu2);
      c *= (d / i);
      p /= (i - xmu);
      q /= (i + xmu);
      del = c * ff;
      sum += del;
      del1 = c * (p - i * ff);
      sum1 += del1;
      if (fabs(del) < fabs(sum) * 1.0e-10)
        break;
    }
    if (i > 10000)
      nrerror("bessk series failed to converge");
    rkmu = sum;
    rk1 = sum1 * xi2;
  } else {
    b = 2.0 * (1.0 + x);
    d = 1.0 / b;
    h = delh = d;
    q1 = 0.0;
    q2 = 1.0;
    a1 = 0.25 - xmu2;
    q = c = a1;
    a = -a1;
    s = 1.0 + q * delh;
    for (i = 2; i <= 10000; i++) {
      a -= 2 * (i - 1);
      c = -a * c / i;
      qnew = (q1 - b * q2) / a;
      q1 = q2;
      q2 = qnew;
      q += c * qnew;
      b += 2.0;
      d = 1.0 / (b + a * d);
      delh = (b * d - 1.0) * delh;
      h += delh;
      dels = q * delh;
      s += dels;
      if (fabs(dels / s) < 1.0e-10)
        break;
    }
    if (i > 10000)
      nrerror("bessik: failure to converge in cf2");
    h = a1 * h;
    rkmu = sqrt(3.141592653589793 / (2.0 * x)) * exp(-x) / s;
    rk1 = rkmu * (xmu + x + 0.5 - h) * xi;
  }
  rkmup = xmu * xi * rkmu - rk1;
  rimu = xi / (f * rkmu - rkmup);
  *ri = (rimu * ril1) / ril;
  *rip = (rimu * rip1) / ril;
  for (i = 1; i <= nl; i++) {
    rktemp = (xmu + i) * xi2 * rk1 + rkmu;
    rkmu = rk1;
    rk1 = rktemp;
  }
  *rk = rkmu;
  *rkp = xnu * xi * rkmu - rk1;
}


x86 assembly (clang, -O0):
<bessik>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1c0,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jae    11d1 <bessik+0x51>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    11dd <bessik+0x5d>
lea    0xe78(%rip),%rdi
call   1040 <nrerror@plt>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe2a(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x34(%rbp)
movss  -0x8(%rbp),%xmm0
cvtsi2ssl -0x34(%rbp),%xmm1
subss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x188(%rbp),%xmm0
ff
mulsd  -0x188(%rbp),%xmm0
ff
movsd  %xmm0,-0x190(%rbp)
ff
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdd4(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  0xdb8(%rip),%xmm0
mulsd  -0x178(%rbp),%xmm0
ff
movsd  %xmm0,-0x180(%rbp)
ff
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  -0x178(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0xd7f(%rip),%xmm0
ucomisd -0xd0(%rbp),%xmm0
ff
jbe    129f <bessik+0x11f>
movsd  0xd69(%rip),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x180(%rbp),%xmm0
ff
movss  -0x8(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x58(%rbp)
movl   $0x1,-0x2c(%rbp)
cmpl   $0x2710,-0x2c(%rbp)
jg     1394 <bessik+0x214>
movsd  -0x180(%rbp),%xmm0
ff
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm1
addsd  -0x60(%rbp),%xmm1
movsd  0xd0a(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  0xcf4(%rip),%xmm1
divsd  -0x58(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x68(%rbp),%xmm1
movsd  0xcb5(%rip),%xmm0
subsd  %xmm0,%xmm1
movaps 0xcda(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xcae(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1381 <bessik+0x201>
jmp    1394 <bessik+0x214>
jmp    1386 <bessik+0x206>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12d5 <bessik+0x155>
cmpl   $0x2710,-0x2c(%rbp)
jle    13ad <bessik+0x22d>
lea    0xcc0(%rip),%rdi
call   1040 <nrerror@plt>
movsd  0xc4b(%rip),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  -0x178(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x34(%rbp),%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x1,-0x30(%rbp)
jl     14a8 <bessik+0x328>
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x108(%rbp),%xmm2
ff
movsd  -0x128(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x178(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x130(%rbp),%xmm2
ff
movsd  -0x108(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0x30(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x30(%rbp)
jmp    1414 <bessik+0x294>
movsd  -0x128(%rbp),%xmm0
ff
divsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb37(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    192b <bessik+0x7ab>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb2c(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  0xb38(%rip),%xmm0
mulsd  -0x188(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm1
ff
movaps 0xb21(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xaf5(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    154a <bessik+0x3ca>
movsd  0xad3(%rip),%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
jmp    157e <bessik+0x3fe>
movsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
call   1070 <sin@plt>
movaps %xmm0,%xmm1
movsd  -0x1a0(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x198(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
call   1090 <log@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x188(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
movaps 0xa65(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xa39(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1606 <bessik+0x486>
movsd  0xa17(%rip),%xmm0
movsd  %xmm0,-0x1a8(%rbp)
jmp    1623 <bessik+0x4a3>
movsd  -0x88(%rbp),%xmm0
ff
call   1030 <sinh@plt>
divsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x1a8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x188(%rbp),%xmm0
ff
lea    -0xb0(%rbp),%rdi
lea    -0xb8(%rbp),%rsi
lea    -0xc8(%rbp),%rdx
lea    -0xc0(%rbp),%rcx
call   1050 <beschb@plt>
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1060 <cosh@plt>
movsd  -0x1b8(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0x1b0(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm2
ff
mulsd  -0xa0(%rbp),%xmm2
ff
mulsd  -0x60(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
call   1080 <exp@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0x922(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
divsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0xc0(%rbp),%xmm1
ff
movsd  0x8f2(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  0x8d6(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x170(%rbp),%xmm0
ff
mulsd  -0x170(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x168(%rbp)
ff
movl   $0x1,-0x2c(%rbp)
cmpl   $0x2710,-0x2c(%rbp)
jg     18e5 <bessik+0x765>
cvtsi2sdl -0x2c(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xe8(%rbp),%xmm0
ff
mov    -0x2c(%rbp),%eax
imul   -0x2c(%rbp),%eax
cvtsi2sd %eax,%xmm1
subsd  -0x190(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
cvtsi2sdl -0x2c(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
cvtsi2sdl -0x2c(%rbp),%xmm1
subsd  -0x188(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
cvtsi2sdl -0x2c(%rbp),%xmm1
addsd  -0x188(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
addsd  -0x160(%rbp),%xmm0
ff
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
cvtsi2sdl -0x2c(%rbp),%xmm1
movsd  -0xa8(%rbp),%xmm3
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x168(%rbp),%xmm0
ff
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x68(%rbp),%xmm1
movaps 0x7a0(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x160(%rbp),%xmm0
ff
movaps 0x78d(%rip),%xmm2
pand   %xmm2,%xmm0
movsd  0x761(%rip),%xmm2
mulsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    18d2 <bessik+0x752>
jmp    18e5 <bessik+0x765>
jmp    18d7 <bessik+0x757>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    176b <bessik+0x5eb>
cmpl   $0x2710,-0x2c(%rbp)
jle    18fe <bessik+0x77e>
lea    0x79f(%rip),%rdi
call   1040 <nrerror@plt>
movsd  -0x160(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
mulsd  -0x180(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
jmp    1c94 <bessik+0xb14>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x6d4(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0x6c0(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0x6b7(%rip),%xmm0
divsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  %xmm0,-0xd0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  0x688(%rip),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  0x690(%rip),%xmm0
subsd  -0x190(%rbp),%xmm0
ff
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x61f(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movl   $0x2,-0x2c(%rbp)
cmpl   $0x2710,-0x2c(%rbp)
jg     1bbd <bessik+0xa3d>
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
shl    $0x1,%eax
cvtsi2sd %eax,%xmm1
movsd  -0x40(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x58(%rbp),%xmm0
cvtsi2sdl -0x2c(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0xf0(%rbp),%xmm1
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0xf8(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x100(%rbp),%xmm2
ff
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  0x51f(%rip),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x4fe(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x4ff(%rip),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
addsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x80(%rbp),%xmm1
divsd  -0x158(%rbp),%xmm1
ff
movaps 0x4b1(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0x485(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1baa <bessik+0xa2a>
jmp    1bbd <bessik+0xa3d>
jmp    1baf <bessik+0xa2f>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1a04 <bessik+0x884>
cmpl   $0x2710,-0x2c(%rbp)
jle    1bd6 <bessik+0xa56>
lea    0x4e7(%rip),%rdi
call   1040 <nrerror@plt>
movsd  -0x48(%rbp),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x40c(%rip),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x430(%rip),%xmm0
divsd  %xmm1,%xmm0
call   10a0 <sqrt@plt>
movsd  %xmm0,-0x1c0(%rbp)
ff
movss  -0x4(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
call   1080 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x1c0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
divsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
movsd  -0x188(%rbp),%xmm1
ff
movss  -0x4(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm2,%xmm1
movsd  0x3a4(%rip),%xmm2
addsd  %xmm2,%xmm1
subsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
mulsd  -0x178(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x188(%rbp),%xmm0
ff
mulsd  -0x178(%rbp),%xmm0
ff
movsd  -0x140(%rbp),%xmm2
ff
movsd  -0x138(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x178(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x140(%rbp),%xmm3
ff
movsd  -0x148(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
mulsd  -0x110(%rbp),%xmm0
ff
divsd  -0x108(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  %xmm0,(%rax)
movsd  -0x118(%rbp),%xmm0
ff
mulsd  -0x120(%rbp),%xmm0
ff
divsd  -0x108(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,(%rax)
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     1de8 <bessik+0xc68>
movsd  -0x188(%rbp),%xmm0
ff
cvtsi2sdl -0x2c(%rbp),%xmm1
addsd  %xmm1,%xmm0
mulsd  -0x180(%rbp),%xmm0
ff
movsd  -0x138(%rbp),%xmm2
ff
movsd  -0x140(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1d75 <bessik+0xbf5>
movsd  -0x140(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  -0x178(%rbp),%xmm0
ff
movsd  -0x140(%rbp),%xmm2
ff
movsd  -0x138(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
add    $0x1c0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bessik>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xd0,%rsp
mov    %rcx,%r14
mov    %rdx,%r12
mov    %rsi,%r15
mov    %rdi,%r13
cvtss2sd %xmm0,%xmm9
xorps  %xmm2,%xmm2
movaps %xmm0,0x40(%rsp)
ucomiss %xmm0,%xmm2
movsd  %xmm9,0x8(%rsp)
jae    11ba <bessik+0x3a>
ucomiss %xmm1,%xmm2
jbe    11d9 <bessik+0x59>
lea    0xeb3(%rip),%rdi
movss  %xmm1,0x10(%rsp)
call   1040 <nrerror@plt>
movss  0x10(%rsp),%xmm1
movsd  0x8(%rsp),%xmm9
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
movsd  0xe18(%rip),%xmm2
addsd  %xmm0,%xmm2
cvttsd2si %xmm2,%ebx
cvttpd2dq %xmm2,%xmm2
cvtdq2ps %xmm2,%xmm2
subss  %xmm2,%xmm1
cvtss2sd %xmm1,%xmm8
movaps %xmm8,%xmm12
mulsd  %xmm8,%xmm12
movsd  0xdf6(%rip),%xmm15
movapd %xmm15,%xmm6
divsd  %xmm9,%xmm6
movapd %xmm6,%xmm5
addsd  %xmm6,%xmm5
movapd %xmm6,%xmm2
mulsd  %xmm0,%xmm2
movsd  0xddc(%rip),%xmm7
movapd %xmm7,%xmm1
movsd  %xmm2,0x60(%rsp)
maxsd  %xmm2,%xmm1
mulsd  %xmm5,%xmm0
xorpd  %xmm2,%xmm2
mov    $0x2710,%eax
movsd  0xdc0(%rip),%xmm13
movapd 0xddf(%rip),%xmm11
movsd  0xdb6(%rip),%xmm14
movapd %xmm1,%xmm4
movsd  %xmm8,0x28(%rsp)
movsd  %xmm5,0x88(%rsp)
movsd  %xmm6,0x58(%rsp)
movsd  %xmm12,0x30(%rsp)
nopl   0x0(%rax,%rax,1)
addsd  %xmm5,%xmm0
movapd %xmm2,%xmm3
addsd  %xmm0,%xmm3
movapd %xmm15,%xmm2
divsd  %xmm3,%xmm2
movapd %xmm15,%xmm3
divsd  %xmm1,%xmm3
movapd %xmm3,%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm3
mulsd  %xmm2,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm13,%xmm3
andpd  %xmm11,%xmm3
ucomisd %xmm3,%xmm14
ja     1337 <bessik+0x1b7>
add    $0xffffffff,%eax
jne    1290 <bessik+0x110>
lea    0xdad(%rip),%rdi
movsd  %xmm4,0x68(%rsp)
call   1040 <nrerror@plt>
movapd 0xd4d(%rip),%xmm11
movsd  0xd1c(%rip),%xmm13
movsd  0xd03(%rip),%xmm15
movsd  0x30(%rsp),%xmm12
movsd  0xd0b(%rip),%xmm14
movsd  0x68(%rsp),%xmm4
movsd  0xced(%rip),%xmm7
movsd  0x8(%rsp),%xmm9
movsd  0x58(%rsp),%xmm6
movsd  0x28(%rsp),%xmm8
mulsd  %xmm7,%xmm4
movapd %xmm4,%xmm2
test   %ebx,%ebx
jle    1420 <bessik+0x2a0>
lea    -0x1(%rbx),%ecx
mov    %ebx,%eax
and    $0x3,%eax
je     13a2 <bessik+0x222>
xor    %edx,%edx
movsd  0xcb5(%rip),%xmm7
movapd %xmm4,%xmm2
movsd  0x60(%rsp),%xmm0
cs nopw 0x0(%rax,%rax,1)
nop
movapd %xmm7,%xmm1
movapd %xmm0,%xmm7
mulsd  %xmm1,%xmm7
addsd  %xmm2,%xmm7
subsd  %xmm6,%xmm0
movapd %xmm0,%xmm2
mulsd  %xmm7,%xmm2
addsd  %xmm1,%xmm2
add    $0x1,%edx
cmp    %edx,%eax
jne    1370 <bessik+0x1f0>
mov    %ebx,%eax
sub    %edx,%eax
cmp    $0x3,%ecx
jae    13bb <bessik+0x23b>
jmp    1420 <bessik+0x2a0>
movsd  0xc66(%rip),%xmm7
mov    %ebx,%eax
movapd %xmm4,%xmm2
movsd  0x60(%rsp),%xmm0
cmp    $0x3,%ecx
jb     1420 <bessik+0x2a0>
add    $0xffffffff,%eax
xchg   %ax,%ax
movapd %xmm0,%xmm1
mulsd  %xmm7,%xmm1
addsd  %xmm2,%xmm1
subsd  %xmm6,%xmm0
movapd %xmm0,%xmm2
mulsd  %xmm1,%xmm2
addsd  %xmm2,%xmm7
addsd  %xmm2,%xmm7
subsd  %xmm6,%xmm0
movapd %xmm0,%xmm2
mulsd  %xmm7,%xmm2
addsd  %xmm2,%xmm1
addsd  %xmm2,%xmm1
subsd  %xmm6,%xmm0
movapd %xmm0,%xmm2
mulsd  %xmm1,%xmm2
addsd  %xmm2,%xmm7
addsd  %xmm2,%xmm7
subsd  %xmm6,%xmm0
movapd %xmm0,%xmm2
mulsd  %xmm7,%xmm2
addsd  %xmm1,%xmm2
add    $0xfffffffc,%eax
cmp    $0xfffffffe,%eax
jb     13c0 <bessik+0x240>
movsd  %xmm4,0x68(%rsp)
movsd  %xmm7,0xa8(%rsp)
divsd  %xmm7,%xmm2
movsd  %xmm2,0xa0(%rsp)
movss  0xc2c(%rip),%xmm0
ucomiss 0x40(%rsp),%xmm0
jbe    1706 <bessik+0x586>
mulsd  0xba8(%rip),%xmm9
movsd  0xbd8(%rip),%xmm0
mulsd  %xmm8,%xmm0
movapd 0xbd3(%rip),%xmm2
andpd  %xmm0,%xmm2
movsd  0xb8f(%rip),%xmm1
ucomisd %xmm2,%xmm14
movsd  %xmm9,0x8(%rsp)
ja     14a3 <bessik+0x323>
movapd %xmm0,0x10(%rsp)
call   1070 <sin@plt>
movsd  0x8(%rsp),%xmm9
movapd 0x10(%rsp),%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,0x10(%rsp)
movapd %xmm9,%xmm0
call   1090 <log@plt>
xorpd  0xb95(%rip),%xmm0
movapd %xmm0,0x70(%rsp)
movapd %xmm0,%xmm1
movsd  0x28(%rsp),%xmm2
mulsd  %xmm2,%xmm1
movapd 0xb69(%rip),%xmm0
movapd %xmm1,0x40(%rsp)
andpd  %xmm1,%xmm0
movsd  0xb37(%rip),%xmm1
ucomisd %xmm0,%xmm1
movsd  0xb13(%rip),%xmm0
movapd %xmm2,%xmm1
ja     1512 <bessik+0x392>
movapd 0x40(%rsp),%xmm0
call   1030 <sinh@plt>
movsd  0x28(%rsp),%xmm1
divsd  0x40(%rsp),%xmm0
movsd  %xmm0,0x98(%rsp)
lea    0xc8(%rsp),%rdi
lea    0xc0(%rsp),%rsi
lea    0xb0(%rsp),%rdx
lea    0xb8(%rsp),%rcx
movapd %xmm1,%xmm0
call   1050 <beschb@plt>
movsd  0xc8(%rsp),%xmm0
movsd  %xmm0,0x90(%rsp)
movapd 0x40(%rsp),%xmm0
call   1060 <cosh@plt>
movsd  0x98(%rsp),%xmm1
mulsd  0xc0(%rsp),%xmm1
mulsd  0x70(%rsp),%xmm1
mulsd  0x90(%rsp),%xmm0
addsd  %xmm1,%xmm0
movapd 0x10(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm1,0x10(%rsp)
movaps 0x40(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
call   1080 <exp@plt>
movapd 0x10(%rsp),%xmm4
movsd  0x28(%rsp),%xmm8
movsd  0xa46(%rip),%xmm13
movaps %xmm0,%xmm7
mulsd  %xmm13,%xmm7
divsd  0xb0(%rsp),%xmm7
mulsd  0xb8(%rsp),%xmm0
divsd  %xmm0,%xmm13
movsd  0x8(%rsp),%xmm10
mulsd  %xmm10,%xmm10
mov    $0x1,%eax
movapd 0xa4d(%rip),%xmm9
movapd %xmm4,%xmm2
movapd %xmm7,%xmm14
movsd  0xa1b(%rip),%xmm11
movsd  0x30(%rsp),%xmm12
movsd  0x9f4(%rip),%xmm3
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movapd %xmm7,%xmm5
movapd %xmm3,%xmm6
mulsd  %xmm1,%xmm2
addsd  %xmm14,%xmm2
addsd  %xmm13,%xmm2
mov    %eax,%ecx
imul   %eax,%ecx
xorps  %xmm7,%xmm7
cvtsi2sd %ecx,%xmm7
subsd  %xmm12,%xmm7
divsd  %xmm7,%xmm2
movapd %xmm10,%xmm3
divsd  %xmm1,%xmm3
mulsd  %xmm6,%xmm3
movapd %xmm1,%xmm6
subsd  %xmm8,%xmm6
divsd  %xmm6,%xmm14
movapd %xmm3,%xmm6
mulsd  %xmm2,%xmm6
addsd  %xmm6,%xmm4
movapd %xmm1,%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm14,%xmm7
subsd  %xmm0,%xmm7
mulsd  %xmm3,%xmm7
addsd  %xmm5,%xmm7
andpd  %xmm9,%xmm6
movapd %xmm4,%xmm5
andpd  %xmm9,%xmm5
mulsd  %xmm11,%xmm5
ucomisd %xmm6,%xmm5
ja     16ee <bessik+0x56e>
addsd  %xmm8,%xmm1
divsd  %xmm1,%xmm13
add    $0x1,%eax
cmp    $0x2711,%eax
jne    1620 <bessik+0x4a0>
lea    0x9f2(%rip),%rdi
movapd %xmm4,0x10(%rsp)
movapd %xmm7,0x30(%rsp)
call   1040 <nrerror@plt>
movapd 0x30(%rsp),%xmm7
movapd 0x10(%rsp),%xmm4
movsd  0x28(%rsp),%xmm8
movsd  0x88(%rsp),%xmm2
mulsd  %xmm2,%xmm7
movsd  0x58(%rsp),%xmm1
jmp    1902 <bessik+0x782>
addsd  %xmm15,%xmm9
addsd  %xmm9,%xmm9
movapd %xmm15,%xmm1
divsd  %xmm9,%xmm1
movsd  0x906(%rip),%xmm4
subsd  %xmm12,%xmm4
movapd 0x921(%rip),%xmm2
xorpd  %xmm4,%xmm2
movapd %xmm4,%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm15,%xmm0
movapd %xmm0,0x10(%rsp)
xorpd  %xmm12,%xmm12
mov    $0x2,%eax
mov    $0x2,%ecx
movapd %xmm4,%xmm3
movapd %xmm1,%xmm0
movsd  %xmm1,0x30(%rsp)
movapd %xmm15,%xmm7
movapd %xmm4,0x70(%rsp)
xchg   %ax,%ax
movapd %xmm11,%xmm8
movapd %xmm4,%xmm11
movapd %xmm12,%xmm6
movapd %xmm7,%xmm12
movapd %xmm0,%xmm10
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm2
movapd %xmm2,%xmm0
xorpd  0x8b0(%rip),%xmm0
mulsd  %xmm0,%xmm3
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
divsd  %xmm0,%xmm3
movapd %xmm9,%xmm0
mulsd  %xmm7,%xmm0
subsd  %xmm0,%xmm6
movapd %xmm6,%xmm7
divsd  %xmm2,%xmm7
movapd %xmm3,%xmm4
mulsd  %xmm7,%xmm4
addsd  %xmm11,%xmm4
addsd  0x856(%rip),%xmm9
mulsd  %xmm2,%xmm1
movapd %xmm1,%xmm0
addsd  %xmm9,%xmm0
movapd %xmm15,%xmm1
divsd  %xmm0,%xmm1
movapd %xmm9,%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm13,%xmm0
mulsd  %xmm10,%xmm0
movapd %xmm4,%xmm6
mulsd  %xmm0,%xmm6
movapd 0x10(%rsp),%xmm5
addsd  %xmm6,%xmm5
movapd %xmm5,0x10(%rsp)
divsd  %xmm5,%xmm6
andpd  %xmm8,%xmm6
ucomisd %xmm6,%xmm14
movsd  0x30(%rsp),%xmm5
addsd  %xmm0,%xmm5
ja     1863 <bessik+0x6e3>
movapd %xmm8,%xmm11
movsd  %xmm5,0x30(%rsp)
add    $0x1,%ecx
add    $0x2,%eax
cmp    $0x4e20,%eax
jne    1770 <bessik+0x5f0>
lea    0x884(%rip),%rdi
call   1040 <nrerror@plt>
movsd  0x30(%rsp),%xmm5
movapd 0x70(%rsp),%xmm2
mulsd  %xmm5,%xmm2
movsd  0x8(%rsp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x7b9(%rip),%xmm0
divsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movapd %xmm2,0x70(%rsp)
jb     1899 <bessik+0x719>
sqrtsd %xmm0,%xmm0
jmp    189e <bessik+0x71e>
call   10a0 <sqrt@plt>
movsd  %xmm0,0x30(%rsp)
movapd 0x40(%rsp),%xmm0
xorpd  0x7ae(%rip),%xmm0
call   1080 <exp@plt>
movapd %xmm0,%xmm4
mulsd  0x30(%rsp),%xmm4
movsd  0x28(%rsp),%xmm8
movsd  0x8(%rsp),%xmm0
addsd  %xmm8,%xmm0
addsd  0x725(%rip),%xmm0
divsd  0x10(%rsp),%xmm4
subsd  0x70(%rsp),%xmm0
mulsd  %xmm4,%xmm0
movsd  0x58(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movapd %xmm0,%xmm7
movsd  0x88(%rsp),%xmm2
movapd %xmm1,%xmm0
mulsd  %xmm8,%xmm0
mulsd  %xmm4,%xmm0
subsd  %xmm7,%xmm0
movsd  0xa0(%rsp),%xmm3
mulsd  %xmm4,%xmm3
subsd  %xmm0,%xmm3
divsd  %xmm3,%xmm1
movsd  0x68(%rsp),%xmm5
mulsd  %xmm1,%xmm5
mulsd  0x6d6(%rip),%xmm1
movsd  0xa8(%rsp),%xmm3
divsd  %xmm3,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movss  %xmm0,0x0(%r13)
divsd  %xmm3,%xmm5
xorps  %xmm0,%xmm0
cvtsd2ss %xmm5,%xmm0
movss  %xmm0,(%r12)
test   %ebx,%ebx
jle    1980 <bessik+0x800>
lea    -0x1(%rbx),%ecx
mov    %ebx,%eax
and    $0x3,%eax
cmp    $0x3,%ecx
jae    198d <bessik+0x80d>
mov    $0x1,%ecx
jmp    1a10 <bessik+0x890>
xorpd  0x6c8(%rip),%xmm7
jmp    1a54 <bessik+0x8d4>
and    $0xfffffffc,%ebx
mov    $0x1,%ecx
cs nopw 0x0(%rax,%rax,1)
nop
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
addsd  %xmm8,%xmm0
mulsd  %xmm2,%xmm0
mulsd  %xmm7,%xmm0
addsd  %xmm4,%xmm0
lea    0x1(%rcx),%edx
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
addsd  %xmm8,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm7,%xmm1
lea    0x2(%rcx),%edx
xorps  %xmm4,%xmm4
cvtsi2sd %edx,%xmm4
addsd  %xmm8,%xmm4
mulsd  %xmm2,%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm0,%xmm4
lea    0x3(%rcx),%edx
xorps  %xmm7,%xmm7
cvtsi2sd %edx,%xmm7
addsd  %xmm8,%xmm7
mulsd  %xmm2,%xmm7
mulsd  %xmm4,%xmm7
addsd  %xmm1,%xmm7
add    $0x4,%ecx
cmp    %ebx,%edx
jne    19a0 <bessik+0x820>
movapd %xmm4,%xmm0
test   %eax,%eax
je     1a48 <bessik+0x8c8>
nopl   0x0(%rax,%rax,1)
movapd %xmm7,%xmm0
xorps  %xmm7,%xmm7
cvtsi2sd %ecx,%xmm7
addsd  %xmm8,%xmm7
mulsd  %xmm2,%xmm7
mulsd  %xmm0,%xmm7
addsd  %xmm4,%xmm7
add    $0x1,%ecx
movapd %xmm0,%xmm4
add    $0xffffffff,%eax
jne    1a20 <bessik+0x8a0>
xorpd  0x600(%rip),%xmm7
movapd %xmm0,%xmm4
xorps  %xmm0,%xmm0
cvtsd2ss %xmm4,%xmm0
movss  %xmm0,(%r15)
movsd  0x60(%rsp),%xmm0
mulsd  %xmm4,%xmm0
addsd  %xmm7,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14)
add    $0xd0,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

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

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