double bessel_J0(double x) {
  int k;
  double w, t, y, v, theta;
  const static double a[8] = {-2.3655394e-12,         4.70889868e-10,
                              -6.78167892231e-8,      6.7816840038636e-6,
                              -4.340277777716935e-4,  0.0156249999999992397,
                              -0.2499999999999999638, 0.9999999999999999997};
  const static double b[65] = {
      6.26681117e-11,         -2.2270614428e-9,       6.62981656302e-8,
      -1.6268486502196e-6,    3.21978384111685e-5,    -5.00523773331583e-4,
      0.0059060313537449816,  -0.0505265323740109701, 0.2936432097610503985,
      -1.0482565081091638637, 1.9181123286040428113,  -1.13191994752217001,
      -0.1965480952704682,    4.57457332e-11,         -1.5814772025e-9,
      4.55487446311e-8,       -1.0735201286233e-6,    2.02015179970014e-5,
      -2.942392368203808e-4,  0.0031801987726150648,  -0.0239875209742846362,
      0.1141447698973777641,  -0.2766726722823530233, 0.1088620480970941648,
      0.5136514645381999197,  -0.2100594022073706033, 3.31366618e-11,
      -1.1119090229e-9,       3.08823040363e-8,       -6.956602653104e-7,
      1.23499947481762e-5,    -1.66295194539618e-4,   0.0016048663165678412,
      -0.0100785479932760966, 0.0328996815223415274,  -0.0056168761733860688,
      -0.2341096400274429386, 0.2551729256776404262,  0.2288438186148935667,
      2.38007203e-11,         -7.731046439e-10,       2.06237001152e-8,
      -4.412291442285e-7,     7.3107766249655e-6,     -8.91749801028666e-5,
      7.34165451384135e-4,    -0.0033303085445352071, 0.0015425853045205717,
      0.0521100583113136379,  -0.1334447768979217815, -0.1401330292364750968,
      0.2685616168804818919,  1.6935595e-11,          -5.308092192e-10,
      1.35323005576e-8,       -2.726650587978e-7,     4.151324014176e-6,
      -4.43353052220157e-5,   2.815740758993879e-4,   -4.393235121629007e-4,
      -0.0067573531105799347, 0.0369141914660130814,  0.0081673361942996237,
      -0.257338128589888186,  0.0459580257102978932};
  const static double c[70] = {
      -3.009451757e-11,        -1.4958003844e-10,       5.06854544776e-9,
      1.863564222012e-8,       -6.0304249068078e-7,     -1.47686259937403e-6,
      4.714331342682714e-5,    6.286305481740818e-5,    -0.00214137170594124344,
      -8.9157336676889788e-4,  0.04508258728666024989,  -0.00490362805828762224,
      -0.27312196367405374426, 0.04193925184293450356,  -7.1245356e-12,
      -4.1170814825e-10,       1.38012624364e-9,        5.704447670683e-8,
      -1.9026363528842e-7,     -5.33925032409729e-6,    1.736064885538091e-5,
      3.0692619152608375e-4,   -9.2598938200644367e-4,  -0.00917934265960017663,
      0.02287952522866389076,  0.10545197546252853195,  -0.16126443075752985095,
      -0.19392874768742235538, 2.128344556e-11,         -3.1053910272e-10,
      -3.34979293158e-9,       4.50723289505e-8,        3.6437959146427e-7,
      -4.46421436266678e-6,    -2.523429344576552e-5,   2.7519882931758163e-4,
      9.7185076358599358e-4,   -0.00898326746345390692, -0.01665959196063987584,
      0.11456933464891967814,  0.07885001422733148815,  -0.23664819446234712621,
      3.035295055e-11,         5.486066835e-11,         -5.01026824811e-9,
      -5.0124684786e-9,        5.8012340163034e-7,      1.6788922416169e-7,
      -4.373270270147275e-5,   1.183898532719802e-5,    0.00189863342862291449,
      -0.0011375924956163613,  -0.03846797195329871681, 0.02389746880951420335,
      0.22837862066532347461,  -0.06765394811166522844, 1.279875977e-11,
      3.5925958103e-10,        -2.28037105967e-9,       -4.852770517176e-8,
      2.8696428000189e-7,      4.40131125178642e-6,     -2.366617753349105e-5,
      -2.4412456252884129e-4,  0.00113028178539430542,  0.0070847051391978908,
      -0.02526914792327618386, -0.08006137953480093426, 0.16548380461475971846,
      0.14688405470042110229};
  const static double d[52] = {
      1.059601355592185731e-14,  -2.71150591218550377e-13,
      8.6514809056201638e-12,    -4.6264028554286627e-10,
      5.0815403835647104e-8,     -1.76722552048141208e-5,
      0.16286750396763997378,    2.949651820598278873e-13,
      -8.818215611676125741e-12, 3.571119876162253451e-10,
      -2.63192412099371706e-8,   4.709502795656698909e-6,
      -0.005208333333333283282,  7.18344107717531977e-15,
      -2.51623725588410308e-13,  8.6017784918920604e-12,
      -4.6256876614290359e-10,   5.0815343220437937e-8,
      -1.7672255176494197e-5,    0.16286750396763433767,
      2.2327570859680094777e-13, -8.464594853517051292e-12,
      3.563766464349055183e-10,  -2.631843986737892965e-8,
      4.70950234228865941e-6,    -0.0052083333332278466225,
      5.15413392842889366e-15,   -2.27740238380640162e-13,
      8.4827767197609014e-12,    -4.6224753682737618e-10,
      5.0814848128929134e-8,     -1.7672254763876748e-5,
      0.16286750396748926663,    1.7316195320192170887e-13,
      -7.971122772293919646e-12, 3.544039469911895749e-10,
      -2.631443902081701081e-8,  4.709498228695400603e-6,
      -0.005208333331514365361,  3.84653681453798517e-15,
      -2.04464520778789011e-13,  8.3089298605177838e-12,
      -4.6155016158412096e-10,   5.081326369646665e-8,
      -1.76722528311426167e-5,   0.1628675039665006593,
      1.3797879972460878797e-13, -7.448089381011684812e-12,
      3.51273379710695978e-10,   -2.630500895563592722e-8,
      4.709483934775839193e-6,   -0.0052083333227940760113};
  w = fabs(x);
  if (w < 1) {
    t = w * w;
    y = ((((((a[0] * t + a[1]) * t + a[2]) * t + a[3]) * t + a[4]) * t + a[5]) *
             t +
         a[6]) *
            t +
        a[7];
  } else if (w < 8.5) {
    t = w * w * 0.0625;
    k = (int)t;
    t -= k + 0.5;
    k *= 13;
    y = (((((((((((b[k] * t + b[k + 1]) * t + b[k + 2]) * t + b[k + 3]) * t +
                b[k + 4]) *
                   t +
               b[k + 5]) *
                  t +
              b[k + 6]) *
                 t +
             b[k + 7]) *
                t +
            b[k + 8]) *
               t +
           b[k + 9]) *
              t +
          b[k + 10]) *
             t +
         b[k + 11]) *
            t +
        b[k + 12];
  } else if (w < 12.5) {
    k = (int)w;
    t = w - (k + 0.5);
    k = 14 * (k - 8);
    y = ((((((((((((c[k] * t + c[k + 1]) * t + c[k + 2]) * t + c[k + 3]) * t +
                 c[k + 4]) *
                    t +
                c[k + 5]) *
                   t +
               c[k + 6]) *
                  t +
              c[k + 7]) *
                 t +
             c[k + 8]) *
                t +
            c[k + 9]) *
               t +
           c[k + 10]) *
              t +
          c[k + 11]) *
             t +
         c[k + 12]) *
            t +
        c[k + 13];
  } else {
    v = 24 / w;
    t = v * v;
    k = 13 * ((int)t);
    y = ((((((d[k] * t + d[k + 1]) * t + d[k + 2]) * t + d[k + 3]) * t +
           d[k + 4]) *
              t +
          d[k + 5]) *
             t +
         d[k + 6]) *
        sqrt(v);
    theta = (((((d[k + 7] * t + d[k + 8]) * t + d[k + 9]) * t + d[k + 10]) * t +
              d[k + 11]) *
                 t +
             d[k + 12]) *
                v -
            0.78539816339744830962;
    y *= cos(w + theta);
  }
  return y;
}


