double bessel_J1(double x) {
  int k;
  double w, t, y, v, theta;
  const static double a[8] = {-1.4810349e-13,          3.363594618e-11,
                              -5.65140051697e-9,       6.7816840144764e-7,
                              -5.425347222188379e-5,   0.00260416666666662438,
                              -0.06249999999999999799, 0.49999999999999999998};
  const static double b[65] = {
      2.43721316e-12,           -9.400554763e-11,
      3.0605338998e-9,          -8.287270492518e-8,
      1.83020515991344e-6,      -3.219783841164382e-5,
      4.3795830161515318e-4,    -0.00442952351530868999,
      0.03157908273375945955,   -0.14682160488052520107,
      0.39309619054093640008,   -0.4795280821510107028,
      0.1414899934402712514,    1.82119257e-12,
      -6.862117678e-11,         2.1732790836e-9,
      -5.69359291782e-8,        1.20771046483277e-6,
      -2.020151799736374e-5,    2.5745933218048448e-4,
      -0.00238514907946126334,  0.01499220060892984289,
      -0.05707238494868888345,  0.10375225210588234727,
      -0.02721551202427354117,  -0.06420643306727498985,
      1.352611196e-12,          -4.9706947875e-11,
      1.527944986332e-9,        -3.8602878823401e-8,
      7.82618036237845e-7,      -1.23499947484511e-5,
      1.45508295194426686e-4,   -0.001203649737425854162,
      0.006299092495799005109,  -0.016449840761170764763,
      0.002106328565019748701,  0.05852741000686073465,
      -0.031896615709705053191, 9.97982124e-13,
      -3.5702556073e-11,        1.062332772617e-9,
      -2.5779624221725e-8,      4.96382962683556e-7,
      -7.310776625173004e-6,    7.8028107569541842e-5,
      -5.50624088538081113e-4,  0.002081442840335570371,
      -7.71292652260286633e-4,  -0.019541271866742634199,
      0.033361194224480445382,  0.017516628654559387164,
      7.31050661e-13,           -2.5404499912e-11,
      7.29360079088e-10,        -1.6915375004937e-8,
      3.06748319652546e-7,      -4.151324014331739e-6,
      3.8793392054271497e-5,    -2.11180556924525773e-4,
      2.74577195102593786e-4,   0.003378676555289966782,
      -0.013842821799754920148, -0.002041834048574905921,
      0.032167266073736023299};
  const static double c[70] = {
      -1.185964494e-11,        3.9110295657e-10,        1.80385519493e-9,
      -5.575391345723e-8,      -1.8635897017174e-7,     5.42738239401869e-6,
      1.181490114244279e-5,    -3.300031939852107e-4,   -3.7717832892725053e-4,
      0.01070685852970608288,  0.00356629346707622489,  -0.13524776185998074716,
      0.00980725611657523952,  0.27312196367405374425,  -3.029591097e-11,
      9.259293559e-11,         4.96321971223e-9,        -1.518137078639e-8,
      -5.7045127595547e-7,     1.71237271302072e-6,     4.271400348035384e-5,
      -1.2152454198713258e-4,  -0.00184155714921474963, 0.00462994691003219055,
      0.03671737063840232452,  -0.06863857568599167175, -0.21090395092505707655,
      0.16126443075752985095,  -2.19760208e-11,         -2.7659100729e-10,
      3.74295124827e-9,        3.684765777023e-8,       -4.5072801091574e-7,
      -3.27941630669276e-6,    3.5713715545163e-5,      1.7664005411843533e-4,
      -0.00165119297594774104, -0.00485925381792986774, 0.03593306985381680131,
      0.04997877588191962563,  -0.22913866929783936544, -0.07885001422733148814,
      5.16292316e-12,          -3.9445956763e-10,       -6.6220021263e-10,
      5.511286218639e-8,       5.01257940078e-8,        -5.22111059203425e-6,
      -1.34311394455105e-6,    3.0612891890766805e-4,   -7.103391195326182e-5,
      -0.00949316714311443491, 0.00455036998246516948,  0.11540391585989614784,
      -0.04779493761902840455, -0.2283786206653234746,  2.697817493e-11,
      -1.6633326949e-10,       -4.3313486035e-9,        2.508404686362e-8,
      4.8528284780984e-7,      -2.58267851112118e-6,    -3.521049080466759e-5,
      1.6566324273339952e-4,   0.00146474737522491617,  -0.00565140892697147306,
      -0.028338820556793004,   0.07580744376982855057,  0.16012275906960187978,
      -0.16548380461475971845};
  const static double d[52] = {
      -1.272346002224188092e-14, 3.370464692346669075e-13,
      -1.144940314335484869e-11, 6.863141561083429745e-10,
      -9.491933932960924159e-8,  5.301676561445687562e-5,
      0.162867503967639974,      -3.652982212914147794e-13,
      1.151126750560028914e-11,  -5.165585095674343486e-10,
      4.657991250060549892e-8,   -1.186794704692706504e-5,
      0.01562499999999994026,    -8.713069680903981555e-15,
      3.140780373478474935e-13,  -1.139089186076256597e-11,
      6.862299023338785566e-10,  -9.491926788274594674e-8,
      5.301676558106268323e-5,   0.162867503967646622,
      -2.792555727162752006e-13, 1.108650207651756807e-11,
      -5.156745588549830981e-10, 4.657894859077370979e-8,
      -1.186794650130550256e-5,  0.01562499999987299901,
      -6.304859171204770696e-15, 2.857249044208791652e-13,
      -1.124956921556753188e-11, 6.858482894906716661e-10,
      -9.49186795351689846e-8,   5.301676509057781574e-5,
      0.1628675039678191167,     -2.185193490132496053e-13,
      1.048820673697426074e-11,  -5.132819367467680132e-10,
      4.65740943737299422e-8,    -1.186794150862988921e-5,
      0.01562499999779270706,    -4.74041720979200985e-15,
      2.578715253644144182e-13,  -1.104148898414138857e-11,
      6.850134201626289183e-10,  -9.49167823417491964e-8,
      5.301676277588728159e-5,   0.1628675039690033136,
      -1.75512205749384229e-13,  9.848723331445182397e-12,
      -5.094535425482245697e-10, 4.656255982268609304e-8,
      -1.186792402114394891e-5,  0.01562499998712198636};
  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]) *
        w;
  } 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]) *
        w;
  } 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 *= sin(w + theta);
  }
  return x < 0 ? -y : y;
}