x86 assembly (clang, -O0):
<bessel_J0>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
movaps 0xf07(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xeb6(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    1209 <bessel_J0+0xe9>
movsd  -0x18(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xee4(%rip),%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0xedf(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0xed2(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0xec5(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0xeb8(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0xeab(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0xe9e(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
movsd  0xe91(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1855 <bessel_J0+0x735>
movsd  0xdf7(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    1417 <bessel_J0+0x2f7>
movsd  -0x18(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  0xe02(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
cvttsd2si -0x20(%rbp),%eax
mov    %eax,-0xc(%rbp)
cvtsi2sdl -0xc(%rbp),%xmm1
movsd  0xddc(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  -0x20(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
imul   $0xd,-0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0xe20(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xe06(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0xde4(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0xdc2(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0xda0(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0xd7e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0xd5c(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xd3a(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xd18(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x9,%eax
movslq %eax,%rcx
lea    0xcf6(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xa,%eax
movslq %eax,%rcx
lea    0xcd4(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xb,%eax
movslq %eax,%rcx
lea    0xcb2(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xc,%eax
movslq %eax,%rcx
lea    0xc90(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1850 <bessel_J0+0x730>
movsd  0xbf1(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    1631 <bessel_J0+0x511>
cvttsd2si -0x18(%rbp),%eax
mov    %eax,-0xc(%rbp)
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0xc(%rbp),%xmm1
movsd  0xbe4(%rip),%xmm2
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x8,%eax
imul   $0xe,%eax,%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0xe38(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xe1e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0xdfc(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0xdda(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0xdb8(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0xd96(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0xd74(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xd52(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xd30(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x9,%eax
movslq %eax,%rcx
lea    0xd0e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xa,%eax
movslq %eax,%rcx
lea    0xcec(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xb,%eax
movslq %eax,%rcx
lea    0xcca(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xc,%eax
movslq %eax,%rcx
lea    0xca8(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xd,%eax
movslq %eax,%rcx
lea    0xc86(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    184b <bessel_J0+0x72b>
movsd  0x9e7(%rip),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
cvttsd2si -0x20(%rbp),%eax
imul   $0xd,%eax,%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0xe68(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xe4e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0xe2c(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0xe0a(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0xde8(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0xdc6(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0xda4(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1040 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xd67(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xd4d(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x9,%eax
movslq %eax,%rcx
lea    0xd2b(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xa,%eax
movslq %eax,%rcx
lea    0xd09(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xb,%eax
movslq %eax,%rcx
lea    0xce7(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xc,%eax
movslq %eax,%rcx
lea    0xcc5(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x7ef(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x18(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
call   1030 <cos@plt>
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1850 <bessel_J0+0x730>
jmp    1855 <bessel_J0+0x735>
movsd  -0x28(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bessel_J0>:
push   %r14
push   %rbx
sub    $0x38,%rsp
movapd 0xed1(%rip),%xmm2
andpd  %xmm0,%xmm2
movsd  0xed5(%rip),%xmm1
ucomisd %xmm2,%xmm1
jbe    11a6 <bessel_J0+0x86>
mulsd  %xmm0,%xmm0
movsd  0xefb(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xef7(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xef3(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xeef(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xeeb(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xee7(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xee3(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xe6f(%rip),%xmm1
jmp    1268 <bessel_J0+0x148>
movsd  0xe6a(%rip),%xmm1
ucomisd %xmm2,%xmm1
jbe    1274 <bessel_J0+0x154>
mulsd  %xmm0,%xmm0
mulsd  0xe7c(%rip),%xmm0
cvttsd2si %xmm0,%eax
cvttpd2dq %xmm0,%xmm1
cvtdq2pd %xmm1,%xmm1
addsd  0xe60(%rip),%xmm1
subsd  %xmm1,%xmm0
lea    (%rax,%rax,2),%ecx
lea    (%rax,%rcx,4),%eax
cltq
lea    0xe95(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x8(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x10(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x18(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x20(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x28(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x30(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x38(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x40(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x48(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x50(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x58(%rcx,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  0x60(%rcx,%rax,8),%xmm1
movapd %xmm1,%xmm0
add    $0x38,%rsp
pop    %rbx
pop    %r14
ret
movsd  0xda4(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    1380 <bessel_J0+0x260>
cvttsd2si %xmm2,%ecx
cvttpd2dq %xmm2,%xmm0
cvtdq2pd %xmm0,%xmm0
addsd  0xd9e(%rip),%xmm0
subsd  %xmm0,%xmm2
mov    %ecx,%eax
shl    $0x4,%eax
sub    %ecx,%eax
sub    %ecx,%eax
lea    -0x70(%rax),%ecx
movslq %ecx,%rdx
lea    0xfdc(%rip),%rcx
lea    -0x6f(%rax),%esi
movslq %esi,%rsi
movsd  (%rcx,%rdx,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rsi,8),%xmm0
lea    -0x6e(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x6d(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x6c(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x6b(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x6a(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x69(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x68(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x67(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x66(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x65(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
lea    -0x64(%rax),%edx
movslq %edx,%rdx
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rdx,8),%xmm0
add    $0xffffff9d,%eax
cltq
mulsd  %xmm2,%xmm0
addsd  (%rcx,%rax,8),%xmm0
jmp    126c <bessel_J0+0x14c>
movsd  0xca0(%rip),%xmm3
divsd  %xmm2,%xmm3
movapd %xmm3,%xmm4
mulsd  %xmm3,%xmm4
cvttsd2si %xmm4,%eax
lea    (%rax,%rax,2),%ecx
lea    (%rax,%rcx,4),%eax
movslq %eax,%rbx
lea    0x1118(%rip),%r14
movsd  (%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x8(%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x10(%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x18(%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x20(%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x28(%r14,%rbx,8),%xmm0
mulsd  %xmm4,%xmm0
addsd  0x30(%r14,%rbx,8),%xmm0
movsd  %xmm0,0x8(%rsp)
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm3
jb     1409 <bessel_J0+0x2e9>
xorps  %xmm0,%xmm0
sqrtsd %xmm3,%xmm0
jmp    1436 <bessel_J0+0x316>
movapd %xmm3,%xmm0
movapd %xmm2,0x20(%rsp)
movsd  %xmm3,0x18(%rsp)
movsd  %xmm4,0x10(%rsp)
call   1040 <sqrt@plt>
movsd  0x10(%rsp),%xmm4
movsd  0x18(%rsp),%xmm3
movapd 0x20(%rsp),%xmm2
movsd  0x38(%r14,%rbx,8),%xmm1
mulsd  %xmm4,%xmm1
addsd  0x40(%r14,%rbx,8),%xmm1
mulsd  %xmm4,%xmm1
addsd  0x48(%r14,%rbx,8),%xmm1
mulsd  %xmm4,%xmm1
addsd  0x50(%r14,%rbx,8),%xmm1
mulsd  %xmm4,%xmm1
addsd  0x58(%r14,%rbx,8),%xmm1
movsd  0x8(%rsp),%xmm5
mulsd  %xmm0,%xmm5
movsd  %xmm5,0x8(%rsp)
mulsd  %xmm4,%xmm1
addsd  0x60(%r14,%rbx,8),%xmm1
mulsd  %xmm3,%xmm1
addsd  0xba0(%rip),%xmm1
addsd  %xmm1,%xmm2
movapd %xmm2,%xmm0
call   1030 <cos@plt>
mulsd  0x8(%rsp),%xmm0
jmp    126c <bessel_J0+0x14c>

LLVM IR (-O0):
@bessel_J0.a = internal constant [8 x double] [double 0xBD84CEB89F43BD96, double 0x3E002DFDB78F30E4, double 0xBE72345592ACB3AD, double 0x3EDC71C71AC2FA6F, double 0xBF3C71C71C7010B1, double 0x3F8FFFFFFFFFFE4A, double 0xBFCFFFFFFFFFFFFF, double 1.000000e+00]
@bessel_J0.b = internal constant [65 x double] [double 0x3DD139E0568733E8, double 0xBE23215C22AF8411, double 0x3E71CBF9AA070B4C, double 0xBEBB4B4301EEACCA, double 0x3F00E1854DC75642, double 0xBF4066B29E60D189, double 0x3F7830EC38373C5D, double 0xBFA9DE9D1840D9E3, double 0x3FD2CB0CE3A76F7C, double 0xBFF0C5A89DC25E48, double 0x3FFEB0968D968A52, double 0xBFF21C581744C39C, double 0xBFC9287CECA38D6B, double 0x3DC92623BC66FD14, double 0xBE1B2B6908F3B1CE, double 0x3E68742BFAB214EB, double 0xBEB202BBDD33E1C6, double 0x3EF52ECDBEFB9D27, double 0xBF334883E63B60BD, double 0x3F6A0D5C372422A1, double 0xBF98902F4862FC90, double 0x3FBD389775B7FB98, double 0xBFD1B5014BC99392, double 0x3FBBDE62185A43E5, double 0x3FE06FD532377D85, double 0xBFCAE339FB5956FB, double 0x3DC237920FD740E3, double 0xBE131A3A43EABD30, double 0x3E60946E79E683A3, double 0xBEA757AD19F41BAC, double 0x3EE9E65A5A83D3ED, double 0xBF25CBF0D8144417, double 0x3F5A4B4C1605E98F, double 0xBF84A40FD02DA4F2, double 0x3FA0D83A205FE229, double 0xBF7701B8B786A7B8, double 0xBFCDF74DFFCC5048, double 0x3FD054C0D2A70BF3, double 0x3FCD4AC1166BDE60, double 0x3DBA2B4EA424E00B, double 0xBE0A904CE4A1C1DC, double 0x3E5624FFE09D81D5, double 0xBE9D9C424C621414, double 0x3EDEA9E2FA0FEF2A, double 0xBF17606E7E1E82A7, double 0x3F480EA04D410F0F, double 0xBF6B4829C9198B13, double 0x3F5946125BCA0833, double 0x3FAAAE2B687ABFDD, double 0xBFC114B7EC4C9E9C, double 0xBFC1EFE10CD47D41, double 0x3FD1301D105D9A71, double 0x3DB29EF23AB3746A, double 0xBE023D0C19D4624B, double 0x3E4D0F75FDFD483A, double 0xBE924C599C4CB7EF, double 0x3ED16973418D5952, double 0xBF073E957CE69D12, double 0x3F32740772881ACD, double 0xBF3CCAA01DFA7EFF, double 0xBF7BAD9929E122A8, double 0x3FA2E66ABA35A975, double 0x3F80BA094ECCB4AD, double 0xBFD0783A5793ACA5, double 0x3FA787CF72D433A9]
@bessel_J0.c = internal constant [70 x double] [double 0xBDC08B6D43D1598E, double 0xBDE48EE135F46D18, double 0x3E35C4ECB63CCB58, double 0x3E540286BD6EF14A, double 0xBEA43C18760A3174, double 0xBEB8C71399C37E2C, double 0x3F08B777EA4708DC, double 0x3F107AAB0EEAC33C, double 0xBF618AC82E42556A, double 0xBF4D370F39E38EF0, double 0x3FA715109C07D19F, double 0xBF7415D3A24603A5, double 0xBFD17AD48B7328BA, double 0x3FA5790FC62B10A7, double 0xBD9F5583936DCE6A, double 0xBDFC4AD8A9BD4208, double 0x3E17B5DC0257594A, double 0x3E6EA0221814B286, double 0xBE898968A27E58C7, double 0xBED664F9F4282B5F, double 0x3EF23436B48400E5, double 0x3F341D5DF473B1DC, double 0xBF4E57C30E5B4A0B, double 0xBF82CC9E842C90BA, double 0x3F976DBAF26BA424, double 0x3FBAFEE691E8FFE3, double 0xBFC4A450180E4A75, double 0xBFC8D2A83E892DF2, double 0x3DB766C1E1408657, double 0xBDF5570FC98C1578, double 0xBE2CC645C6598E16, double 0x3E6832B197BB7D8C, double 0x3E9873FE6415C0EC, double 0xBED2B969E670D51F, double 0xBEFA75C770FF4EAE, double 0x3F320911F8C8F751, double 0x3F4FD8799F834CE7, double 0xBF8265D1BFBBEA42, double 0xBF910F364A8AE890, double 0x3FBD546A79710C05, double 0x3FB42F83B8654106, double 0xBFCE4A7CEFEFC5FA, double 0x3DC0AFCC4B56C288, double 0x3DCE28F3E261EF0C, double 0xBE3584D9237184AE, double 0xBE35874472C2453E, double 0x3EA37738D9ED2967, double 0x3E8688A13BAFE2CC, double 0xBF06EDB4391320F1, double 0x3EE8D401C0E8070D, double 0x3F5F1B721EE9ED4D, double 0xBF52A368A4267545, double 0xBFA3B212F2F739D9, double 0x3F987893FBF9E68E, double 0x3FCD3B82B96E7BD5, double 0xBFB151C4E695BAE6, double 0x3DAC250FABE04BFC, double 0x3DF8B02950B49DD1, double 0xBE239696C825A716, double 0xBE6A0D98D5DB7C6C, double 0x3E934202401F0CC5, double 0x3ED275DF3985F294, double 0xBEF8D0D756211D43, double 0xBF2FFF7606409C00, double 0x3F5284BED36D15D0, double 0x3F7D04DA0DFE9976, double 0xBF99E027CFB68924, double 0xBFB47EE70EC64D15, double 0x3FC52E92C46B451F, double 0x3FC2CD18C19EFFE0]
@bessel_J0.d = internal constant [52 x double] [double 0x3D07DC2F9A25ECA7, double 0xBD53149D63F1F825, double 0x3DA30659CC3FC657, double 0xBDFFCADA9E198DFB, double 0x3E6B4804138ECC30, double 0xBEF287DC2163327B, double 0x3FC4D8D7A58FA311, double 0x3D54C19ECE57DD2B, double 0xBDA36436CD269828, double 0x3DF88A616A135D28, double 0xBE5C4293F39F7C35, double 0x3ED3C0CA456E7AB2, double 0xBF7555555555551C, double 0x3D002CF8CAFF0542, double 0xBD51B4D99E00DD26, double 0x3DA2EA5EECD65C32, double 0xBDFFC99885D879D7, double 0x3E6B4801F195A42C, double 0xBEF287DC20E3A7D4, double 0x3FC4D8D7A58FA246, double 0x3D4F6C5AED5BB65C, double 0xBDA29D24ADE6A3BF, double 0x3DF87D71BB6A1AF1, double 0xBE5C425B8FEB369F, double 0x3ED3C0CA258753A5, double 0xBF75555555537A43, double 0x3CF7364FD4FD4581, double 0xBD50069A7921E2F9, double 0x3DA2A760F65E21B0, double 0xBDFFC3F1D5A8EA74, double 0x3E6B47F0863258C8, double 0xBEF287DC19A1644D, double 0x3FC4D8D7A58F8DDC, double 0x3D485ED11DF45A05, double 0xBDA18757DB857086, double 0x3DF85ABD7BCDBE77, double 0xBE5C414207130FD8, double 0x3ED3C0C9040F6B21, double 0xBF7555555535556E, double 0x3CF152C148731742, double 0xBD4CC69C57EE4E11, double 0x3DA24582FD53A5DB, double 0xBDFFB7AD22BEBEBF, double 0x3E6B47B8C6E5D461, double 0xBEF287DBF7A1218F, double 0x3FC4D8D7A58F02B9, double 0x3D436B35CD9541FA, double 0xBDA060E6CD4C9D22, double 0x3DF823AAA976E220, double 0xBE5C3EAA721F503D, double 0x3ED3C0C516370E23, double 0xBF755555549BECBD]
define double @bessel_J0(double %0) {
%2 = alloca double
%3 = alloca i32
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
store double %0, double* %2
%9 = load double, double* %2
%10 = call double @llvm.fabs.f64(double %9)
store double %10, double* %4
%11 = load double, double* %4
%12 = fcmp olt double %11, 1.000000e+00
br i1 %12, label %13, label %39
13: ; preds = %1
%14 = load double, double* %4
%15 = load double, double* %4
%16 = fmul double %14, %15
store double %16, double* %5
%17 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @bessel_J0.a, i64 0, i64 0)
%18 = load double, double* %5
%19 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @bessel_J0.a, i64 0, i64 1)
%20 = call double @llvm.fmuladd.f64(double %17, double %18, double %19)
%21 = load double, double* %5
%22 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @bessel_J0.a, i64 0, i64 2)
%23 = call double @llvm.fmuladd.f64(double %20, double %21, double %22)
%24 = load double, double* %5
%25 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @bessel_J0.a, i64 0, i64 3)
%26 = call double @llvm.fmuladd.f64(double %23, double %24, double %25)
%27 = load double, double* %5
%28 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @bessel_J0.a, i64 0, i64 4)
%29 = call double @llvm.fmuladd.f64(double %26, double %27, double %28)
%30 = load double, double* %5
%31 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @bessel_J0.a, i64 0, i64 5)
%32 = call double @llvm.fmuladd.f64(double %29, double %30, double %31)
%33 = load double, double* %5
%34 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @bessel_J0.a, i64 0, i64 6)
%35 = call double @llvm.fmuladd.f64(double %32, double %33, double %34)
%36 = load double, double* %5
%37 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @bessel_J0.a, i64 0, i64 7)
%38 = call double @llvm.fmuladd.f64(double %35, double %36, double %37)
store double %38, double* %6
br label %361
39: ; preds = %1
%40 = load double, double* %4
%41 = fcmp olt double %40, 8.500000e+00
br i1 %41, label %42, label %144
42: ; preds = %39
%43 = load double, double* %4
%44 = load double, double* %4
%45 = fmul double %43, %44
%46 = fmul double %45, 6.250000e-02
store double %46, double* %5
%47 = load double, double* %5
%48 = fptosi double %47 to i32
store i32 %48, i32* %3
%49 = load i32, i32* %3
%50 = sitofp i32 %49 to double
%51 = fadd double %50, 5.000000e-01
%52 = load double, double* %5
%53 = fsub double %52, %51
store double %53, double* %5
%54 = load i32, i32* %3
%55 = mul nsw i32 %54, 13
store i32 %55, i32* %3
%56 = load i32, i32* %3
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %57
%59 = load double, double* %58
%60 = load double, double* %5
%61 = load i32, i32* %3
%62 = add nsw i32 %61, 1
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %63
%65 = load double, double* %64
%66 = call double @llvm.fmuladd.f64(double %59, double %60, double %65)
%67 = load double, double* %5
%68 = load i32, i32* %3
%69 = add nsw i32 %68, 2
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %70
%72 = load double, double* %71
%73 = call double @llvm.fmuladd.f64(double %66, double %67, double %72)
%74 = load double, double* %5
%75 = load i32, i32* %3
%76 = add nsw i32 %75, 3
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %77
%79 = load double, double* %78
%80 = call double @llvm.fmuladd.f64(double %73, double %74, double %79)
%81 = load double, double* %5
%82 = load i32, i32* %3
%83 = add nsw i32 %82, 4
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %84
%86 = load double, double* %85
%87 = call double @llvm.fmuladd.f64(double %80, double %81, double %86)
%88 = load double, double* %5
%89 = load i32, i32* %3
%90 = add nsw i32 %89, 5
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %91
%93 = load double, double* %92
%94 = call double @llvm.fmuladd.f64(double %87, double %88, double %93)
%95 = load double, double* %5
%96 = load i32, i32* %3
%97 = add nsw i32 %96, 6
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %98
%100 = load double, double* %99
%101 = call double @llvm.fmuladd.f64(double %94, double %95, double %100)
%102 = load double, double* %5
%103 = load i32, i32* %3
%104 = add nsw i32 %103, 7
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %105
%107 = load double, double* %106
%108 = call double @llvm.fmuladd.f64(double %101, double %102, double %107)
%109 = load double, double* %5
%110 = load i32, i32* %3
%111 = add nsw i32 %110, 8
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %112
%114 = load double, double* %113
%115 = call double @llvm.fmuladd.f64(double %108, double %109, double %114)
%116 = load double, double* %5
%117 = load i32, i32* %3
%118 = add nsw i32 %117, 9
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %119
%121 = load double, double* %120
%122 = call double @llvm.fmuladd.f64(double %115, double %116, double %121)
%123 = load double, double* %5
%124 = load i32, i32* %3
%125 = add nsw i32 %124, 10
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %126
%128 = load double, double* %127
%129 = call double @llvm.fmuladd.f64(double %122, double %123, double %128)
%130 = load double, double* %5
%131 = load i32, i32* %3
%132 = add nsw i32 %131, 11
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %133
%135 = load double, double* %134
%136 = call double @llvm.fmuladd.f64(double %129, double %130, double %135)
%137 = load double, double* %5
%138 = load i32, i32* %3
%139 = add nsw i32 %138, 12
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %140
%142 = load double, double* %141
%143 = call double @llvm.fmuladd.f64(double %136, double %137, double %142)
store double %143, double* %6
br label %360
144: ; preds = %39
%145 = load double, double* %4
%146 = fcmp olt double %145, 1.250000e+01
br i1 %146, label %147, label %253
147: ; preds = %144
%148 = load double, double* %4
%149 = fptosi double %148 to i32
store i32 %149, i32* %3
%150 = load double, double* %4
%151 = load i32, i32* %3
%152 = sitofp i32 %151 to double
%153 = fadd double %152, 5.000000e-01
%154 = fsub double %150, %153
store double %154, double* %5
%155 = load i32, i32* %3
%156 = sub nsw i32 %155, 8
%157 = mul nsw i32 14, %156
store i32 %157, i32* %3
%158 = load i32, i32* %3
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %159
%161 = load double, double* %160
%162 = load double, double* %5
%163 = load i32, i32* %3
%164 = add nsw i32 %163, 1
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %165
%167 = load double, double* %166
%168 = call double @llvm.fmuladd.f64(double %161, double %162, double %167)
%169 = load double, double* %5
%170 = load i32, i32* %3
%171 = add nsw i32 %170, 2
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %172
%174 = load double, double* %173
%175 = call double @llvm.fmuladd.f64(double %168, double %169, double %174)
%176 = load double, double* %5
%177 = load i32, i32* %3
%178 = add nsw i32 %177, 3
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %179
%181 = load double, double* %180
%182 = call double @llvm.fmuladd.f64(double %175, double %176, double %181)
%183 = load double, double* %5
%184 = load i32, i32* %3
%185 = add nsw i32 %184, 4
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %186
%188 = load double, double* %187
%189 = call double @llvm.fmuladd.f64(double %182, double %183, double %188)
%190 = load double, double* %5
%191 = load i32, i32* %3
%192 = add nsw i32 %191, 5
%193 = sext i32 %192 to i64
%194 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %193
%195 = load double, double* %194
%196 = call double @llvm.fmuladd.f64(double %189, double %190, double %195)
%197 = load double, double* %5
%198 = load i32, i32* %3
%199 = add nsw i32 %198, 6
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %200
%202 = load double, double* %201
%203 = call double @llvm.fmuladd.f64(double %196, double %197, double %202)
%204 = load double, double* %5
%205 = load i32, i32* %3
%206 = add nsw i32 %205, 7
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %207
%209 = load double, double* %208
%210 = call double @llvm.fmuladd.f64(double %203, double %204, double %209)
%211 = load double, double* %5
%212 = load i32, i32* %3
%213 = add nsw i32 %212, 8
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %214
%216 = load double, double* %215
%217 = call double @llvm.fmuladd.f64(double %210, double %211, double %216)
%218 = load double, double* %5
%219 = load i32, i32* %3
%220 = add nsw i32 %219, 9
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %221
%223 = load double, double* %222
%224 = call double @llvm.fmuladd.f64(double %217, double %218, double %223)
%225 = load double, double* %5
%226 = load i32, i32* %3
%227 = add nsw i32 %226, 10
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %228
%230 = load double, double* %229
%231 = call double @llvm.fmuladd.f64(double %224, double %225, double %230)
%232 = load double, double* %5
%233 = load i32, i32* %3
%234 = add nsw i32 %233, 11
%235 = sext i32 %234 to i64
%236 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %235
%237 = load double, double* %236
%238 = call double @llvm.fmuladd.f64(double %231, double %232, double %237)
%239 = load double, double* %5
%240 = load i32, i32* %3
%241 = add nsw i32 %240, 12
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %242
%244 = load double, double* %243
%245 = call double @llvm.fmuladd.f64(double %238, double %239, double %244)
%246 = load double, double* %5
%247 = load i32, i32* %3
%248 = add nsw i32 %247, 13
%249 = sext i32 %248 to i64
%250 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %249
%251 = load double, double* %250
%252 = call double @llvm.fmuladd.f64(double %245, double %246, double %251)
store double %252, double* %6
br label %359
253: ; preds = %144
%254 = load double, double* %4
%255 = fdiv double 2.400000e+01, %254
store double %255, double* %7
%256 = load double, double* %7
%257 = load double, double* %7
%258 = fmul double %256, %257
store double %258, double* %5
%259 = load double, double* %5
%260 = fptosi double %259 to i32
%261 = mul nsw i32 13, %260
store i32 %261, i32* %3
%262 = load i32, i32* %3
%263 = sext i32 %262 to i64
%264 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %263
%265 = load double, double* %264
%266 = load double, double* %5
%267 = load i32, i32* %3
%268 = add nsw i32 %267, 1
%269 = sext i32 %268 to i64
%270 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %269
%271 = load double, double* %270
%272 = call double @llvm.fmuladd.f64(double %265, double %266, double %271)
%273 = load double, double* %5
%274 = load i32, i32* %3
%275 = add nsw i32 %274, 2
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %276
%278 = load double, double* %277
%279 = call double @llvm.fmuladd.f64(double %272, double %273, double %278)
%280 = load double, double* %5
%281 = load i32, i32* %3
%282 = add nsw i32 %281, 3
%283 = sext i32 %282 to i64
%284 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %283
%285 = load double, double* %284
%286 = call double @llvm.fmuladd.f64(double %279, double %280, double %285)
%287 = load double, double* %5
%288 = load i32, i32* %3
%289 = add nsw i32 %288, 4
%290 = sext i32 %289 to i64
%291 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %290
%292 = load double, double* %291
%293 = call double @llvm.fmuladd.f64(double %286, double %287, double %292)
%294 = load double, double* %5
%295 = load i32, i32* %3
%296 = add nsw i32 %295, 5
%297 = sext i32 %296 to i64
%298 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %297
%299 = load double, double* %298
%300 = call double @llvm.fmuladd.f64(double %293, double %294, double %299)
%301 = load double, double* %5
%302 = load i32, i32* %3
%303 = add nsw i32 %302, 6
%304 = sext i32 %303 to i64
%305 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %304
%306 = load double, double* %305
%307 = call double @llvm.fmuladd.f64(double %300, double %301, double %306)
%308 = load double, double* %7
%309 = call double @sqrt(double %308)
%310 = fmul double %307, %309
store double %310, double* %6
%311 = load i32, i32* %3
%312 = add nsw i32 %311, 7
%313 = sext i32 %312 to i64
%314 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %313
%315 = load double, double* %314
%316 = load double, double* %5
%317 = load i32, i32* %3
%318 = add nsw i32 %317, 8
%319 = sext i32 %318 to i64
%320 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %319
%321 = load double, double* %320
%322 = call double @llvm.fmuladd.f64(double %315, double %316, double %321)
%323 = load double, double* %5
%324 = load i32, i32* %3
%325 = add nsw i32 %324, 9
%326 = sext i32 %325 to i64
%327 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %326
%328 = load double, double* %327
%329 = call double @llvm.fmuladd.f64(double %322, double %323, double %328)
%330 = load double, double* %5
%331 = load i32, i32* %3
%332 = add nsw i32 %331, 10
%333 = sext i32 %332 to i64
%334 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %333
%335 = load double, double* %334
%336 = call double @llvm.fmuladd.f64(double %329, double %330, double %335)
%337 = load double, double* %5
%338 = load i32, i32* %3
%339 = add nsw i32 %338, 11
%340 = sext i32 %339 to i64
%341 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %340
%342 = load double, double* %341
%343 = call double @llvm.fmuladd.f64(double %336, double %337, double %342)
%344 = load double, double* %5
%345 = load i32, i32* %3
%346 = add nsw i32 %345, 12
%347 = sext i32 %346 to i64
%348 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %347
%349 = load double, double* %348
%350 = call double @llvm.fmuladd.f64(double %343, double %344, double %349)
%351 = load double, double* %7
%352 = call double @llvm.fmuladd.f64(double %350, double %351, double 0xBFE921FB54442D18)
store double %352, double* %8
%353 = load double, double* %4
%354 = load double, double* %8
%355 = fadd double %353, %354
%356 = call double @cos(double %355)
%357 = load double, double* %6
%358 = fmul double %357, %356
store double %358, double* %6
br label %359
359: ; preds = %253, %147
br label %360
360: ; preds = %359, %42
br label %361
361: ; preds = %360, %13
%362 = load double, double* %6
ret double %362
}

LLVM IR (-O2):
@bessel_J0.b = internal unnamed_addr constant [65 x double] [double 0x3DD139E0568733E8, double 0xBE23215C22AF8411, double 0x3E71CBF9AA070B4C, double 0xBEBB4B4301EEACCA, double 0x3F00E1854DC75642, double 0xBF4066B29E60D189, double 0x3F7830EC38373C5D, double 0xBFA9DE9D1840D9E3, double 0x3FD2CB0CE3A76F7C, double 0xBFF0C5A89DC25E48, double 0x3FFEB0968D968A52, double 0xBFF21C581744C39C, double 0xBFC9287CECA38D6B, double 0x3DC92623BC66FD14, double 0xBE1B2B6908F3B1CE, double 0x3E68742BFAB214EB, double 0xBEB202BBDD33E1C6, double 0x3EF52ECDBEFB9D27, double 0xBF334883E63B60BD, double 0x3F6A0D5C372422A1, double 0xBF98902F4862FC90, double 0x3FBD389775B7FB98, double 0xBFD1B5014BC99392, double 0x3FBBDE62185A43E5, double 0x3FE06FD532377D85, double 0xBFCAE339FB5956FB, double 0x3DC237920FD740E3, double 0xBE131A3A43EABD30, double 0x3E60946E79E683A3, double 0xBEA757AD19F41BAC, double 0x3EE9E65A5A83D3ED, double 0xBF25CBF0D8144417, double 0x3F5A4B4C1605E98F, double 0xBF84A40FD02DA4F2, double 0x3FA0D83A205FE229, double 0xBF7701B8B786A7B8, double 0xBFCDF74DFFCC5048, double 0x3FD054C0D2A70BF3, double 0x3FCD4AC1166BDE60, double 0x3DBA2B4EA424E00B, double 0xBE0A904CE4A1C1DC, double 0x3E5624FFE09D81D5, double 0xBE9D9C424C621414, double 0x3EDEA9E2FA0FEF2A, double 0xBF17606E7E1E82A7, double 0x3F480EA04D410F0F, double 0xBF6B4829C9198B13, double 0x3F5946125BCA0833, double 0x3FAAAE2B687ABFDD, double 0xBFC114B7EC4C9E9C, double 0xBFC1EFE10CD47D41, double 0x3FD1301D105D9A71, double 0x3DB29EF23AB3746A, double 0xBE023D0C19D4624B, double 0x3E4D0F75FDFD483A, double 0xBE924C599C4CB7EF, double 0x3ED16973418D5952, double 0xBF073E957CE69D12, double 0x3F32740772881ACD, double 0xBF3CCAA01DFA7EFF, double 0xBF7BAD9929E122A8, double 0x3FA2E66ABA35A975, double 0x3F80BA094ECCB4AD, double 0xBFD0783A5793ACA5, double 0x3FA787CF72D433A9]
@bessel_J0.c = internal unnamed_addr constant [70 x double] [double 0xBDC08B6D43D1598E, double 0xBDE48EE135F46D18, double 0x3E35C4ECB63CCB58, double 0x3E540286BD6EF14A, double 0xBEA43C18760A3174, double 0xBEB8C71399C37E2C, double 0x3F08B777EA4708DC, double 0x3F107AAB0EEAC33C, double 0xBF618AC82E42556A, double 0xBF4D370F39E38EF0, double 0x3FA715109C07D19F, double 0xBF7415D3A24603A5, double 0xBFD17AD48B7328BA, double 0x3FA5790FC62B10A7, double 0xBD9F5583936DCE6A, double 0xBDFC4AD8A9BD4208, double 0x3E17B5DC0257594A, double 0x3E6EA0221814B286, double 0xBE898968A27E58C7, double 0xBED664F9F4282B5F, double 0x3EF23436B48400E5, double 0x3F341D5DF473B1DC, double 0xBF4E57C30E5B4A0B, double 0xBF82CC9E842C90BA, double 0x3F976DBAF26BA424, double 0x3FBAFEE691E8FFE3, double 0xBFC4A450180E4A75, double 0xBFC8D2A83E892DF2, double 0x3DB766C1E1408657, double 0xBDF5570FC98C1578, double 0xBE2CC645C6598E16, double 0x3E6832B197BB7D8C, double 0x3E9873FE6415C0EC, double 0xBED2B969E670D51F, double 0xBEFA75C770FF4EAE, double 0x3F320911F8C8F751, double 0x3F4FD8799F834CE7, double 0xBF8265D1BFBBEA42, double 0xBF910F364A8AE890, double 0x3FBD546A79710C05, double 0x3FB42F83B8654106, double 0xBFCE4A7CEFEFC5FA, double 0x3DC0AFCC4B56C288, double 0x3DCE28F3E261EF0C, double 0xBE3584D9237184AE, double 0xBE35874472C2453E, double 0x3EA37738D9ED2967, double 0x3E8688A13BAFE2CC, double 0xBF06EDB4391320F1, double 0x3EE8D401C0E8070D, double 0x3F5F1B721EE9ED4D, double 0xBF52A368A4267545, double 0xBFA3B212F2F739D9, double 0x3F987893FBF9E68E, double 0x3FCD3B82B96E7BD5, double 0xBFB151C4E695BAE6, double 0x3DAC250FABE04BFC, double 0x3DF8B02950B49DD1, double 0xBE239696C825A716, double 0xBE6A0D98D5DB7C6C, double 0x3E934202401F0CC5, double 0x3ED275DF3985F294, double 0xBEF8D0D756211D43, double 0xBF2FFF7606409C00, double 0x3F5284BED36D15D0, double 0x3F7D04DA0DFE9976, double 0xBF99E027CFB68924, double 0xBFB47EE70EC64D15, double 0x3FC52E92C46B451F, double 0x3FC2CD18C19EFFE0]
@bessel_J0.d = internal unnamed_addr constant [52 x double] [double 0x3D07DC2F9A25ECA7, double 0xBD53149D63F1F825, double 0x3DA30659CC3FC657, double 0xBDFFCADA9E198DFB, double 0x3E6B4804138ECC30, double 0xBEF287DC2163327B, double 0x3FC4D8D7A58FA311, double 0x3D54C19ECE57DD2B, double 0xBDA36436CD269828, double 0x3DF88A616A135D28, double 0xBE5C4293F39F7C35, double 0x3ED3C0CA456E7AB2, double 0xBF7555555555551C, double 0x3D002CF8CAFF0542, double 0xBD51B4D99E00DD26, double 0x3DA2EA5EECD65C32, double 0xBDFFC99885D879D7, double 0x3E6B4801F195A42C, double 0xBEF287DC20E3A7D4, double 0x3FC4D8D7A58FA246, double 0x3D4F6C5AED5BB65C, double 0xBDA29D24ADE6A3BF, double 0x3DF87D71BB6A1AF1, double 0xBE5C425B8FEB369F, double 0x3ED3C0CA258753A5, double 0xBF75555555537A43, double 0x3CF7364FD4FD4581, double 0xBD50069A7921E2F9, double 0x3DA2A760F65E21B0, double 0xBDFFC3F1D5A8EA74, double 0x3E6B47F0863258C8, double 0xBEF287DC19A1644D, double 0x3FC4D8D7A58F8DDC, double 0x3D485ED11DF45A05, double 0xBDA18757DB857086, double 0x3DF85ABD7BCDBE77, double 0xBE5C414207130FD8, double 0x3ED3C0C9040F6B21, double 0xBF7555555535556E, double 0x3CF152C148731742, double 0xBD4CC69C57EE4E11, double 0x3DA24582FD53A5DB, double 0xBDFFB7AD22BEBEBF, double 0x3E6B47B8C6E5D461, double 0xBEF287DBF7A1218F, double 0x3FC4D8D7A58F02B9, double 0x3D436B35CD9541FA, double 0xBDA060E6CD4C9D22, double 0x3DF823AAA976E220, double 0xBE5C3EAA721F503D, double 0x3ED3C0C516370E23, double 0xBF755555549BECBD]
define double @bessel_J0(double %0) {
%2 = tail call double @llvm.fabs.f64(double %0)
%3 = fcmp olt double %2, 1.000000e+00
br i1 %3, label %4, label %13
4: ; preds = %1
%5 = fmul double %0, %0
%6 = tail call double @llvm.fmuladd.f64(double %5, double 0xBD84CEB89F43BD96, double 0x3E002DFDB78F30E4)
%7 = tail call double @llvm.fmuladd.f64(double %6, double %5, double 0xBE72345592ACB3AD)
%8 = tail call double @llvm.fmuladd.f64(double %7, double %5, double 0x3EDC71C71AC2FA6F)
%9 = tail call double @llvm.fmuladd.f64(double %8, double %5, double 0xBF3C71C71C7010B1)
%10 = tail call double @llvm.fmuladd.f64(double %9, double %5, double 0x3F8FFFFFFFFFFE4A)
%11 = tail call double @llvm.fmuladd.f64(double %10, double %5, double 0xBFCFFFFFFFFFFFFF)
%12 = tail call double @llvm.fmuladd.f64(double %11, double %5, double 1.000000e+00)
br label %236
13: ; preds = %1
%14 = fcmp olt double %2, 8.500000e+00
br i1 %14, label %15, label %86
15: ; preds = %13
%16 = fmul double %0, %0
%17 = fmul double %16, 6.250000e-02
%18 = fptosi double %17 to i32
%19 = sitofp i32 %18 to double
%20 = fadd double %19, 5.000000e-01
%21 = fsub double %17, %20
%22 = mul nsw i32 %18, 13
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %23
%25 = load double, double* %24
%26 = add nsw i32 %22, 1
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %27
%29 = load double, double* %28
%30 = tail call double @llvm.fmuladd.f64(double %25, double %21, double %29)
%31 = add nsw i32 %22, 2
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %32
%34 = load double, double* %33
%35 = tail call double @llvm.fmuladd.f64(double %30, double %21, double %34)
%36 = add nsw i32 %22, 3
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %37
%39 = load double, double* %38
%40 = tail call double @llvm.fmuladd.f64(double %35, double %21, double %39)
%41 = add nsw i32 %22, 4
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %42
%44 = load double, double* %43
%45 = tail call double @llvm.fmuladd.f64(double %40, double %21, double %44)
%46 = add nsw i32 %22, 5
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %47
%49 = load double, double* %48
%50 = tail call double @llvm.fmuladd.f64(double %45, double %21, double %49)
%51 = add nsw i32 %22, 6
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %52
%54 = load double, double* %53
%55 = tail call double @llvm.fmuladd.f64(double %50, double %21, double %54)
%56 = add nsw i32 %22, 7
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %57
%59 = load double, double* %58
%60 = tail call double @llvm.fmuladd.f64(double %55, double %21, double %59)
%61 = add nsw i32 %22, 8
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %62
%64 = load double, double* %63
%65 = tail call double @llvm.fmuladd.f64(double %60, double %21, double %64)
%66 = add nsw i32 %22, 9
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %67
%69 = load double, double* %68
%70 = tail call double @llvm.fmuladd.f64(double %65, double %21, double %69)
%71 = add nsw i32 %22, 10
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %72
%74 = load double, double* %73
%75 = tail call double @llvm.fmuladd.f64(double %70, double %21, double %74)
%76 = add nsw i32 %22, 11
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %77
%79 = load double, double* %78
%80 = tail call double @llvm.fmuladd.f64(double %75, double %21, double %79)
%81 = add nsw i32 %22, 12
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J0.b, i64 0, i64 %82
%84 = load double, double* %83
%85 = tail call double @llvm.fmuladd.f64(double %80, double %21, double %84)
br label %236
86: ; preds = %13
%87 = fcmp olt double %2, 1.250000e+01
br i1 %87, label %88, label %163
88: ; preds = %86
%89 = fptosi double %2 to i32
%90 = sitofp i32 %89 to double
%91 = fadd double %90, 5.000000e-01
%92 = fsub double %2, %91
%93 = mul i32 %89, 14
%94 = add i32 %93, -112
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %95
%97 = load double, double* %96
%98 = add i32 %93, -111
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %99
%101 = load double, double* %100
%102 = tail call double @llvm.fmuladd.f64(double %97, double %92, double %101)
%103 = add i32 %93, -110
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %104
%106 = load double, double* %105
%107 = tail call double @llvm.fmuladd.f64(double %102, double %92, double %106)
%108 = add i32 %93, -109
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %109
%111 = load double, double* %110
%112 = tail call double @llvm.fmuladd.f64(double %107, double %92, double %111)
%113 = add i32 %93, -108
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %114
%116 = load double, double* %115
%117 = tail call double @llvm.fmuladd.f64(double %112, double %92, double %116)
%118 = add i32 %93, -107
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %119
%121 = load double, double* %120
%122 = tail call double @llvm.fmuladd.f64(double %117, double %92, double %121)
%123 = add i32 %93, -106
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %124
%126 = load double, double* %125
%127 = tail call double @llvm.fmuladd.f64(double %122, double %92, double %126)
%128 = add i32 %93, -105
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %129
%131 = load double, double* %130
%132 = tail call double @llvm.fmuladd.f64(double %127, double %92, double %131)
%133 = add i32 %93, -104
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %134
%136 = load double, double* %135
%137 = tail call double @llvm.fmuladd.f64(double %132, double %92, double %136)
%138 = add i32 %93, -103
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %139
%141 = load double, double* %140
%142 = tail call double @llvm.fmuladd.f64(double %137, double %92, double %141)
%143 = add i32 %93, -102
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %144
%146 = load double, double* %145
%147 = tail call double @llvm.fmuladd.f64(double %142, double %92, double %146)
%148 = add i32 %93, -101
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %149
%151 = load double, double* %150
%152 = tail call double @llvm.fmuladd.f64(double %147, double %92, double %151)
%153 = add i32 %93, -100
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %154
%156 = load double, double* %155
%157 = tail call double @llvm.fmuladd.f64(double %152, double %92, double %156)
%158 = add i32 %93, -99
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J0.c, i64 0, i64 %159
%161 = load double, double* %160
%162 = tail call double @llvm.fmuladd.f64(double %157, double %92, double %161)
br label %236
163: ; preds = %86
%164 = fdiv double 2.400000e+01, %2
%165 = fmul double %164, %164
%166 = fptosi double %165 to i32
%167 = mul nsw i32 %166, 13
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %168
%170 = load double, double* %169
%171 = add nsw i32 %167, 1
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %172
%174 = load double, double* %173
%175 = tail call double @llvm.fmuladd.f64(double %170, double %165, double %174)
%176 = add nsw i32 %167, 2
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %177
%179 = load double, double* %178
%180 = tail call double @llvm.fmuladd.f64(double %175, double %165, double %179)
%181 = add nsw i32 %167, 3
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %182
%184 = load double, double* %183
%185 = tail call double @llvm.fmuladd.f64(double %180, double %165, double %184)
%186 = add nsw i32 %167, 4
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %187
%189 = load double, double* %188
%190 = tail call double @llvm.fmuladd.f64(double %185, double %165, double %189)
%191 = add nsw i32 %167, 5
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %192
%194 = load double, double* %193
%195 = tail call double @llvm.fmuladd.f64(double %190, double %165, double %194)
%196 = add nsw i32 %167, 6
%197 = sext i32 %196 to i64
%198 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %197
%199 = load double, double* %198
%200 = tail call double @llvm.fmuladd.f64(double %195, double %165, double %199)
%201 = tail call double @sqrt(double %164)
%202 = fmul double %200, %201
%203 = add nsw i32 %167, 7
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %204
%206 = load double, double* %205
%207 = add nsw i32 %167, 8
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %208
%210 = load double, double* %209
%211 = tail call double @llvm.fmuladd.f64(double %206, double %165, double %210)
%212 = add nsw i32 %167, 9
%213 = sext i32 %212 to i64
%214 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %213
%215 = load double, double* %214
%216 = tail call double @llvm.fmuladd.f64(double %211, double %165, double %215)
%217 = add nsw i32 %167, 10
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %218
%220 = load double, double* %219
%221 = tail call double @llvm.fmuladd.f64(double %216, double %165, double %220)
%222 = add nsw i32 %167, 11
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %223
%225 = load double, double* %224
%226 = tail call double @llvm.fmuladd.f64(double %221, double %165, double %225)
%227 = add nsw i32 %167, 12
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J0.d, i64 0, i64 %228
%230 = load double, double* %229
%231 = tail call double @llvm.fmuladd.f64(double %226, double %165, double %230)
%232 = tail call double @llvm.fmuladd.f64(double %231, double %164, double 0xBFE921FB54442D18)
%233 = fadd double %2, %232
%234 = tail call double @cos(double %233)
%235 = fmul double %202, %234
br label %236
236: ; preds = %15, %163, %88, %4
%237 = phi double [ %12, %4 ], [ %85, %15 ], [ %162, %88 ], [ %235, %163 ]
ret double %237
}