x86 assembly (clang, -O0):
<bessel_J1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%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    120e <bessel_J1+0xee>
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
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    185f <bessel_J1+0x73f>
movsd  0xdf2(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    1421 <bessel_J1+0x301>
movsd  -0x18(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  0xdfd(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
cvttsd2si -0x20(%rbp),%eax
mov    %eax,-0xc(%rbp)
cvtsi2sdl -0xc(%rbp),%xmm1
movsd  0xdd7(%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    0xe1b(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xe01(%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    0xddf(%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    0xdbd(%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    0xd9b(%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    0xd79(%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    0xd57(%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    0xd35(%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    0xd13(%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    0xcf1(%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    0xccf(%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    0xcad(%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    0xc8b(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    185a <bessel_J1+0x73a>
movsd  0xbe7(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    163b <bessel_J1+0x51b>
cvttsd2si -0x18(%rbp),%eax
mov    %eax,-0xc(%rbp)
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0xc(%rbp),%xmm1
movsd  0xbda(%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    0xe2e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xe14(%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    0xdf2(%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    0xdd0(%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    0xdae(%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    0xd8c(%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    0xd6a(%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    0xd48(%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    0xd26(%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    0xd04(%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    0xce2(%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    0xcc0(%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    0xc9e(%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    0xc7c(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1855 <bessel_J1+0x735>
movsd  0x9dd(%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    0xe5e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xe44(%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    0xe22(%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    0xe00(%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    0xdde(%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    0xdbc(%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    0xd9a(%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    0xd5d(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x20(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xd43(%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    0xd21(%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    0xcff(%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    0xcdd(%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    0xcbb(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x7e5(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x18(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
call   1030 <sin@plt>
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    185a <bessel_J1+0x73a>
jmp    185f <bessel_J1+0x73f>
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    1893 <bessel_J1+0x773>
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    189d <bessel_J1+0x77d>
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bessel_J1>:
push   %r14
push   %rbx
sub    $0x48,%rsp
movapd %xmm0,%xmm3
movapd 0xecd(%rip),%xmm2
andpd  %xmm0,%xmm2
movsd  0xee1(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    11b2 <bessel_J1+0x92>
movapd %xmm3,%xmm1
mulsd  %xmm3,%xmm1
movsd  0xf03(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xeff(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xefb(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xef7(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xef3(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xeef(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xeeb(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  0xe9f(%rip),%xmm0
mulsd  %xmm2,%xmm0
jmp    14bc <bessel_J1+0x39c>
movsd  0xe6e(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    1281 <bessel_J1+0x161>
movapd %xmm3,%xmm1
mulsd  %xmm3,%xmm1
mulsd  0xe7c(%rip),%xmm1
cvttsd2si %xmm1,%eax
cvttpd2dq %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
addsd  0xe60(%rip),%xmm0
subsd  %xmm0,%xmm1
lea    (%rax,%rax,2),%ecx
lea    (%rax,%rcx,4),%eax
cltq
lea    0xe95(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x8(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x10(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x18(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x20(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x28(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x30(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x38(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x40(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x48(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x50(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x58(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  0x60(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
jmp    14bc <bessel_J1+0x39c>
movsd  0xda7(%rip),%xmm0
ucomisd %xmm2,%xmm0
jbe    138d <bessel_J1+0x26d>
cvttsd2si %xmm2,%ecx
cvttpd2dq %xmm2,%xmm0
cvtdq2pd %xmm0,%xmm0
addsd  0xda1(%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    0xfdf(%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    14bc <bessel_J1+0x39c>
movapd %xmm3,0x30(%rsp)
movsd  0xc9d(%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    0x1115(%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     141c <bessel_J1+0x2fc>
xorps  %xmm0,%xmm0
sqrtsd %xmm3,%xmm0
jmp    1449 <bessel_J1+0x329>
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  0xb9d(%rip),%xmm1
addsd  %xmm2,%xmm1
movapd %xmm1,%xmm0
call   1030 <sin@plt>
mulsd  0x8(%rsp),%xmm0
movapd 0x30(%rsp),%xmm3
movapd 0xb4c(%rip),%xmm1
xorpd  %xmm0,%xmm1
xorpd  %xmm2,%xmm2
cmpltsd %xmm2,%xmm3
andpd  %xmm3,%xmm1
andnpd %xmm0,%xmm3
orpd   %xmm1,%xmm3
movapd %xmm3,%xmm0
add    $0x48,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@bessel_J1.a = internal constant [8 x double] [double 0xBD44D7FD969604BE, double 0x3DC27DD6AD6E0507, double 0xBE3845C7D4329350, double 0x3EA6C16C1601BAAB, double 0xBF0C71C71C710405, double 0x3F655555555554F4, double -6.250000e-02, double 5.000000e-01]
@bessel_J1.b = internal constant [65 x double] [double 0x3D85701DBB53247C, double 0xBDD9D70D65A8EDF4, double 0x3E2A4A2F6A950BB1, double 0xBE763EF80B052D83, double 0x3EBEB4ABDAC329E4, double 0xBF00E1854DC86843, double 0x3F3CB3B8951B5D1B, double 0xBF7224B12A296D11, double 0x3FA02B222F2889A5, double 0xBFC2CB0CE3A76F7C, double 0x3FD9287CECA38D6B, double 0xBFDEB0968D968A52, double 0x3FC21C581744C39C, double 0x3D8004F609FB5A95, double 0xBDD2DCC939863C77, double 0x3E22AB175BDFD498, double 0xBE6E9136EADCA371, double 0x3EB44313B2F646E8, double 0xBEF52ECDBEFD3EE7, double 0x3F30DF7369697163, double 0xBF638A05295B19A7, double 0x3F8EB43B1A7BC015, double 0xBFAD389775B7FB98, double 0x3FBA8F81F1AE5D58, double 0xBF9BDE62185A43E5, double 0xBFB06FD532377D85, double 0x3D77CB9E89058395, double 0xBDCB53A189115303, double 0x3E1A3FF91E264BD2, double 0xBE64B98A0D5E7669, double 0x3EAA42A3430BF959, double 0xBEE9E65A5A864DCD, double 0x3F231272BD021DF5, double 0xBF53B87910846EB0, double 0x3F79CD13C43914B0, double 0xBF90D83A205FE22A, double 0x3F61414A89A4FD8B, double 0x3FADF74DFFCC5048, double 0xBFA054C0D2A70BF3, double 0x3D718E830D4E172D, double 0xBDC3A0B02553F464, double 0x3E1240305EA65201, double 0xBE5BAE3FC827A427, double 0x3EA0A7E5ADB8CA8D, double 0xBEDEA9E2FA13AC1B, double 0x3F147460AE43A746, double 0xBF420AF839F0CA92, double 0x3F610D1A1DB00086, double 0xBF4946125BCA083A, double 0xBF9402A08E5C0FEC, double 0x3FA114B7EC4C9E9C, double 0x3F91EFE10CD47D41, double 0x3D69B8B80E5927BA, double 0xBDBBEEBB24327E60, double 0x3E090F84E3E42299, double 0xBE5229A9B246B95D, double 0x3E9495E560855BDD, double 0xBED169734190278A, double 0x3F0456C2CD280700, double 0xBF2BAE0B2BCC2605, double 0x3F31FEA412BCC7A3, double 0x3F6BAD9929E122A7, double 0xBF8C59A017507E38, double 0xBF60BA094ECCB4AD, double 0x3FA0783A5793ACA5]
@bessel_J1.c = internal constant [70 x double] [double 0xBDAA1462F606C7FB, double 0x3DFAE05B2125163F, double 0x3E1EFD70655B9EE4, double 0xBE6DEEC26FBDA8BA, double 0xBE89033ED64FB148, double 0x3ED6C39B833D32F5, double 0x3EE8C713A5FD0C98, double 0xBF35A088ECFD6DE5, double 0xBF38B80096668FDF, double 0x3F85ED7A39D2EA77, double 0x3F6D370F39E394A4, double 0xBFC14FCC7505DD37, double 0x3F8415D3A24603A2, double 0x3FD17AD48B7328BA, double 0xBDC0A7C53A125D8B, double 0x3DD973A60A772E54, double 0x3E35511E272518E1, double 0xBE504D05FF442822, double 0xBEA324239F3A6F3D, double 0x3EBCBA95B58478EA, double 0x3F0664F9FBF6CFD3, double 0xBF1FDB5FBBE667B6, double 0xBF5E2C0CEEB1A414, double 0x3F72F6D9E8F90E27, double 0x3FA2CC9E842C91A3, double 0xBFB1924C35D0BB1B, double 0xBFCAFEE691E8FFE3, double 0x3FC4A450180E4A75, double 0xBDB829B32F74C424, double 0xBDF301D728491732, double 0x3E30136B1D8D3559, double 0x3E63C84DB39B622D, double 0xBE9E3F72C1805B49, double 0xBECB827E2E468391, double 0x3F02B969EC1A9B22, double 0x3F27270E82DE4FAB, double 0xBF5B0D9AF5306C1C, double 0xBF73E74C03B20F9D, double 0x3FA265D1BFBBEAEB, double 0x3FA996D16FD05CD8, double 0xBFCD546A79710C05, double 0xBFB42F83B8654106, double 0x3D96B4EF48D1A968, double 0xBDFB1B67F637F2A0, double 0xBE06C0C650BF8884, double 0x3E6D96A773363EC0, double 0x3E6AE93C966E2BDA, double 0xBED5E61FF392FB7E, double 0xBEB688A1664323BE, double 0x3F340FFDB1EFFE82, double 0xBF129F0150A2D83A, double 0xBF83712753523401, double 0x3F72A368A4267407, double 0x3FBD8B1C6C72D6C6, double 0xBFA87893FBF9E68E, double 0xBFCD3B82B96E7BD5, double 0x3DBDA9AE60826D17, double 0xBDE6DC54E6A73668, double 0xBE329A5E3F4EC8A5, double 0x3E5AEF0CE06E88A2, double 0x3EA0488C44921A1F, double 0xBEC5AA4286E26CD1, double 0xBF0275DF4079B774, double 0x3F25B6BC6B5C6409, double 0x3F57FF9884B41B61, double 0xBF7725EE88485B05, double 0xBF9D04DA0DFE9B15, double 0x3FB3681DDBC8E6DB, double 0x3FC47EE70EC64D16, double 0xBFC52E92C46B451F]
@bessel_J1.d = internal constant [52 x double] [double 0xBD0CA693493DC829, double 0x3D57B7B07D5EEF24, double 0xBDA92D70E32A1525, double 0x3E0794E216BF2809, double 0xBE797ACEAD3C2E53, double 0x3F0BCBCA3214D416, double 0x3FC4D8D7A58FA311, double 0xBD59B4A0B31E9F59, double 0x3DA950447B479628, double 0xBE01BFB25B08B2CF, double 0x3E6901E4F9294E87, double 0xBEE8E38E38D46314, double 0x3F8FFFFFFFFFFFDE, double 0xBD039EBE21CAC510, double 0x3D5619ED4B24ECD7, double 0xBDA90C8085DA83FD, double 0x3E0794245DC0A359, double 0xBE797ACD6B778E4A, double 0x3F0BCBCA31C9A1A5, double 0x3FC4D8D7A58FA401, double 0xBD53A69F052FFE71, double 0x3DA8612554F4D294, double 0xBE01B7EBE0242AE6, double 0x3E6901C30F088F42, double 0xBEE8E38E25A1DD69, double 0x3F8FFFFFFFFEE205, double 0xBCFC6501FA11A819, double 0x3D541B298BFD54AB, double 0xBDA8BCF1C884A2F5, double 0x3E0790C90CED01CE, double 0xBE797AC311C8FB6F, double 0x3F0BCBCA2D79285E, double 0x3FC4D8D7A58FBC48, double 0xBD4EC0FD40D1BFBE, double 0x3DA71055E2F03091, double 0xBE01A2E02B669AD6, double 0x3E69011844221FC0, double 0xBEE8E38D75F7D740, double 0x3F8FFFFFFFEC959E, double 0xBCF55954358A9C0E, double 0x3D52256682111CC2, double 0xBDA847CE42F75E0E, double 0x3E07897117865F34, double 0xBE797AA1B195E3DD, double 0x3F0BCBCA191CF01F, double 0x3FC4D8D7A59062F1, double 0xBD48B37E5EE1F90F, double 0x3DA5A8569D7EF22D, double 0xBE0181336466A786, double 0x3E68FF826E223C32, double 0xBEE8E38B0EAE920C, double 0x3F8FFFFFFF8EB94B]
define double @bessel_J1(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 %41
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_J1.a, i64 0, i64 0)
%18 = load double, double* %5
%19 = load double, double* getelementptr inbounds ([8 x double], [8 x double]* @bessel_J1.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_J1.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_J1.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_J1.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_J1.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_J1.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_J1.a, i64 0, i64 7)
%38 = call double @llvm.fmuladd.f64(double %35, double %36, double %37)
%39 = load double, double* %4
%40 = fmul double %38, %39
store double %40, double* %6
br label %365
41: ; preds = %1
%42 = load double, double* %4
%43 = fcmp olt double %42, 8.500000e+00
br i1 %43, label %44, label %148
44: ; preds = %41
%45 = load double, double* %4
%46 = load double, double* %4
%47 = fmul double %45, %46
%48 = fmul double %47, 6.250000e-02
store double %48, double* %5
%49 = load double, double* %5
%50 = fptosi double %49 to i32
store i32 %50, i32* %3
%51 = load i32, i32* %3
%52 = sitofp i32 %51 to double
%53 = fadd double %52, 5.000000e-01
%54 = load double, double* %5
%55 = fsub double %54, %53
store double %55, double* %5
%56 = load i32, i32* %3
%57 = mul nsw i32 %56, 13
store i32 %57, i32* %3
%58 = load i32, i32* %3
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %59
%61 = load double, double* %60
%62 = load double, double* %5
%63 = load i32, i32* %3
%64 = add nsw i32 %63, 1
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %65
%67 = load double, double* %66
%68 = call double @llvm.fmuladd.f64(double %61, double %62, double %67)
%69 = load double, double* %5
%70 = load i32, i32* %3
%71 = add nsw i32 %70, 2
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %72
%74 = load double, double* %73
%75 = call double @llvm.fmuladd.f64(double %68, double %69, double %74)
%76 = load double, double* %5
%77 = load i32, i32* %3
%78 = add nsw i32 %77, 3
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %79
%81 = load double, double* %80
%82 = call double @llvm.fmuladd.f64(double %75, double %76, double %81)
%83 = load double, double* %5
%84 = load i32, i32* %3
%85 = add nsw i32 %84, 4
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %86
%88 = load double, double* %87
%89 = call double @llvm.fmuladd.f64(double %82, double %83, double %88)
%90 = load double, double* %5
%91 = load i32, i32* %3
%92 = add nsw i32 %91, 5
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %93
%95 = load double, double* %94
%96 = call double @llvm.fmuladd.f64(double %89, double %90, double %95)
%97 = load double, double* %5
%98 = load i32, i32* %3
%99 = add nsw i32 %98, 6
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %100
%102 = load double, double* %101
%103 = call double @llvm.fmuladd.f64(double %96, double %97, double %102)
%104 = load double, double* %5
%105 = load i32, i32* %3
%106 = add nsw i32 %105, 7
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %107
%109 = load double, double* %108
%110 = call double @llvm.fmuladd.f64(double %103, double %104, double %109)
%111 = load double, double* %5
%112 = load i32, i32* %3
%113 = add nsw i32 %112, 8
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %114
%116 = load double, double* %115
%117 = call double @llvm.fmuladd.f64(double %110, double %111, double %116)
%118 = load double, double* %5
%119 = load i32, i32* %3
%120 = add nsw i32 %119, 9
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %121
%123 = load double, double* %122
%124 = call double @llvm.fmuladd.f64(double %117, double %118, double %123)
%125 = load double, double* %5
%126 = load i32, i32* %3
%127 = add nsw i32 %126, 10
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %128
%130 = load double, double* %129
%131 = call double @llvm.fmuladd.f64(double %124, double %125, double %130)
%132 = load double, double* %5
%133 = load i32, i32* %3
%134 = add nsw i32 %133, 11
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %135
%137 = load double, double* %136
%138 = call double @llvm.fmuladd.f64(double %131, double %132, double %137)
%139 = load double, double* %5
%140 = load i32, i32* %3
%141 = add nsw i32 %140, 12
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %142
%144 = load double, double* %143
%145 = call double @llvm.fmuladd.f64(double %138, double %139, double %144)
%146 = load double, double* %4
%147 = fmul double %145, %146
store double %147, double* %6
br label %364
148: ; preds = %41
%149 = load double, double* %4
%150 = fcmp olt double %149, 1.250000e+01
br i1 %150, label %151, label %257
151: ; preds = %148
%152 = load double, double* %4
%153 = fptosi double %152 to i32
store i32 %153, i32* %3
%154 = load double, double* %4
%155 = load i32, i32* %3
%156 = sitofp i32 %155 to double
%157 = fadd double %156, 5.000000e-01
%158 = fsub double %154, %157
store double %158, double* %5
%159 = load i32, i32* %3
%160 = sub nsw i32 %159, 8
%161 = mul nsw i32 14, %160
store i32 %161, i32* %3
%162 = load i32, i32* %3
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %163
%165 = load double, double* %164
%166 = load double, double* %5
%167 = load i32, i32* %3
%168 = add nsw i32 %167, 1
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %169
%171 = load double, double* %170
%172 = call double @llvm.fmuladd.f64(double %165, double %166, double %171)
%173 = load double, double* %5
%174 = load i32, i32* %3
%175 = add nsw i32 %174, 2
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %176
%178 = load double, double* %177
%179 = call double @llvm.fmuladd.f64(double %172, double %173, double %178)
%180 = load double, double* %5
%181 = load i32, i32* %3
%182 = add nsw i32 %181, 3
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %183
%185 = load double, double* %184
%186 = call double @llvm.fmuladd.f64(double %179, double %180, double %185)
%187 = load double, double* %5
%188 = load i32, i32* %3
%189 = add nsw i32 %188, 4
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %190
%192 = load double, double* %191
%193 = call double @llvm.fmuladd.f64(double %186, double %187, double %192)
%194 = load double, double* %5
%195 = load i32, i32* %3
%196 = add nsw i32 %195, 5
%197 = sext i32 %196 to i64
%198 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %197
%199 = load double, double* %198
%200 = call double @llvm.fmuladd.f64(double %193, double %194, double %199)
%201 = load double, double* %5
%202 = load i32, i32* %3
%203 = add nsw i32 %202, 6
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %204
%206 = load double, double* %205
%207 = call double @llvm.fmuladd.f64(double %200, double %201, double %206)
%208 = load double, double* %5
%209 = load i32, i32* %3
%210 = add nsw i32 %209, 7
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %211
%213 = load double, double* %212
%214 = call double @llvm.fmuladd.f64(double %207, double %208, double %213)
%215 = load double, double* %5
%216 = load i32, i32* %3
%217 = add nsw i32 %216, 8
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %218
%220 = load double, double* %219
%221 = call double @llvm.fmuladd.f64(double %214, double %215, double %220)
%222 = load double, double* %5
%223 = load i32, i32* %3
%224 = add nsw i32 %223, 9
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %225
%227 = load double, double* %226
%228 = call double @llvm.fmuladd.f64(double %221, double %222, double %227)
%229 = load double, double* %5
%230 = load i32, i32* %3
%231 = add nsw i32 %230, 10
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %232
%234 = load double, double* %233
%235 = call double @llvm.fmuladd.f64(double %228, double %229, double %234)
%236 = load double, double* %5
%237 = load i32, i32* %3
%238 = add nsw i32 %237, 11
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %239
%241 = load double, double* %240
%242 = call double @llvm.fmuladd.f64(double %235, double %236, double %241)
%243 = load double, double* %5
%244 = load i32, i32* %3
%245 = add nsw i32 %244, 12
%246 = sext i32 %245 to i64
%247 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %246
%248 = load double, double* %247
%249 = call double @llvm.fmuladd.f64(double %242, double %243, double %248)
%250 = load double, double* %5
%251 = load i32, i32* %3
%252 = add nsw i32 %251, 13
%253 = sext i32 %252 to i64
%254 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %253
%255 = load double, double* %254
%256 = call double @llvm.fmuladd.f64(double %249, double %250, double %255)
store double %256, double* %6
br label %363
257: ; preds = %148
%258 = load double, double* %4
%259 = fdiv double 2.400000e+01, %258
store double %259, double* %7
%260 = load double, double* %7
%261 = load double, double* %7
%262 = fmul double %260, %261
store double %262, double* %5
%263 = load double, double* %5
%264 = fptosi double %263 to i32
%265 = mul nsw i32 13, %264
store i32 %265, i32* %3
%266 = load i32, i32* %3
%267 = sext i32 %266 to i64
%268 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %267
%269 = load double, double* %268
%270 = load double, double* %5
%271 = load i32, i32* %3
%272 = add nsw i32 %271, 1
%273 = sext i32 %272 to i64
%274 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %273
%275 = load double, double* %274
%276 = call double @llvm.fmuladd.f64(double %269, double %270, double %275)
%277 = load double, double* %5
%278 = load i32, i32* %3
%279 = add nsw i32 %278, 2
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %280
%282 = load double, double* %281
%283 = call double @llvm.fmuladd.f64(double %276, double %277, double %282)
%284 = load double, double* %5
%285 = load i32, i32* %3
%286 = add nsw i32 %285, 3
%287 = sext i32 %286 to i64
%288 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %287
%289 = load double, double* %288
%290 = call double @llvm.fmuladd.f64(double %283, double %284, double %289)
%291 = load double, double* %5
%292 = load i32, i32* %3
%293 = add nsw i32 %292, 4
%294 = sext i32 %293 to i64
%295 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %294
%296 = load double, double* %295
%297 = call double @llvm.fmuladd.f64(double %290, double %291, double %296)
%298 = load double, double* %5
%299 = load i32, i32* %3
%300 = add nsw i32 %299, 5
%301 = sext i32 %300 to i64
%302 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %301
%303 = load double, double* %302
%304 = call double @llvm.fmuladd.f64(double %297, double %298, double %303)
%305 = load double, double* %5
%306 = load i32, i32* %3
%307 = add nsw i32 %306, 6
%308 = sext i32 %307 to i64
%309 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %308
%310 = load double, double* %309
%311 = call double @llvm.fmuladd.f64(double %304, double %305, double %310)
%312 = load double, double* %7
%313 = call double @sqrt(double %312)
%314 = fmul double %311, %313
store double %314, double* %6
%315 = load i32, i32* %3
%316 = add nsw i32 %315, 7
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %317
%319 = load double, double* %318
%320 = load double, double* %5
%321 = load i32, i32* %3
%322 = add nsw i32 %321, 8
%323 = sext i32 %322 to i64
%324 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %323
%325 = load double, double* %324
%326 = call double @llvm.fmuladd.f64(double %319, double %320, double %325)
%327 = load double, double* %5
%328 = load i32, i32* %3
%329 = add nsw i32 %328, 9
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %330
%332 = load double, double* %331
%333 = call double @llvm.fmuladd.f64(double %326, double %327, double %332)
%334 = load double, double* %5
%335 = load i32, i32* %3
%336 = add nsw i32 %335, 10
%337 = sext i32 %336 to i64
%338 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %337
%339 = load double, double* %338
%340 = call double @llvm.fmuladd.f64(double %333, double %334, double %339)
%341 = load double, double* %5
%342 = load i32, i32* %3
%343 = add nsw i32 %342, 11
%344 = sext i32 %343 to i64
%345 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %344
%346 = load double, double* %345
%347 = call double @llvm.fmuladd.f64(double %340, double %341, double %346)
%348 = load double, double* %5
%349 = load i32, i32* %3
%350 = add nsw i32 %349, 12
%351 = sext i32 %350 to i64
%352 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %351
%353 = load double, double* %352
%354 = call double @llvm.fmuladd.f64(double %347, double %348, double %353)
%355 = load double, double* %7
%356 = call double @llvm.fmuladd.f64(double %354, double %355, double 0xBFE921FB54442D18)
store double %356, double* %8
%357 = load double, double* %4
%358 = load double, double* %8
%359 = fadd double %357, %358
%360 = call double @sin(double %359)
%361 = load double, double* %6
%362 = fmul double %361, %360
store double %362, double* %6
br label %363
363: ; preds = %257, %151
br label %364
364: ; preds = %363, %44
br label %365
365: ; preds = %364, %13
%366 = load double, double* %2
%367 = fcmp olt double %366, 0.000000e+00
br i1 %367, label %368, label %371
368: ; preds = %365
%369 = load double, double* %6
%370 = fneg double %369
br label %373
371: ; preds = %365
%372 = load double, double* %6
br label %373
373: ; preds = %371, %368
%374 = phi double [ %370, %368 ], [ %372, %371 ]
ret double %374
}

LLVM IR (-O2):
@bessel_J1.b = internal unnamed_addr constant [65 x double] [double 0x3D85701DBB53247C, double 0xBDD9D70D65A8EDF4, double 0x3E2A4A2F6A950BB1, double 0xBE763EF80B052D83, double 0x3EBEB4ABDAC329E4, double 0xBF00E1854DC86843, double 0x3F3CB3B8951B5D1B, double 0xBF7224B12A296D11, double 0x3FA02B222F2889A5, double 0xBFC2CB0CE3A76F7C, double 0x3FD9287CECA38D6B, double 0xBFDEB0968D968A52, double 0x3FC21C581744C39C, double 0x3D8004F609FB5A95, double 0xBDD2DCC939863C77, double 0x3E22AB175BDFD498, double 0xBE6E9136EADCA371, double 0x3EB44313B2F646E8, double 0xBEF52ECDBEFD3EE7, double 0x3F30DF7369697163, double 0xBF638A05295B19A7, double 0x3F8EB43B1A7BC015, double 0xBFAD389775B7FB98, double 0x3FBA8F81F1AE5D58, double 0xBF9BDE62185A43E5, double 0xBFB06FD532377D85, double 0x3D77CB9E89058395, double 0xBDCB53A189115303, double 0x3E1A3FF91E264BD2, double 0xBE64B98A0D5E7669, double 0x3EAA42A3430BF959, double 0xBEE9E65A5A864DCD, double 0x3F231272BD021DF5, double 0xBF53B87910846EB0, double 0x3F79CD13C43914B0, double 0xBF90D83A205FE22A, double 0x3F61414A89A4FD8B, double 0x3FADF74DFFCC5048, double 0xBFA054C0D2A70BF3, double 0x3D718E830D4E172D, double 0xBDC3A0B02553F464, double 0x3E1240305EA65201, double 0xBE5BAE3FC827A427, double 0x3EA0A7E5ADB8CA8D, double 0xBEDEA9E2FA13AC1B, double 0x3F147460AE43A746, double 0xBF420AF839F0CA92, double 0x3F610D1A1DB00086, double 0xBF4946125BCA083A, double 0xBF9402A08E5C0FEC, double 0x3FA114B7EC4C9E9C, double 0x3F91EFE10CD47D41, double 0x3D69B8B80E5927BA, double 0xBDBBEEBB24327E60, double 0x3E090F84E3E42299, double 0xBE5229A9B246B95D, double 0x3E9495E560855BDD, double 0xBED169734190278A, double 0x3F0456C2CD280700, double 0xBF2BAE0B2BCC2605, double 0x3F31FEA412BCC7A3, double 0x3F6BAD9929E122A7, double 0xBF8C59A017507E38, double 0xBF60BA094ECCB4AD, double 0x3FA0783A5793ACA5]
@bessel_J1.c = internal unnamed_addr constant [70 x double] [double 0xBDAA1462F606C7FB, double 0x3DFAE05B2125163F, double 0x3E1EFD70655B9EE4, double 0xBE6DEEC26FBDA8BA, double 0xBE89033ED64FB148, double 0x3ED6C39B833D32F5, double 0x3EE8C713A5FD0C98, double 0xBF35A088ECFD6DE5, double 0xBF38B80096668FDF, double 0x3F85ED7A39D2EA77, double 0x3F6D370F39E394A4, double 0xBFC14FCC7505DD37, double 0x3F8415D3A24603A2, double 0x3FD17AD48B7328BA, double 0xBDC0A7C53A125D8B, double 0x3DD973A60A772E54, double 0x3E35511E272518E1, double 0xBE504D05FF442822, double 0xBEA324239F3A6F3D, double 0x3EBCBA95B58478EA, double 0x3F0664F9FBF6CFD3, double 0xBF1FDB5FBBE667B6, double 0xBF5E2C0CEEB1A414, double 0x3F72F6D9E8F90E27, double 0x3FA2CC9E842C91A3, double 0xBFB1924C35D0BB1B, double 0xBFCAFEE691E8FFE3, double 0x3FC4A450180E4A75, double 0xBDB829B32F74C424, double 0xBDF301D728491732, double 0x3E30136B1D8D3559, double 0x3E63C84DB39B622D, double 0xBE9E3F72C1805B49, double 0xBECB827E2E468391, double 0x3F02B969EC1A9B22, double 0x3F27270E82DE4FAB, double 0xBF5B0D9AF5306C1C, double 0xBF73E74C03B20F9D, double 0x3FA265D1BFBBEAEB, double 0x3FA996D16FD05CD8, double 0xBFCD546A79710C05, double 0xBFB42F83B8654106, double 0x3D96B4EF48D1A968, double 0xBDFB1B67F637F2A0, double 0xBE06C0C650BF8884, double 0x3E6D96A773363EC0, double 0x3E6AE93C966E2BDA, double 0xBED5E61FF392FB7E, double 0xBEB688A1664323BE, double 0x3F340FFDB1EFFE82, double 0xBF129F0150A2D83A, double 0xBF83712753523401, double 0x3F72A368A4267407, double 0x3FBD8B1C6C72D6C6, double 0xBFA87893FBF9E68E, double 0xBFCD3B82B96E7BD5, double 0x3DBDA9AE60826D17, double 0xBDE6DC54E6A73668, double 0xBE329A5E3F4EC8A5, double 0x3E5AEF0CE06E88A2, double 0x3EA0488C44921A1F, double 0xBEC5AA4286E26CD1, double 0xBF0275DF4079B774, double 0x3F25B6BC6B5C6409, double 0x3F57FF9884B41B61, double 0xBF7725EE88485B05, double 0xBF9D04DA0DFE9B15, double 0x3FB3681DDBC8E6DB, double 0x3FC47EE70EC64D16, double 0xBFC52E92C46B451F]
@bessel_J1.d = internal unnamed_addr constant [52 x double] [double 0xBD0CA693493DC829, double 0x3D57B7B07D5EEF24, double 0xBDA92D70E32A1525, double 0x3E0794E216BF2809, double 0xBE797ACEAD3C2E53, double 0x3F0BCBCA3214D416, double 0x3FC4D8D7A58FA311, double 0xBD59B4A0B31E9F59, double 0x3DA950447B479628, double 0xBE01BFB25B08B2CF, double 0x3E6901E4F9294E87, double 0xBEE8E38E38D46314, double 0x3F8FFFFFFFFFFFDE, double 0xBD039EBE21CAC510, double 0x3D5619ED4B24ECD7, double 0xBDA90C8085DA83FD, double 0x3E0794245DC0A359, double 0xBE797ACD6B778E4A, double 0x3F0BCBCA31C9A1A5, double 0x3FC4D8D7A58FA401, double 0xBD53A69F052FFE71, double 0x3DA8612554F4D294, double 0xBE01B7EBE0242AE6, double 0x3E6901C30F088F42, double 0xBEE8E38E25A1DD69, double 0x3F8FFFFFFFFEE205, double 0xBCFC6501FA11A819, double 0x3D541B298BFD54AB, double 0xBDA8BCF1C884A2F5, double 0x3E0790C90CED01CE, double 0xBE797AC311C8FB6F, double 0x3F0BCBCA2D79285E, double 0x3FC4D8D7A58FBC48, double 0xBD4EC0FD40D1BFBE, double 0x3DA71055E2F03091, double 0xBE01A2E02B669AD6, double 0x3E69011844221FC0, double 0xBEE8E38D75F7D740, double 0x3F8FFFFFFFEC959E, double 0xBCF55954358A9C0E, double 0x3D52256682111CC2, double 0xBDA847CE42F75E0E, double 0x3E07897117865F34, double 0xBE797AA1B195E3DD, double 0x3F0BCBCA191CF01F, double 0x3FC4D8D7A59062F1, double 0xBD48B37E5EE1F90F, double 0x3DA5A8569D7EF22D, double 0xBE0181336466A786, double 0x3E68FF826E223C32, double 0xBEE8E38B0EAE920C, double 0x3F8FFFFFFF8EB94B]
define double @bessel_J1(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 %14
4: ; preds = %1
%5 = fmul double %0, %0
%6 = tail call double @llvm.fmuladd.f64(double %5, double 0xBD44D7FD969604BE, double 0x3DC27DD6AD6E0507)
%7 = tail call double @llvm.fmuladd.f64(double %6, double %5, double 0xBE3845C7D4329350)
%8 = tail call double @llvm.fmuladd.f64(double %7, double %5, double 0x3EA6C16C1601BAAB)
%9 = tail call double @llvm.fmuladd.f64(double %8, double %5, double 0xBF0C71C71C710405)
%10 = tail call double @llvm.fmuladd.f64(double %9, double %5, double 0x3F655555555554F4)
%11 = tail call double @llvm.fmuladd.f64(double %10, double %5, double -6.250000e-02)
%12 = tail call double @llvm.fmuladd.f64(double %11, double %5, double 5.000000e-01)
%13 = fmul double %2, %12
br label %238
14: ; preds = %1
%15 = fcmp olt double %2, 8.500000e+00
br i1 %15, label %16, label %88
16: ; preds = %14
%17 = fmul double %0, %0
%18 = fmul double %17, 6.250000e-02
%19 = fptosi double %18 to i32
%20 = sitofp i32 %19 to double
%21 = fadd double %20, 5.000000e-01
%22 = fsub double %18, %21
%23 = mul nsw i32 %19, 13
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %24
%26 = load double, double* %25
%27 = add nsw i32 %23, 1
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %28
%30 = load double, double* %29
%31 = tail call double @llvm.fmuladd.f64(double %26, double %22, double %30)
%32 = add nsw i32 %23, 2
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %33
%35 = load double, double* %34
%36 = tail call double @llvm.fmuladd.f64(double %31, double %22, double %35)
%37 = add nsw i32 %23, 3
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %38
%40 = load double, double* %39
%41 = tail call double @llvm.fmuladd.f64(double %36, double %22, double %40)
%42 = add nsw i32 %23, 4
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %43
%45 = load double, double* %44
%46 = tail call double @llvm.fmuladd.f64(double %41, double %22, double %45)
%47 = add nsw i32 %23, 5
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %48
%50 = load double, double* %49
%51 = tail call double @llvm.fmuladd.f64(double %46, double %22, double %50)
%52 = add nsw i32 %23, 6
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %53
%55 = load double, double* %54
%56 = tail call double @llvm.fmuladd.f64(double %51, double %22, double %55)
%57 = add nsw i32 %23, 7
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %58
%60 = load double, double* %59
%61 = tail call double @llvm.fmuladd.f64(double %56, double %22, double %60)
%62 = add nsw i32 %23, 8
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %63
%65 = load double, double* %64
%66 = tail call double @llvm.fmuladd.f64(double %61, double %22, double %65)
%67 = add nsw i32 %23, 9
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %68
%70 = load double, double* %69
%71 = tail call double @llvm.fmuladd.f64(double %66, double %22, double %70)
%72 = add nsw i32 %23, 10
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %73
%75 = load double, double* %74
%76 = tail call double @llvm.fmuladd.f64(double %71, double %22, double %75)
%77 = add nsw i32 %23, 11
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %78
%80 = load double, double* %79
%81 = tail call double @llvm.fmuladd.f64(double %76, double %22, double %80)
%82 = add nsw i32 %23, 12
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds [65 x double], [65 x double]* @bessel_J1.b, i64 0, i64 %83
%85 = load double, double* %84
%86 = tail call double @llvm.fmuladd.f64(double %81, double %22, double %85)
%87 = fmul double %2, %86
br label %238
88: ; preds = %14
%89 = fcmp olt double %2, 1.250000e+01
br i1 %89, label %90, label %165
90: ; preds = %88
%91 = fptosi double %2 to i32
%92 = sitofp i32 %91 to double
%93 = fadd double %92, 5.000000e-01
%94 = fsub double %2, %93
%95 = mul i32 %91, 14
%96 = add i32 %95, -112
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %97
%99 = load double, double* %98
%100 = add i32 %95, -111
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %101
%103 = load double, double* %102
%104 = tail call double @llvm.fmuladd.f64(double %99, double %94, double %103)
%105 = add i32 %95, -110
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %106
%108 = load double, double* %107
%109 = tail call double @llvm.fmuladd.f64(double %104, double %94, double %108)
%110 = add i32 %95, -109
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %111
%113 = load double, double* %112
%114 = tail call double @llvm.fmuladd.f64(double %109, double %94, double %113)
%115 = add i32 %95, -108
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %116
%118 = load double, double* %117
%119 = tail call double @llvm.fmuladd.f64(double %114, double %94, double %118)
%120 = add i32 %95, -107
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %121
%123 = load double, double* %122
%124 = tail call double @llvm.fmuladd.f64(double %119, double %94, double %123)
%125 = add i32 %95, -106
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %126
%128 = load double, double* %127
%129 = tail call double @llvm.fmuladd.f64(double %124, double %94, double %128)
%130 = add i32 %95, -105
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %131
%133 = load double, double* %132
%134 = tail call double @llvm.fmuladd.f64(double %129, double %94, double %133)
%135 = add i32 %95, -104
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %136
%138 = load double, double* %137
%139 = tail call double @llvm.fmuladd.f64(double %134, double %94, double %138)
%140 = add i32 %95, -103
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %141
%143 = load double, double* %142
%144 = tail call double @llvm.fmuladd.f64(double %139, double %94, double %143)
%145 = add i32 %95, -102
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %146
%148 = load double, double* %147
%149 = tail call double @llvm.fmuladd.f64(double %144, double %94, double %148)
%150 = add i32 %95, -101
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %151
%153 = load double, double* %152
%154 = tail call double @llvm.fmuladd.f64(double %149, double %94, double %153)
%155 = add i32 %95, -100
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %156
%158 = load double, double* %157
%159 = tail call double @llvm.fmuladd.f64(double %154, double %94, double %158)
%160 = add i32 %95, -99
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds [70 x double], [70 x double]* @bessel_J1.c, i64 0, i64 %161
%163 = load double, double* %162
%164 = tail call double @llvm.fmuladd.f64(double %159, double %94, double %163)
br label %238
165: ; preds = %88
%166 = fdiv double 2.400000e+01, %2
%167 = fmul double %166, %166
%168 = fptosi double %167 to i32
%169 = mul nsw i32 %168, 13
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %170
%172 = load double, double* %171
%173 = add nsw i32 %169, 1
%174 = sext i32 %173 to i64
%175 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %174
%176 = load double, double* %175
%177 = tail call double @llvm.fmuladd.f64(double %172, double %167, double %176)
%178 = add nsw i32 %169, 2
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %179
%181 = load double, double* %180
%182 = tail call double @llvm.fmuladd.f64(double %177, double %167, double %181)
%183 = add nsw i32 %169, 3
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %184
%186 = load double, double* %185
%187 = tail call double @llvm.fmuladd.f64(double %182, double %167, double %186)
%188 = add nsw i32 %169, 4
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %189
%191 = load double, double* %190
%192 = tail call double @llvm.fmuladd.f64(double %187, double %167, double %191)
%193 = add nsw i32 %169, 5
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %194
%196 = load double, double* %195
%197 = tail call double @llvm.fmuladd.f64(double %192, double %167, double %196)
%198 = add nsw i32 %169, 6
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %199
%201 = load double, double* %200
%202 = tail call double @llvm.fmuladd.f64(double %197, double %167, double %201)
%203 = tail call double @sqrt(double %166)
%204 = fmul double %202, %203
%205 = add nsw i32 %169, 7
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %206
%208 = load double, double* %207
%209 = add nsw i32 %169, 8
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %210
%212 = load double, double* %211
%213 = tail call double @llvm.fmuladd.f64(double %208, double %167, double %212)
%214 = add nsw i32 %169, 9
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %215
%217 = load double, double* %216
%218 = tail call double @llvm.fmuladd.f64(double %213, double %167, double %217)
%219 = add nsw i32 %169, 10
%220 = sext i32 %219 to i64
%221 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %220
%222 = load double, double* %221
%223 = tail call double @llvm.fmuladd.f64(double %218, double %167, double %222)
%224 = add nsw i32 %169, 11
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %225
%227 = load double, double* %226
%228 = tail call double @llvm.fmuladd.f64(double %223, double %167, double %227)
%229 = add nsw i32 %169, 12
%230 = sext i32 %229 to i64
%231 = getelementptr inbounds [52 x double], [52 x double]* @bessel_J1.d, i64 0, i64 %230
%232 = load double, double* %231
%233 = tail call double @llvm.fmuladd.f64(double %228, double %167, double %232)
%234 = tail call double @llvm.fmuladd.f64(double %233, double %166, double 0xBFE921FB54442D18)
%235 = fadd double %2, %234
%236 = tail call double @sin(double %235)
%237 = fmul double %204, %236
br label %238
238: ; preds = %16, %165, %90, %4
%239 = phi double [ %13, %4 ], [ %87, %16 ], [ %164, %90 ], [ %237, %165 ]
%240 = fcmp olt double %0, 0.000000e+00
%241 = fneg double %239
%242 = select i1 %240, double %241, double %239
ret double %242
}