double bessel_K1(double x) {
  int k;
  double t, y, v;
  const static double a[16] = {
      1.5151605362537935201e-13,  3.363790951353651035e-11,
      5.6514041131016827202e-9,   6.7816840255069534052e-7,
      5.4253472222259226487e-5,   0.0026041666666666637057,
      0.06250000000000000009,     0.5,
      -8.9790303384748696588e-11, -1.4029047449249185771e-8,
      -1.5592893752540998113e-6,  -1.1253607018469017569e-4,
      -0.0046421827665011579173,  -0.085370719728648409609,
      -0.3079657578292062966,     1.0000000000000000004};
  const static double b[120] = {
      -9.4055461896630579928e-12, 3.1307934665844664773e-11,
      4.2005295001519243251e-10,  -4.1636196779679820012e-9,
      1.4483026181700966164e-8,   1.1661000205428816914e-8,
      -3.5023996724943046209e-7,  1.4404279316339005012e-6,
      5.358156415715824208e-7,    -3.5249754038612334639e-5,
      1.7150324075631641453e-4,   -4.1276362611239191024e-5,
      -0.0046943110979636602591,  0.035085369853392357659,
      0.20063574339907819159,     3.3998989888944034586e-11,
      7.1558979072937373055e-11,  -2.9226856932927698732e-9,
      1.4591620256525610213e-8,   -6.6141635609854161666e-9,
      -1.9991101838984472332e-7,  5.9185836628873530572e-7,
      1.9562880347358085687e-6,   -1.5814366450418102764e-5,
      7.6791682910944612028e-6,   2.8354678948323983936e-4,
      -0.0010217932669418690641,  -0.0032205661865210048433,
      0.043497494842354644077,    0.16110284302315089935,
      -2.0933987679665541827e-10, 7.9503322090520447316e-10,
      3.8000150948242575774e-9,   -2.3076136195585571309e-8,
      -2.3902880302550799653e-8,  3.1914500937804377478e-7,
      3.2639909831082417694e-7,   -5.3166994792995439449e-6,
      -3.1109524694269240094e-6,  9.2575906966353273247e-5,
      7.5063709094147644746e-7,   -0.0017416491592625765379,
      0.0012138560335171676007,   0.045879687144659643175,
      0.11566544716132846709,     3.1582384905164908749e-10,
      -1.9959561818098999516e-9,  8.6959328920030927557e-10,
      1.1642778282445577109e-8,   4.3552264337818440471e-8,
      -1.5057982160481803238e-7,  -1.0101729117980989857e-6,
      7.7002002510177612013e-7,   1.9580574235590194233e-5,
      1.9358461980242834361e-5,   -3.3932339942485532728e-4,
      -9.3416673584325090073e-4,  0.0055800080455912847227,
      0.038668683062477179235,    0.072651643500517000658,
      -1.1554749629758510059e-10, 8.2270678758893273006e-10,
      -5.0211156951551538591e-10, -1.4929179050554858361e-9,
      -2.7107940791526366702e-8,  -4.2204764086705349384e-8,
      3.7253098167927628867e-7,   2.4374697215363361156e-6,
      1.414194200690976837e-6,    -4.8766389019473918231e-5,
      -2.1681387247526720978e-4,  2.9325729929653405236e-4,
      0.0064087534504827239815,   0.026054628289709454356,
      0.040156431128194184336,    2.5506555170746221691e-11,
      -1.3521164018407978152e-10, -8.3281235274106699399e-11,
      -9.7764849575562351891e-10, 3.4661828409940354542e-9,
      3.9760633711791357544e-8,   1.590290664550452993e-7,
      -1.4919441249454941275e-7,  -5.3779684992094351263e-6,
      -2.7513862296246223142e-5,  -9.7880089725297162007e-6,
      7.0787668964515789714e-4,   0.0046968199862345387583,
      0.014745740181663320127,    0.020048622219583455723,
      -3.4824483072529265585e-12, 1.5157161810563380451e-12,
      8.5303859696700686144e-12,  3.3455414203743741076e-10,
      2.0226016353844285376e-9,   5.312815400326633499e-9,
      -3.0799322316418042137e-8,  -4.4455408272954712128e-7,
      -2.4293274626893384034e-6,  -3.2129079340119038354e-6,
      5.922540368307538885e-5,    5.6822962576781683532e-4,
      0.0027152446516406682732,   0.0074075873691848838485,
      0.0093044450815739269849,   -2.7683216166276377232e-13,
      3.1986676777610155465e-12,  9.4142986954031445666e-12,
      6.7934609179456399334e-11,  3.485152941147002933e-11,
      -2.5785248508896551557e-9,  -2.8310220027112571258e-8,
      -1.6384131113072271115e-7,  -3.2521663350596379097e-7,
      4.038138875762230716e-6,    5.1917606978077281001e-5,
      3.3420027947470126154e-4,   0.0013699550623118247094,
      0.0034405619148342271096,   0.0041042919106665762794};
  const static double c[120] = {
      4.5281968025889407937e-12, 1.0806749918195271176e-11,
      9.6200972728717669027e-11, 5.721422706362526365e-10,
      3.6077804282954825099e-9,  2.2465236858536681852e-8,
      1.367696126430873523e-7,   7.9561767489531997361e-7,
      4.3014380065615550573e-6,  2.092171390555028559e-5,
      8.8079183950590176926e-5,  3.0549414408830252064e-4,
      8.1295715613927890473e-4,  0.0014679809476357079195,
      0.0013439197177355090057,  7.6019964430402432637e-13,
      -2.261619859915827119e-13, 1.7904450823779000744e-11,
      9.1467054855312232717e-11, 7.1378582044879519122e-10,
      4.9925255415445769102e-9,  3.3767315471315546644e-8,
      2.1350774539167751457e-7,  1.2314353082655232903e-6,
      6.2918685053670619181e-6,  2.7493229298777000013e-5,
      9.8085825401369821771e-5,  2.6670282677770444935e-4,
      4.8967895428135985381e-4,  4.5418248688489697144e-4,
      9.4180115230375147213e-14, 7.5943117003734061145e-14,
      3.0335730243874287654e-12, 2.0202796115462268051e-11,
      1.6839020189186971198e-10, 1.2907875663127201526e-9,
      9.354767612586579892e-9,   6.2471974110281880722e-8,
      3.7585985422997380441e-7,  1.9838348288114906484e-6,
      8.8884862203671982034e-6,  3.2333259238682810218e-5,
      8.9266668913380400243e-5,  1.6589185669844051903e-4,
      1.5536921180500113394e-4,  1.5425475332301107271e-14,
      2.8674534590132490434e-14, 6.5078462279160216936e-13,
      5.0939757793961391211e-12, 4.497983746074897552e-11,
      3.6662925847520171711e-10, 2.7848878755089582413e-9,
      1.929812005933947782e-8,   1.1950323861976892013e-7,
      6.4513432758147478287e-7,  2.9422095033982461936e-6,
      1.0854433321174584937e-5,  3.0307433185818899481e-5,
      5.684098144306501785e-5,   5.3637016379451945253e-5,
      3.1077953698439839352e-15, 8.6899496170729520378e-15,
      1.6258562067326054104e-13, 1.4104842571366761537e-12,
      1.3019455544084110747e-11, 1.1070466372863950239e-10,
      8.6890603844230597917e-10, 6.1793722175049967488e-9,
      3.9058865943755615801e-8,  2.1432806981070368523e-7,
      9.9034657762983230155e-7,  3.6925185861895664251e-6,
      1.0399877577259449786e-5,  1.9644939661550210015e-5,
      1.8648773453825584597e-5,  7.2831555285336286457e-16,
      2.6077534095895783532e-15, 4.4881202059263153495e-14,
      4.1674329383944385626e-13, 3.9760100480223728037e-12,
      3.483597635535118301e-11,  2.79932542127702497e-10,
      2.0286513276830758107e-9,  1.3018343087118439152e-8,
      7.2315927974997999365e-8,  3.3750708681924201599e-7,
      1.2688020879407355571e-6,  3.5980954090811587848e-6,
      6.8358260635246667316e-6,  6.5208606745808860557e-6,
      1.9026412343503745875e-16, 8.0073765508732553766e-16,
      1.3245754278055523992e-14, 1.2885201653055058502e-13,
      1.2600129301230402587e-12, 1.1283306843147549277e-11,
      9.2261481309646814329e-11, 6.7812033168299846818e-10,
      4.4020645304595102132e-9,  2.4685719238301517679e-8,
      1.1611886719473112509e-7,  4.3940380936523135466e-7,
      1.2529878285546791905e-6,  2.3917218527087570384e-6,
      2.290757464767187816e-6,   5.3709522135744366512e-17,
      2.5239221050372845433e-16, 4.093314714589908336e-15,
      4.1152784247617592367e-14, 4.0998840572769381012e-13,
      3.7319354625807158852e-12, 3.0921671702920868014e-11,
      2.2975898538634445343e-10, 1.5049754445782364328e-9,
      8.5030864719789148982e-9,  4.025055939111842381e-8,
      1.5312755642491878591e-7,  4.3865020375297892208e-7,
      8.4059737392822153101e-7,  8.0785884122023473319e-7};
  const static double d[40] = {
      9.2371554649979581914e-14, -2.3111336195788410887e-12,
      5.7728710326649832559e-11, -1.8002298130091372598e-9,
      7.6810375010517145638e-8,  -5.2669973752193823306e-6,
      0.0010112634961227401357,  0.16180215937964160466,
      6.1381146507252683381e-14, -2.1034499679806301862e-12,
      5.7090233460448415278e-11, -1.7990724350642330817e-9,
      7.6809056078388019946e-8,  -5.2669964425290062357e-6,
      0.001011263495747828339,   0.16180215937970716383,
      4.2458150578401296419e-14, -1.8435733128339016981e-12,
      5.5534955081564656595e-11, -1.7938162188526358466e-9,
      7.6798230945934117807e-8,  -5.2669828728791921259e-6,
      0.0010112634861753356559,  0.16180215938263409582,
      3.0314798962267007518e-14, -1.5915009905364214455e-12,
      5.3275907427402047438e-11, -1.7824862013841369751e-9,
      7.676389035644707581e-8,   -5.2669199860465945909e-6,
      0.0010112634217687349189,  0.16180215941108227283,
      2.2211515002229271212e-14, -1.3664088221521734796e-12,
      5.0585177270502341602e-11, -1.7645432205894533462e-9,
      7.6691805594577373698e-8,  -5.2667455286976269634e-6,
      0.001011263186281097458,   0.16180215954783127877};
  if (x < 0.8) {
    t = x * x;
    y = (((((((a[0] * t + a[1]) * t + a[2]) * t + a[3]) * t + a[4]) * t +
           a[5]) *
              t +
          a[6]) *
             t +
         a[7]) *
        x;
    y = (((((((a[8] * t + a[9]) * t + a[10]) * t + a[11]) * t + a[12]) * t +
           a[13]) *
              t +
          a[14]) *
             t +
         a[15]) /
            x +
        y * log(x);
  } else if (x < 5.5) {
    v = 3 / x;
    t = x - v;
    k = (int)(t + 3);
    t = (k - 2) - t;
    k *= 15;
    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]) *
              t +
          b[k + 13]) *
             t +
         b[k + 14]) *
        v;
  } else if (x < 12.5) {
    k = (int)x;
    t = (k + 1) - x;
    k = 15 * (k - 5);
    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]) *
            t +
        c[k + 14];
  } else {
    t = 60 / x;
    k = 8 * ((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]) *
             t +
         d[k + 7]) *
        sqrt(t) * exp(-x);
  }
  return y;
}


x86 assembly (clang, -O0):
<bessel_K1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  0xebb(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    12dc <bessel_K1+0x1ac>
movsd  -0x8(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xec9(%rip),%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xec4(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xeb7(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xeaa(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe9d(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe90(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe83(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe76(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xe64(%rip),%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe5f(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe52(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe45(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe38(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe2b(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe1e(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  0xe11(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1040 <log@plt>
movsd  -0x38(%rbp),%xmm1
movaps %xmm0,%xmm2
movsd  -0x30(%rbp),%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    18e2 <bessel_K1+0x7b2>
movsd  0xd24(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    153a <bessel_K1+0x40a>
movsd  0xd29(%rip),%xmm0
divsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x8(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xd08(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x2,%eax
cvtsi2sd %eax,%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
imul   $0xf,-0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0xd66(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xd4c(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0xd2a(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0xd08(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0xce6(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0xcc4(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0xca2(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xc80(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xc5e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x9,%eax
movslq %eax,%rcx
lea    0xc3c(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xa,%eax
movslq %eax,%rcx
lea    0xc1a(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xb,%eax
movslq %eax,%rcx
lea    0xbf8(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xc,%eax
movslq %eax,%rcx
lea    0xbd6(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xd,%eax
movslq %eax,%rcx
lea    0xbb4(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xe,%eax
movslq %eax,%rcx
lea    0xb92(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    18dd <bessel_K1+0x7ad>
movsd  0xace(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    176b <bessel_K1+0x63b>
cvttsd2si -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
subsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x5,%eax
imul   $0xf,%eax,%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0xef0(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0xed6(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0xeb4(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0xe92(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0xe70(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0xe4e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0xe2c(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xe0a(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rcx
lea    0xde8(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x9,%eax
movslq %eax,%rcx
lea    0xdc6(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xa,%eax
movslq %eax,%rcx
lea    0xda4(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xb,%eax
movslq %eax,%rcx
lea    0xd82(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xc,%eax
movslq %eax,%rcx
lea    0xd60(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xd,%eax
movslq %eax,%rcx
lea    0xd3e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0xe,%eax
movslq %eax,%rcx
lea    0xd1c(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    18d8 <bessel_K1+0x7a8>
movsd  0x8a5(%rip),%xmm0
divsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
cvttsd2si -0x18(%rbp),%eax
shl    $0x3,%eax
mov    %eax,-0xc(%rbp)
movslq -0xc(%rbp),%rcx
lea    0x109d(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0x1083(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x2,%eax
movslq %eax,%rcx
lea    0x1061(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x3,%eax
movslq %eax,%rcx
lea    0x103f(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x4,%eax
movslq %eax,%rcx
lea    0x101d(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x5,%eax
movslq %eax,%rcx
lea    0xffb(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x6,%eax
movslq %eax,%rcx
lea    0xfd9(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
mov    -0xc(%rbp),%eax
add    $0x7,%eax
movslq %eax,%rcx
lea    0xfb7(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x18(%rbp),%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1030 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    18dd <bessel_K1+0x7ad>
jmp    18e2 <bessel_K1+0x7b2>
movsd  -0x20(%rbp),%xmm0
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bessel_K1>:
sub    $0x28,%rsp
movapd %xmm0,%xmm3
movsd  0xec0(%rip),%xmm0
ucomisd %xmm3,%xmm0
jbe    1238 <bessel_K1+0x108>
movapd %xmm3,%xmm0
mulsd  %xmm3,%xmm0
movsd  0xece(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xeca(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xec6(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xec2(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xebe(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xeba(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xeb6(%rip),%xmm1
mulsd  %xmm0,%xmm1
addsd  0xeb2(%rip),%xmm1
movsd  0xeb2(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xeae(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xeaa(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xea6(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xea2(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xe9e(%rip),%xmm2
mulsd  %xmm3,%xmm1
movsd  %xmm1,0x8(%rsp)
mulsd  %xmm0,%xmm2
addsd  0xe90(%rip),%xmm2
mulsd  %xmm0,%xmm2
addsd  0xe8c(%rip),%xmm2
divsd  %xmm3,%xmm2
movsd  %xmm2,0x10(%rsp)
movapd %xmm3,%xmm0
call   1040 <log@plt>
mulsd  0x8(%rsp),%xmm0
addsd  0x10(%rsp),%xmm0
add    $0x28,%rsp
ret
movsd  0xdc8(%rip),%xmm0
ucomisd %xmm3,%xmm0
jbe    131a <bessel_K1+0x1ea>
movsd  0xdce(%rip),%xmm0
movapd %xmm0,%xmm1
divsd  %xmm3,%xmm1
subsd  %xmm1,%xmm3
addsd  %xmm3,%xmm0
cvttsd2si %xmm0,%eax
lea    -0x2(%rax),%ecx
cvtsi2sd %ecx,%xmm2
subsd  %xmm3,%xmm2
lea    (%rax,%rax,4),%eax
lea    (%rax,%rax,2),%eax
cltq
lea    0xe40(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x8(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x10(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x18(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x20(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x28(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x30(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x38(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x40(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x48(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x50(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x58(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x60(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x68(%rcx,%rax,8),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x70(%rcx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
add    $0x28,%rsp
ret
movsd  0xcee(%rip),%xmm0
ucomisd %xmm3,%xmm0
jbe    1436 <bessel_K1+0x306>
cvttsd2si %xmm3,%eax
lea    0x1(%rax),%ecx
cvtsi2sd %ecx,%xmm1
subsd  %xmm3,%xmm1
lea    (%rax,%rax,4),%ecx
lea    -0x4b(%rcx,%rcx,2),%eax
movslq %eax,%rdx
lea    0x1134(%rip),%rax
lea    -0x4a(%rcx,%rcx,2),%esi
movslq %esi,%rsi
movsd  (%rax,%rdx,8),%xmm0
mulsd  %xmm1,%xmm0
addsd  (%rax,%rsi,8),%xmm0
lea    -0x49(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x48(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x47(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x46(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x45(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x44(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x43(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x42(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x41(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x40(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x3f(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x3e(%rcx,%rcx,2),%edx
movslq %edx,%rdx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rdx,8),%xmm0
lea    -0x3d(%rcx,%rcx,2),%ecx
movslq %ecx,%rcx
mulsd  %xmm1,%xmm0
addsd  (%rax,%rcx,8),%xmm0
add    $0x28,%rsp
ret
movsd  0xbda(%rip),%xmm0
divsd  %xmm3,%xmm0
cvttsd2si %xmm0,%ecx
lea    0x0(,%rcx,8),%eax
movslq %eax,%rdx
lea    0x13e9(%rip),%rax
lea    0x1(,%rcx,8),%esi
movslq %esi,%rsi
movsd  (%rax,%rdx,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rax,%rsi,8),%xmm1
lea    0x2(,%rcx,8),%edx
movslq %edx,%rdx
mulsd  %xmm0,%xmm1
addsd  (%rax,%rdx,8),%xmm1
lea    0x3(,%rcx,8),%edx
movslq %edx,%rdx
mulsd  %xmm0,%xmm1
addsd  (%rax,%rdx,8),%xmm1
lea    0x4(,%rcx,8),%edx
movslq %edx,%rdx
mulsd  %xmm0,%xmm1
addsd  (%rax,%rdx,8),%xmm1
lea    0x5(,%rcx,8),%edx
movslq %edx,%rdx
mulsd  %xmm0,%xmm1
addsd  (%rax,%rdx,8),%xmm1
lea    0x6(,%rcx,8),%edx
movslq %edx,%rdx
mulsd  %xmm0,%xmm1
addsd  (%rax,%rdx,8),%xmm1
lea    0x7(,%rcx,8),%ecx
movslq %ecx,%rcx
mulsd  %xmm0,%xmm1
addsd  (%rax,%rcx,8),%xmm1
movsd  %xmm1,0x8(%rsp)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     14f7 <bessel_K1+0x3c7>
sqrtsd %xmm0,%xmm0
jmp    1508 <bessel_K1+0x3d8>
movapd %xmm3,0x10(%rsp)
call   1050 <sqrt@plt>
movapd 0x10(%rsp),%xmm3
movsd  0x8(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
xorpd  0xb90(%rip),%xmm3
movapd %xmm3,%xmm0
call   1030 <exp@plt>
mulsd  0x8(%rsp),%xmm0
add    $0x28,%rsp
ret

LLVM IR (-O0):
@bessel_K1.a = internal constant [16 x double] [double 0x3D4552F0EEA0EAFD, double 0x3DC27E1D69FC436E, double 0x3E3845C8D7537F0A, double 0x3EA6C16C16A0B23A, double 0x3F0C71C71C71DC71, double 0x3F6555555555554F, double 6.250000e-02, double 5.000000e-01, double 0xBDD8AE6E4EB5B562, double 0xBE4E208CE6EB1D1F, double 0xBEBA2918CC95B6D6, double 0xBF1D802AF6D960AF, double 0xBF7303AE72A0785A, double 0xBFB5DADB01454140, double 0xBFD3B5B6028A83D8, double 1.000000e+00]
@bessel_K1.b = internal constant [120 x double] [double 0xBDA4AEDA0EDE4B54, double 0x3DC136333920EDC3, double 0x3DFCDDA64F256436, double 0xBE31E1F2C07BBC81, double 0x3E4F1A20BA855617, double 0x3E490AB3E170828C, double 0xBE978113AA7FAAA3, double 0x3EB82A974282915C, double 0x3EA1FA9F0E7712F0, double 0xBF027B245388991B, double 0x3F267AB19ED35F55, double 0xBF05A405052597D8, double 0xBF733A578A49BE53, double 0x3FA1F6B5A82D40BB, double 0x3FC9AE6E9A276258, double 0x3DC2B0EEB49F7C94, double 0x3DD3AB83F7489A3A, double 0xBE291B0DC66020D1, double 0x3E4F55D3FC667128, double 0xBE3C685988C72745, double 0xBE8AD4E3E9F6C0E0, double 0x3EA3DC064FBBF84A, double 0x3EC06918B8821FD7, double 0xBEF09522FCC53415, double 0x3EE01AB8DA7C93A2, double 0x3F329520300E2D1C, double 0xBF50BDB62A8BE455, double 0xBF6A62044E434409, double 0x3FA6454DBB9C974E, double 0x3FC49F049909DCEF, double 0xBDECC57DFB7612C5, double 0x3E0B512FA8A11517, double 0x3E305229290A74CA, double 0xBE58C71EB97C8216, double 0xBE59AA5FAB4B6ABC, double 0x3E956ADE9853F9A2, double 0x3E95E77E6A61B559, double 0xBED64CC3398741E1, double 0xBECA18B834F0A09A, double 0x3F1844A9F8A549E0, double 0x3EA92FEC6B61BE84, double 0xBF5C89018B87644F, double 0x3F53E347FDD31561, double 0x3FA77D8AD7AC8E83, double 0x3FBD9C4030D5CA8B, double 0x3DF5B4082B3D463D, double 0xBE21252770885F16, double 0x3E0DE10601B0BF49, double 0x3E4900AF5F799BCE, double 0x3E6761C712E2C918, double 0xBE8435E21E3C0759, double 0xBEB0F2A8DCD27581, double 0x3EA9D66BF143B7BD, double 0x3EF4881ED0CF1AB6, double 0x3EF44C7F60B0B003, double 0xBF363CE6E73E7DE5, double 0xBF4E9C5BCA2BAC9E, double 0x3F76DB1001136148, double 0x3FA3CC61B243F501, double 0x3FB2994C50D5DAE8, double 0xBDDFC2EEA523CE19, double 0x3E0C449AFDB2DAA9, double 0xBE01409EBD1A6922, double 0xBE19A5EC215677F9, double 0xBE5D1B5FC030A3BD, double 0xBE66A8941FA0D7BB, double 0x3E99000895919591, double 0x3EC4726D268D1A71, double 0x3EB7B9EAF7B42EB1, double 0xBF0991505E2C2758, double 0xBF2C6B10FBB30BC4, double 0x3F33380A8281B8C8, double 0x3F7A4010A7A5AF60, double 0x3F9AAE1081A7AB12, double 0x3FA48F623CD6DF0A, double 0x3DBC0B74FF6FCC22, double 0xBDE295562F48641F, double 0xBDD6E4655C4F9B0D, double 0xBE10CBBE59AD0122, double 0x3E2DC6377809003C, double 0x3E6558A8EE563D8D, double 0x3E8558327636C95B, double 0xBE840647EE421343, double 0xBED68E8CB9843313, double 0xBEFCD9B23850E5CB, double 0xBEE486E5B5B2C48F, double 0x3F4732199DA5F18C, double 0x3F733CF903C6F82B, double 0x3F8E3303BEAF388A, double 0x3F9487A0430D47F9, double 0xBD8EA1C6C563FA94, double 0x3D7AAA2DC7AF6B07, double 0x3DA2C22E2DAA390B, double 0x3DF6FD89E8CF6CE1, double 0x3E215FBF7F160183, double 0x3E36D1809750B02C, double 0xBE608906D103D4F5, double 0xBE9DD5618854EAA3, double 0xBEC460F0E57DD435, double 0xBECAF3AAD0F3223E, double 0x3F0F0D196012FB96, double 0x3F429EA7D463A688, double 0x3F663E47DF57894B, double 0x3F7E576B17E2F770, double 0x3F830E357AA98CCA, double 0xBD537AF702677628, double 0x3D8C22C2603A6077, double 0x3DA4B3C76D55CA5D, double 0x3DD2AC791F51FA76, double 0x3DC328EAADD0BC61, double 0xBE26263C71D81F84, double 0xBE5E65DAA175A359, double 0xBE85FD8B69E0CBB2, double 0xBE95D32DE15E37A3, double 0x3ED0EFEB29809CC5, double 0x3F0B3843647837E6, double 0x3F35E6F34549D615, double 0x3F5672020C22B76F, double 0x3F6C2F619CEE3117, double 0x3F70CFA9787909BC]
@bessel_K1.c = internal constant [120 x double] [double 0x3D93EA4BDE2188B7, double 0x3DA7C3A8CC04E117, double 0x3DDA718AA8E46366, double 0x3E03A89DDBC16C96, double 0x3E2EFD97D2F5CF5C, double 0x3E581F3281612C59, double 0x3E825B5E3C447B61, double 0x3EAAB24DC50603A2, double 0x3ED20AA246AE0819, double 0x3EF5F0213B64FD07, double 0x3F1716E4DBACBE6B, double 0x3F3405575BA47F2A, double 0x3F4AA39433078847, double 0x3F580D288A51DCA6, double 0x3F5604CECF1CA601, double 0x3D6ABF4509119FC0, double 0xBD4FD458232C45F1, double 0x3DB3AFA7A62066DA, double 0x3DD9246BFA05E1A6, double 0x3E088686C70A1802, double 0x3E35715702B254BC, double 0x3E6220F1CABF7245, double 0x3E8CA811FD4B181F, double 0x3EB4A8F970B6F7BD, double 0x3EDA63D7A540F0E8, double 0x3EFCD42854C92F07, double 0x3F19B66DA631FBF2, double 0x3F317A87EB33EBA5, double 0x3F400BB98C0E05A7, double 0x3F3DC3EAED76506F, double 0x3D3A82647B844810, double 0x3D3560473E57D432, double 0x3D8AAEFFC9ADA337, double 0x3DB63694E183E878, double 0x3DE724B419DA3A2F, double 0x3E162CF199C53047, double 0x3E4416D67F7934AD, double 0x3E70C50A9752FC76, double 0x3E9939391EDD086C, double 0x3EC0A440BB1E667C, double 0x3EE2A3F83E7BDDF4, double 0x3F00F3B253F980B6, double 0x3F176695B1C5B9F2, double 0x3F25BE6832C95CB0, double 0x3F245D535DF4BB3A, double 0x3D115E172EC4307F, double 0x3D20246F9A1EE34E, double 0x3D66E5BF2C479DEB, double 0x3D96674E8E14AE30, double 0x3DC8BA596F0EC861, double 0x3DF931CF64506A4F, double 0x3E27EC087FF2FB1D, double 0x3E54B8A0793B96C8, double 0x3E800A199A757291, double 0x3EA5A5A963A99855, double 0x3EC8AE58C7B933C3, double 0x3EE6C36DF4C91E98, double 0x3EFFC796F32235D0, double 0x3F0DCD11403F2E32, double 0x3F0C1F09D981E1EB, double 0x3CEBFE169615DCAD, double 0x3D03916A3679D688, double 0x3D46E1C3AAD4FCC3, double 0x3D78D041A1C847CD, double 0x3DACA14D48CD3039, double 0x3DDE6E25EDE45EDB, double 0x3E0DDAFA7499F7EA, double 0x3E3A8A4AA6A88179, double 0x3E64F835AC383946, double 0x3E8CC441A3AAD1A4, double 0x3EB09D8193DFB3A5, double 0x3ECEF99F8F869361, double 0x3EE5CF644A5B49F3, double 0x3EF49965F95B7931, double 0x3EF38DFDF41990D2, double 0x3CCA3D867A55EE41, double 0x3CE77D11E9814F42, double 0x3D29441018A191A9, double 0x3D5D536138B26FFE, double 0x3D917C96DF2955CB, double 0x3DC326BA52314663, double 0x3DF33CA017A885B7, double 0x3E216D0D2BA11F20, double 0x3E4BF4E8E89BE8EE, double 0x3E7369834247F99E, double 0x3E96A653DD9BC750, double 0x3EB54976A6274F12, double 0x3ECE2ED9DEBCA6B5, double 0x3EDCABE98F81D63C, double 0x3EDB59B888A0B5A8, double 0x3CAB6B81D6BBE265, double 0x3CCCD98054FC82C9, double 0x3D0DD3A850581919, double 0x3D422262160E98C8, double 0x3D762A9800D3206E, double 0x3DA8CFEFE3480703, double 0x3DD95C5317652524, double 0x3E074CCF3C8DE1E9, double 0x3E32E81F02DD574B, double 0x3E5A818F0FDA195E, double 0x3E7F2BA0B707645E, double 0x3E9D7CE66407D5EF, double 0x3EB5058AAFDC753A, double 0x3EC4102EFE651072, double 0x3EC3375D3C05C605, double 0x3C8EF620608D71DC, double 0x3CB22FD083F293D0, double 0x3CF26F4543646B6D, double 0x3D272ABDC203F340, double 0x3D5CD9B1CC64B63B, double 0x3D9069C92982E52B, double 0x3DC0FFD6A21E160C, double 0x3DEF93ECF641D382, double 0x3E19DAF3B67D686E, double 0x3E42429F08889BC4, double 0x3E659BFEA88CF376, double 0x3E848D6C3B0717F7, double 0x3E9D6FF3FF8ABF01, double 0x3EAC34AD2C7FBC77, double 0x3EAB1B7461093276]
@bessel_K1.d = internal constant [40 x double] [double 0x3D3A00126DA64DD8, double 0xBD845435D3344233, double 0x3DCFBC97FC8CEE54, double 0xBE1EED7E9429C428, double 0x3E749E5E68468AA5, double 0xBED6176536E198FA, double 0x3F50918BE92EDF08, double 0x3FC4B5EEE37A973C, double 0x3D3146FA4CF22A84, double 0xBD82808C59D97ACA, double 0x3DCF62BC6EE06990, double 0xBE1EE8677CAEC80B, double 0x3E749E47345553A9, double 0xBED61764F53FBDCF, double 0x3F50918BE9147D38, double 0x3FC4B5EEE37AA076, double 0x3D27E6DD466EA159, double 0xBD80375BA8A9EB0E, double 0x3DCE87D99FC46D15, double 0xBE1ED1498381C697, double 0x3E749D88C445549A, double 0xBED617613A5EA97D, double 0x3F50918BE672E286, double 0x3FC4B5EEE37C3C64, double 0x3D2110D2AD1BD29D, double 0xBD7BFF7BB7729BCD, double 0x3DCD49EADACDD091, double 0xBE1E9F750C4F6853, double 0x3E749B2CA4013AE1, double 0xBED6174FF11A32DA, double 0x3F50918BD4BEAC59, double 0x3FC4B5EEE38BE01E, double 0x3D19020887EBCF84, double 0xBD7809C21D7A0F9F, double 0x3DCBCF3B15841EAD, double 0xBE1E508B0C34D9F9, double 0x3E74963883191DAF, double 0xBED6171FFCC1FDCF, double 0x3F50918B9403B434, double 0x3FC4B5EEE3D70DD4]
define double @bessel_K1(double %0) {
%2 = alloca double
%3 = alloca i32
%4 = alloca double
%5 = alloca double
%6 = alloca double
store double %0, double* %2
%7 = load double, double* %2
%8 = fcmp olt double %7, 8.000000e-01
br i1 %8, label %9, label %65
9: ; preds = %1
%10 = load double, double* %2
%11 = load double, double* %2
%12 = fmul double %10, %11
store double %12, double* %4
%13 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 0)
%14 = load double, double* %4
%15 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 1)
%16 = call double @llvm.fmuladd.f64(double %13, double %14, double %15)
%17 = load double, double* %4
%18 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 2)
%19 = call double @llvm.fmuladd.f64(double %16, double %17, double %18)
%20 = load double, double* %4
%21 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 3)
%22 = call double @llvm.fmuladd.f64(double %19, double %20, double %21)
%23 = load double, double* %4
%24 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 4)
%25 = call double @llvm.fmuladd.f64(double %22, double %23, double %24)
%26 = load double, double* %4
%27 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 5)
%28 = call double @llvm.fmuladd.f64(double %25, double %26, double %27)
%29 = load double, double* %4
%30 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 6)
%31 = call double @llvm.fmuladd.f64(double %28, double %29, double %30)
%32 = load double, double* %4
%33 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 7)
%34 = call double @llvm.fmuladd.f64(double %31, double %32, double %33)
%35 = load double, double* %2
%36 = fmul double %34, %35
store double %36, double* %5
%37 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 8)
%38 = load double, double* %4
%39 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 9)
%40 = call double @llvm.fmuladd.f64(double %37, double %38, double %39)
%41 = load double, double* %4
%42 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 10)
%43 = call double @llvm.fmuladd.f64(double %40, double %41, double %42)
%44 = load double, double* %4
%45 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 11)
%46 = call double @llvm.fmuladd.f64(double %43, double %44, double %45)
%47 = load double, double* %4
%48 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 12)
%49 = call double @llvm.fmuladd.f64(double %46, double %47, double %48)
%50 = load double, double* %4
%51 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 13)
%52 = call double @llvm.fmuladd.f64(double %49, double %50, double %51)
%53 = load double, double* %4
%54 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 14)
%55 = call double @llvm.fmuladd.f64(double %52, double %53, double %54)
%56 = load double, double* %4
%57 = load double, double* getelementptr inbounds ([16 x double], [16 x double]* @bessel_K1.a, i64 0, i64 15)
%58 = call double @llvm.fmuladd.f64(double %55, double %56, double %57)
%59 = load double, double* %2
%60 = fdiv double %58, %59
%61 = load double, double* %5
%62 = load double, double* %2
%63 = call double @log(double %62)
%64 = call double @llvm.fmuladd.f64(double %61, double %63, double %60)
store double %64, double* %5
br label %372
65: ; preds = %1
%66 = load double, double* %2
%67 = fcmp olt double %66, 5.500000e+00
br i1 %67, label %68, label %188
68: ; preds = %65
%69 = load double, double* %2
%70 = fdiv double 3.000000e+00, %69
store double %70, double* %6
%71 = load double, double* %2
%72 = load double, double* %6
%73 = fsub double %71, %72
store double %73, double* %4
%74 = load double, double* %4
%75 = fadd double %74, 3.000000e+00
%76 = fptosi double %75 to i32
store i32 %76, i32* %3
%77 = load i32, i32* %3
%78 = sub nsw i32 %77, 2
%79 = sitofp i32 %78 to double
%80 = load double, double* %4
%81 = fsub double %79, %80
store double %81, double* %4
%82 = load i32, i32* %3
%83 = mul nsw i32 %82, 15
store i32 %83, i32* %3
%84 = load i32, i32* %3
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %85
%87 = load double, double* %86
%88 = load double, double* %4
%89 = load i32, i32* %3
%90 = add nsw i32 %89, 1
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.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* %4
%96 = load i32, i32* %3
%97 = add nsw i32 %96, 2
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.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* %4
%103 = load i32, i32* %3
%104 = add nsw i32 %103, 3
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.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* %4
%110 = load i32, i32* %3
%111 = add nsw i32 %110, 4
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.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* %4
%117 = load i32, i32* %3
%118 = add nsw i32 %117, 5
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.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* %4
%124 = load i32, i32* %3
%125 = add nsw i32 %124, 6
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.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* %4
%131 = load i32, i32* %3
%132 = add nsw i32 %131, 7
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.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* %4
%138 = load i32, i32* %3
%139 = add nsw i32 %138, 8
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %140
%142 = load double, double* %141
%143 = call double @llvm.fmuladd.f64(double %136, double %137, double %142)
%144 = load double, double* %4
%145 = load i32, i32* %3
%146 = add nsw i32 %145, 9
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %147
%149 = load double, double* %148
%150 = call double @llvm.fmuladd.f64(double %143, double %144, double %149)
%151 = load double, double* %4
%152 = load i32, i32* %3
%153 = add nsw i32 %152, 10
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %154
%156 = load double, double* %155
%157 = call double @llvm.fmuladd.f64(double %150, double %151, double %156)
%158 = load double, double* %4
%159 = load i32, i32* %3
%160 = add nsw i32 %159, 11
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %161
%163 = load double, double* %162
%164 = call double @llvm.fmuladd.f64(double %157, double %158, double %163)
%165 = load double, double* %4
%166 = load i32, i32* %3
%167 = add nsw i32 %166, 12
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %168
%170 = load double, double* %169
%171 = call double @llvm.fmuladd.f64(double %164, double %165, double %170)
%172 = load double, double* %4
%173 = load i32, i32* %3
%174 = add nsw i32 %173, 13
%175 = sext i32 %174 to i64
%176 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %175
%177 = load double, double* %176
%178 = call double @llvm.fmuladd.f64(double %171, double %172, double %177)
%179 = load double, double* %4
%180 = load i32, i32* %3
%181 = add nsw i32 %180, 14
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %182
%184 = load double, double* %183
%185 = call double @llvm.fmuladd.f64(double %178, double %179, double %184)
%186 = load double, double* %6
%187 = fmul double %185, %186
store double %187, double* %5
br label %371
188: ; preds = %65
%189 = load double, double* %2
%190 = fcmp olt double %189, 1.250000e+01
br i1 %190, label %191, label %304
191: ; preds = %188
%192 = load double, double* %2
%193 = fptosi double %192 to i32
store i32 %193, i32* %3
%194 = load i32, i32* %3
%195 = add nsw i32 %194, 1
%196 = sitofp i32 %195 to double
%197 = load double, double* %2
%198 = fsub double %196, %197
store double %198, double* %4
%199 = load i32, i32* %3
%200 = sub nsw i32 %199, 5
%201 = mul nsw i32 15, %200
store i32 %201, i32* %3
%202 = load i32, i32* %3
%203 = sext i32 %202 to i64
%204 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %203
%205 = load double, double* %204
%206 = load double, double* %4
%207 = load i32, i32* %3
%208 = add nsw i32 %207, 1
%209 = sext i32 %208 to i64
%210 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %209
%211 = load double, double* %210
%212 = call double @llvm.fmuladd.f64(double %205, double %206, double %211)
%213 = load double, double* %4
%214 = load i32, i32* %3
%215 = add nsw i32 %214, 2
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %216
%218 = load double, double* %217
%219 = call double @llvm.fmuladd.f64(double %212, double %213, double %218)
%220 = load double, double* %4
%221 = load i32, i32* %3
%222 = add nsw i32 %221, 3
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %223
%225 = load double, double* %224
%226 = call double @llvm.fmuladd.f64(double %219, double %220, double %225)
%227 = load double, double* %4
%228 = load i32, i32* %3
%229 = add nsw i32 %228, 4
%230 = sext i32 %229 to i64
%231 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %230
%232 = load double, double* %231
%233 = call double @llvm.fmuladd.f64(double %226, double %227, double %232)
%234 = load double, double* %4
%235 = load i32, i32* %3
%236 = add nsw i32 %235, 5
%237 = sext i32 %236 to i64
%238 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %237
%239 = load double, double* %238
%240 = call double @llvm.fmuladd.f64(double %233, double %234, double %239)
%241 = load double, double* %4
%242 = load i32, i32* %3
%243 = add nsw i32 %242, 6
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %244
%246 = load double, double* %245
%247 = call double @llvm.fmuladd.f64(double %240, double %241, double %246)
%248 = load double, double* %4
%249 = load i32, i32* %3
%250 = add nsw i32 %249, 7
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %251
%253 = load double, double* %252
%254 = call double @llvm.fmuladd.f64(double %247, double %248, double %253)
%255 = load double, double* %4
%256 = load i32, i32* %3
%257 = add nsw i32 %256, 8
%258 = sext i32 %257 to i64
%259 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %258
%260 = load double, double* %259
%261 = call double @llvm.fmuladd.f64(double %254, double %255, double %260)
%262 = load double, double* %4
%263 = load i32, i32* %3
%264 = add nsw i32 %263, 9
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %265
%267 = load double, double* %266
%268 = call double @llvm.fmuladd.f64(double %261, double %262, double %267)
%269 = load double, double* %4
%270 = load i32, i32* %3
%271 = add nsw i32 %270, 10
%272 = sext i32 %271 to i64
%273 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %272
%274 = load double, double* %273
%275 = call double @llvm.fmuladd.f64(double %268, double %269, double %274)
%276 = load double, double* %4
%277 = load i32, i32* %3
%278 = add nsw i32 %277, 11
%279 = sext i32 %278 to i64
%280 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %279
%281 = load double, double* %280
%282 = call double @llvm.fmuladd.f64(double %275, double %276, double %281)
%283 = load double, double* %4
%284 = load i32, i32* %3
%285 = add nsw i32 %284, 12
%286 = sext i32 %285 to i64
%287 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %286
%288 = load double, double* %287
%289 = call double @llvm.fmuladd.f64(double %282, double %283, double %288)
%290 = load double, double* %4
%291 = load i32, i32* %3
%292 = add nsw i32 %291, 13
%293 = sext i32 %292 to i64
%294 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %293
%295 = load double, double* %294
%296 = call double @llvm.fmuladd.f64(double %289, double %290, double %295)
%297 = load double, double* %4
%298 = load i32, i32* %3
%299 = add nsw i32 %298, 14
%300 = sext i32 %299 to i64
%301 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %300
%302 = load double, double* %301
%303 = call double @llvm.fmuladd.f64(double %296, double %297, double %302)
store double %303, double* %5
br label %370
304: ; preds = %188
%305 = load double, double* %2
%306 = fdiv double 6.000000e+01, %305
store double %306, double* %4
%307 = load double, double* %4
%308 = fptosi double %307 to i32
%309 = mul nsw i32 8, %308
store i32 %309, i32* %3
%310 = load i32, i32* %3
%311 = sext i32 %310 to i64
%312 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %311
%313 = load double, double* %312
%314 = load double, double* %4
%315 = load i32, i32* %3
%316 = add nsw i32 %315, 1
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %317
%319 = load double, double* %318
%320 = call double @llvm.fmuladd.f64(double %313, double %314, double %319)
%321 = load double, double* %4
%322 = load i32, i32* %3
%323 = add nsw i32 %322, 2
%324 = sext i32 %323 to i64
%325 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %324
%326 = load double, double* %325
%327 = call double @llvm.fmuladd.f64(double %320, double %321, double %326)
%328 = load double, double* %4
%329 = load i32, i32* %3
%330 = add nsw i32 %329, 3
%331 = sext i32 %330 to i64
%332 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %331
%333 = load double, double* %332
%334 = call double @llvm.fmuladd.f64(double %327, double %328, double %333)
%335 = load double, double* %4
%336 = load i32, i32* %3
%337 = add nsw i32 %336, 4
%338 = sext i32 %337 to i64
%339 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %338
%340 = load double, double* %339
%341 = call double @llvm.fmuladd.f64(double %334, double %335, double %340)
%342 = load double, double* %4
%343 = load i32, i32* %3
%344 = add nsw i32 %343, 5
%345 = sext i32 %344 to i64
%346 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %345
%347 = load double, double* %346
%348 = call double @llvm.fmuladd.f64(double %341, double %342, double %347)
%349 = load double, double* %4
%350 = load i32, i32* %3
%351 = add nsw i32 %350, 6
%352 = sext i32 %351 to i64
%353 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %352
%354 = load double, double* %353
%355 = call double @llvm.fmuladd.f64(double %348, double %349, double %354)
%356 = load double, double* %4
%357 = load i32, i32* %3
%358 = add nsw i32 %357, 7
%359 = sext i32 %358 to i64
%360 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %359
%361 = load double, double* %360
%362 = call double @llvm.fmuladd.f64(double %355, double %356, double %361)
%363 = load double, double* %4
%364 = call double @sqrt(double %363)
%365 = fmul double %362, %364
%366 = load double, double* %2
%367 = fneg double %366
%368 = call double @exp(double %367)
%369 = fmul double %365, %368
store double %369, double* %5
br label %370
370: ; preds = %304, %191
br label %371
371: ; preds = %370, %68
br label %372
372: ; preds = %371, %9
%373 = load double, double* %5
ret double %373
}

LLVM IR (-O2):
@bessel_K1.b = internal unnamed_addr constant [120 x double] [double 0xBDA4AEDA0EDE4B54, double 0x3DC136333920EDC3, double 0x3DFCDDA64F256436, double 0xBE31E1F2C07BBC81, double 0x3E4F1A20BA855617, double 0x3E490AB3E170828C, double 0xBE978113AA7FAAA3, double 0x3EB82A974282915C, double 0x3EA1FA9F0E7712F0, double 0xBF027B245388991B, double 0x3F267AB19ED35F55, double 0xBF05A405052597D8, double 0xBF733A578A49BE53, double 0x3FA1F6B5A82D40BB, double 0x3FC9AE6E9A276258, double 0x3DC2B0EEB49F7C94, double 0x3DD3AB83F7489A3A, double 0xBE291B0DC66020D1, double 0x3E4F55D3FC667128, double 0xBE3C685988C72745, double 0xBE8AD4E3E9F6C0E0, double 0x3EA3DC064FBBF84A, double 0x3EC06918B8821FD7, double 0xBEF09522FCC53415, double 0x3EE01AB8DA7C93A2, double 0x3F329520300E2D1C, double 0xBF50BDB62A8BE455, double 0xBF6A62044E434409, double 0x3FA6454DBB9C974E, double 0x3FC49F049909DCEF, double 0xBDECC57DFB7612C5, double 0x3E0B512FA8A11517, double 0x3E305229290A74CA, double 0xBE58C71EB97C8216, double 0xBE59AA5FAB4B6ABC, double 0x3E956ADE9853F9A2, double 0x3E95E77E6A61B559, double 0xBED64CC3398741E1, double 0xBECA18B834F0A09A, double 0x3F1844A9F8A549E0, double 0x3EA92FEC6B61BE84, double 0xBF5C89018B87644F, double 0x3F53E347FDD31561, double 0x3FA77D8AD7AC8E83, double 0x3FBD9C4030D5CA8B, double 0x3DF5B4082B3D463D, double 0xBE21252770885F16, double 0x3E0DE10601B0BF49, double 0x3E4900AF5F799BCE, double 0x3E6761C712E2C918, double 0xBE8435E21E3C0759, double 0xBEB0F2A8DCD27581, double 0x3EA9D66BF143B7BD, double 0x3EF4881ED0CF1AB6, double 0x3EF44C7F60B0B003, double 0xBF363CE6E73E7DE5, double 0xBF4E9C5BCA2BAC9E, double 0x3F76DB1001136148, double 0x3FA3CC61B243F501, double 0x3FB2994C50D5DAE8, double 0xBDDFC2EEA523CE19, double 0x3E0C449AFDB2DAA9, double 0xBE01409EBD1A6922, double 0xBE19A5EC215677F9, double 0xBE5D1B5FC030A3BD, double 0xBE66A8941FA0D7BB, double 0x3E99000895919591, double 0x3EC4726D268D1A71, double 0x3EB7B9EAF7B42EB1, double 0xBF0991505E2C2758, double 0xBF2C6B10FBB30BC4, double 0x3F33380A8281B8C8, double 0x3F7A4010A7A5AF60, double 0x3F9AAE1081A7AB12, double 0x3FA48F623CD6DF0A, double 0x3DBC0B74FF6FCC22, double 0xBDE295562F48641F, double 0xBDD6E4655C4F9B0D, double 0xBE10CBBE59AD0122, double 0x3E2DC6377809003C, double 0x3E6558A8EE563D8D, double 0x3E8558327636C95B, double 0xBE840647EE421343, double 0xBED68E8CB9843313, double 0xBEFCD9B23850E5CB, double 0xBEE486E5B5B2C48F, double 0x3F4732199DA5F18C, double 0x3F733CF903C6F82B, double 0x3F8E3303BEAF388A, double 0x3F9487A0430D47F9, double 0xBD8EA1C6C563FA94, double 0x3D7AAA2DC7AF6B07, double 0x3DA2C22E2DAA390B, double 0x3DF6FD89E8CF6CE1, double 0x3E215FBF7F160183, double 0x3E36D1809750B02C, double 0xBE608906D103D4F5, double 0xBE9DD5618854EAA3, double 0xBEC460F0E57DD435, double 0xBECAF3AAD0F3223E, double 0x3F0F0D196012FB96, double 0x3F429EA7D463A688, double 0x3F663E47DF57894B, double 0x3F7E576B17E2F770, double 0x3F830E357AA98CCA, double 0xBD537AF702677628, double 0x3D8C22C2603A6077, double 0x3DA4B3C76D55CA5D, double 0x3DD2AC791F51FA76, double 0x3DC328EAADD0BC61, double 0xBE26263C71D81F84, double 0xBE5E65DAA175A359, double 0xBE85FD8B69E0CBB2, double 0xBE95D32DE15E37A3, double 0x3ED0EFEB29809CC5, double 0x3F0B3843647837E6, double 0x3F35E6F34549D615, double 0x3F5672020C22B76F, double 0x3F6C2F619CEE3117, double 0x3F70CFA9787909BC]
@bessel_K1.c = internal unnamed_addr constant [120 x double] [double 0x3D93EA4BDE2188B7, double 0x3DA7C3A8CC04E117, double 0x3DDA718AA8E46366, double 0x3E03A89DDBC16C96, double 0x3E2EFD97D2F5CF5C, double 0x3E581F3281612C59, double 0x3E825B5E3C447B61, double 0x3EAAB24DC50603A2, double 0x3ED20AA246AE0819, double 0x3EF5F0213B64FD07, double 0x3F1716E4DBACBE6B, double 0x3F3405575BA47F2A, double 0x3F4AA39433078847, double 0x3F580D288A51DCA6, double 0x3F5604CECF1CA601, double 0x3D6ABF4509119FC0, double 0xBD4FD458232C45F1, double 0x3DB3AFA7A62066DA, double 0x3DD9246BFA05E1A6, double 0x3E088686C70A1802, double 0x3E35715702B254BC, double 0x3E6220F1CABF7245, double 0x3E8CA811FD4B181F, double 0x3EB4A8F970B6F7BD, double 0x3EDA63D7A540F0E8, double 0x3EFCD42854C92F07, double 0x3F19B66DA631FBF2, double 0x3F317A87EB33EBA5, double 0x3F400BB98C0E05A7, double 0x3F3DC3EAED76506F, double 0x3D3A82647B844810, double 0x3D3560473E57D432, double 0x3D8AAEFFC9ADA337, double 0x3DB63694E183E878, double 0x3DE724B419DA3A2F, double 0x3E162CF199C53047, double 0x3E4416D67F7934AD, double 0x3E70C50A9752FC76, double 0x3E9939391EDD086C, double 0x3EC0A440BB1E667C, double 0x3EE2A3F83E7BDDF4, double 0x3F00F3B253F980B6, double 0x3F176695B1C5B9F2, double 0x3F25BE6832C95CB0, double 0x3F245D535DF4BB3A, double 0x3D115E172EC4307F, double 0x3D20246F9A1EE34E, double 0x3D66E5BF2C479DEB, double 0x3D96674E8E14AE30, double 0x3DC8BA596F0EC861, double 0x3DF931CF64506A4F, double 0x3E27EC087FF2FB1D, double 0x3E54B8A0793B96C8, double 0x3E800A199A757291, double 0x3EA5A5A963A99855, double 0x3EC8AE58C7B933C3, double 0x3EE6C36DF4C91E98, double 0x3EFFC796F32235D0, double 0x3F0DCD11403F2E32, double 0x3F0C1F09D981E1EB, double 0x3CEBFE169615DCAD, double 0x3D03916A3679D688, double 0x3D46E1C3AAD4FCC3, double 0x3D78D041A1C847CD, double 0x3DACA14D48CD3039, double 0x3DDE6E25EDE45EDB, double 0x3E0DDAFA7499F7EA, double 0x3E3A8A4AA6A88179, double 0x3E64F835AC383946, double 0x3E8CC441A3AAD1A4, double 0x3EB09D8193DFB3A5, double 0x3ECEF99F8F869361, double 0x3EE5CF644A5B49F3, double 0x3EF49965F95B7931, double 0x3EF38DFDF41990D2, double 0x3CCA3D867A55EE41, double 0x3CE77D11E9814F42, double 0x3D29441018A191A9, double 0x3D5D536138B26FFE, double 0x3D917C96DF2955CB, double 0x3DC326BA52314663, double 0x3DF33CA017A885B7, double 0x3E216D0D2BA11F20, double 0x3E4BF4E8E89BE8EE, double 0x3E7369834247F99E, double 0x3E96A653DD9BC750, double 0x3EB54976A6274F12, double 0x3ECE2ED9DEBCA6B5, double 0x3EDCABE98F81D63C, double 0x3EDB59B888A0B5A8, double 0x3CAB6B81D6BBE265, double 0x3CCCD98054FC82C9, double 0x3D0DD3A850581919, double 0x3D422262160E98C8, double 0x3D762A9800D3206E, double 0x3DA8CFEFE3480703, double 0x3DD95C5317652524, double 0x3E074CCF3C8DE1E9, double 0x3E32E81F02DD574B, double 0x3E5A818F0FDA195E, double 0x3E7F2BA0B707645E, double 0x3E9D7CE66407D5EF, double 0x3EB5058AAFDC753A, double 0x3EC4102EFE651072, double 0x3EC3375D3C05C605, double 0x3C8EF620608D71DC, double 0x3CB22FD083F293D0, double 0x3CF26F4543646B6D, double 0x3D272ABDC203F340, double 0x3D5CD9B1CC64B63B, double 0x3D9069C92982E52B, double 0x3DC0FFD6A21E160C, double 0x3DEF93ECF641D382, double 0x3E19DAF3B67D686E, double 0x3E42429F08889BC4, double 0x3E659BFEA88CF376, double 0x3E848D6C3B0717F7, double 0x3E9D6FF3FF8ABF01, double 0x3EAC34AD2C7FBC77, double 0x3EAB1B7461093276]
@bessel_K1.d = internal unnamed_addr constant [40 x double] [double 0x3D3A00126DA64DD8, double 0xBD845435D3344233, double 0x3DCFBC97FC8CEE54, double 0xBE1EED7E9429C428, double 0x3E749E5E68468AA5, double 0xBED6176536E198FA, double 0x3F50918BE92EDF08, double 0x3FC4B5EEE37A973C, double 0x3D3146FA4CF22A84, double 0xBD82808C59D97ACA, double 0x3DCF62BC6EE06990, double 0xBE1EE8677CAEC80B, double 0x3E749E47345553A9, double 0xBED61764F53FBDCF, double 0x3F50918BE9147D38, double 0x3FC4B5EEE37AA076, double 0x3D27E6DD466EA159, double 0xBD80375BA8A9EB0E, double 0x3DCE87D99FC46D15, double 0xBE1ED1498381C697, double 0x3E749D88C445549A, double 0xBED617613A5EA97D, double 0x3F50918BE672E286, double 0x3FC4B5EEE37C3C64, double 0x3D2110D2AD1BD29D, double 0xBD7BFF7BB7729BCD, double 0x3DCD49EADACDD091, double 0xBE1E9F750C4F6853, double 0x3E749B2CA4013AE1, double 0xBED6174FF11A32DA, double 0x3F50918BD4BEAC59, double 0x3FC4B5EEE38BE01E, double 0x3D19020887EBCF84, double 0xBD7809C21D7A0F9F, double 0x3DCBCF3B15841EAD, double 0xBE1E508B0C34D9F9, double 0x3E74963883191DAF, double 0xBED6171FFCC1FDCF, double 0x3F50918B9403B434, double 0x3FC4B5EEE3D70DD4]
define double @bessel_K1(double %0) {
%2 = fcmp olt double %0, 8.000000e-01
br i1 %2, label %3, label %23
3: ; preds = %1
%4 = fmul double %0, %0
%5 = tail call double @llvm.fmuladd.f64(double %4, double 0x3D4552F0EEA0EAFD, double 0x3DC27E1D69FC436E)
%6 = tail call double @llvm.fmuladd.f64(double %5, double %4, double 0x3E3845C8D7537F0A)
%7 = tail call double @llvm.fmuladd.f64(double %6, double %4, double 0x3EA6C16C16A0B23A)
%8 = tail call double @llvm.fmuladd.f64(double %7, double %4, double 0x3F0C71C71C71DC71)
%9 = tail call double @llvm.fmuladd.f64(double %8, double %4, double 0x3F6555555555554F)
%10 = tail call double @llvm.fmuladd.f64(double %9, double %4, double 6.250000e-02)
%11 = tail call double @llvm.fmuladd.f64(double %10, double %4, double 5.000000e-01)
%12 = fmul double %11, %0
%13 = tail call double @llvm.fmuladd.f64(double %4, double 0xBDD8AE6E4EB5B562, double 0xBE4E208CE6EB1D1F)
%14 = tail call double @llvm.fmuladd.f64(double %13, double %4, double 0xBEBA2918CC95B6D6)
%15 = tail call double @llvm.fmuladd.f64(double %14, double %4, double 0xBF1D802AF6D960AF)
%16 = tail call double @llvm.fmuladd.f64(double %15, double %4, double 0xBF7303AE72A0785A)
%17 = tail call double @llvm.fmuladd.f64(double %16, double %4, double 0xBFB5DADB01454140)
%18 = tail call double @llvm.fmuladd.f64(double %17, double %4, double 0xBFD3B5B6028A83D8)
%19 = tail call double @llvm.fmuladd.f64(double %18, double %4, double 1.000000e+00)
%20 = fdiv double %19, %0
%21 = tail call double @log(double %0)
%22 = tail call double @llvm.fmuladd.f64(double %12, double %21, double %20)
br label %237
23: ; preds = %1
%24 = fcmp olt double %0, 5.500000e+00
br i1 %24, label %25, label %108
25: ; preds = %23
%26 = fdiv double 3.000000e+00, %0
%27 = fsub double %0, %26
%28 = fadd double %27, 3.000000e+00
%29 = fptosi double %28 to i32
%30 = add nsw i32 %29, -2
%31 = sitofp i32 %30 to double
%32 = fsub double %31, %27
%33 = mul nsw i32 %29, 15
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %34
%36 = load double, double* %35
%37 = add nsw i32 %33, 1
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %38
%40 = load double, double* %39
%41 = tail call double @llvm.fmuladd.f64(double %36, double %32, double %40)
%42 = add nsw i32 %33, 2
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %43
%45 = load double, double* %44
%46 = tail call double @llvm.fmuladd.f64(double %41, double %32, double %45)
%47 = add nsw i32 %33, 3
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %48
%50 = load double, double* %49
%51 = tail call double @llvm.fmuladd.f64(double %46, double %32, double %50)
%52 = add nsw i32 %33, 4
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %53
%55 = load double, double* %54
%56 = tail call double @llvm.fmuladd.f64(double %51, double %32, double %55)
%57 = add nsw i32 %33, 5
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %58
%60 = load double, double* %59
%61 = tail call double @llvm.fmuladd.f64(double %56, double %32, double %60)
%62 = add nsw i32 %33, 6
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %63
%65 = load double, double* %64
%66 = tail call double @llvm.fmuladd.f64(double %61, double %32, double %65)
%67 = add nsw i32 %33, 7
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %68
%70 = load double, double* %69
%71 = tail call double @llvm.fmuladd.f64(double %66, double %32, double %70)
%72 = add nsw i32 %33, 8
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %73
%75 = load double, double* %74
%76 = tail call double @llvm.fmuladd.f64(double %71, double %32, double %75)
%77 = add nsw i32 %33, 9
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %78
%80 = load double, double* %79
%81 = tail call double @llvm.fmuladd.f64(double %76, double %32, double %80)
%82 = add nsw i32 %33, 10
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %83
%85 = load double, double* %84
%86 = tail call double @llvm.fmuladd.f64(double %81, double %32, double %85)
%87 = add nsw i32 %33, 11
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %88
%90 = load double, double* %89
%91 = tail call double @llvm.fmuladd.f64(double %86, double %32, double %90)
%92 = add nsw i32 %33, 12
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %93
%95 = load double, double* %94
%96 = tail call double @llvm.fmuladd.f64(double %91, double %32, double %95)
%97 = add nsw i32 %33, 13
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %98
%100 = load double, double* %99
%101 = tail call double @llvm.fmuladd.f64(double %96, double %32, double %100)
%102 = add nsw i32 %33, 14
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.b, i64 0, i64 %103
%105 = load double, double* %104
%106 = tail call double @llvm.fmuladd.f64(double %101, double %32, double %105)
%107 = fmul double %26, %106
br label %237
108: ; preds = %23
%109 = fcmp olt double %0, 1.250000e+01
br i1 %109, label %110, label %190
110: ; preds = %108
%111 = fptosi double %0 to i32
%112 = add nsw i32 %111, 1
%113 = sitofp i32 %112 to double
%114 = fsub double %113, %0
%115 = mul i32 %111, 15
%116 = add i32 %115, -75
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %117
%119 = load double, double* %118
%120 = add i32 %115, -74
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %121
%123 = load double, double* %122
%124 = tail call double @llvm.fmuladd.f64(double %119, double %114, double %123)
%125 = add i32 %115, -73
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %126
%128 = load double, double* %127
%129 = tail call double @llvm.fmuladd.f64(double %124, double %114, double %128)
%130 = add i32 %115, -72
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %131
%133 = load double, double* %132
%134 = tail call double @llvm.fmuladd.f64(double %129, double %114, double %133)
%135 = add i32 %115, -71
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %136
%138 = load double, double* %137
%139 = tail call double @llvm.fmuladd.f64(double %134, double %114, double %138)
%140 = add i32 %115, -70
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %141
%143 = load double, double* %142
%144 = tail call double @llvm.fmuladd.f64(double %139, double %114, double %143)
%145 = add i32 %115, -69
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %146
%148 = load double, double* %147
%149 = tail call double @llvm.fmuladd.f64(double %144, double %114, double %148)
%150 = add i32 %115, -68
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %151
%153 = load double, double* %152
%154 = tail call double @llvm.fmuladd.f64(double %149, double %114, double %153)
%155 = add i32 %115, -67
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %156
%158 = load double, double* %157
%159 = tail call double @llvm.fmuladd.f64(double %154, double %114, double %158)
%160 = add i32 %115, -66
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %161
%163 = load double, double* %162
%164 = tail call double @llvm.fmuladd.f64(double %159, double %114, double %163)
%165 = add i32 %115, -65
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %166
%168 = load double, double* %167
%169 = tail call double @llvm.fmuladd.f64(double %164, double %114, double %168)
%170 = add i32 %115, -64
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %171
%173 = load double, double* %172
%174 = tail call double @llvm.fmuladd.f64(double %169, double %114, double %173)
%175 = add i32 %115, -63
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %176
%178 = load double, double* %177
%179 = tail call double @llvm.fmuladd.f64(double %174, double %114, double %178)
%180 = add i32 %115, -62
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %181
%183 = load double, double* %182
%184 = tail call double @llvm.fmuladd.f64(double %179, double %114, double %183)
%185 = add i32 %115, -61
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds [120 x double], [120 x double]* @bessel_K1.c, i64 0, i64 %186
%188 = load double, double* %187
%189 = tail call double @llvm.fmuladd.f64(double %184, double %114, double %188)
br label %237
190: ; preds = %108
%191 = fdiv double 6.000000e+01, %0
%192 = fptosi double %191 to i32
%193 = shl nsw i32 %192, 3
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %194
%196 = load double, double* %195
%197 = or i32 %193, 1
%198 = sext i32 %197 to i64
%199 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %198
%200 = load double, double* %199
%201 = tail call double @llvm.fmuladd.f64(double %196, double %191, double %200)
%202 = or i32 %193, 2
%203 = sext i32 %202 to i64
%204 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %203
%205 = load double, double* %204
%206 = tail call double @llvm.fmuladd.f64(double %201, double %191, double %205)
%207 = or i32 %193, 3
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %208
%210 = load double, double* %209
%211 = tail call double @llvm.fmuladd.f64(double %206, double %191, double %210)
%212 = or i32 %193, 4
%213 = sext i32 %212 to i64
%214 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %213
%215 = load double, double* %214
%216 = tail call double @llvm.fmuladd.f64(double %211, double %191, double %215)
%217 = or i32 %193, 5
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %218
%220 = load double, double* %219
%221 = tail call double @llvm.fmuladd.f64(double %216, double %191, double %220)
%222 = or i32 %193, 6
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %223
%225 = load double, double* %224
%226 = tail call double @llvm.fmuladd.f64(double %221, double %191, double %225)
%227 = or i32 %193, 7
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds [40 x double], [40 x double]* @bessel_K1.d, i64 0, i64 %228
%230 = load double, double* %229
%231 = tail call double @llvm.fmuladd.f64(double %226, double %191, double %230)
%232 = tail call double @sqrt(double %191)
%233 = fmul double %231, %232
%234 = fneg double %0
%235 = tail call double @exp(double %234)
%236 = fmul double %233, %235
br label %237
237: ; preds = %25, %190, %110, %3
%238 = phi double [ %22, %3 ], [ %107, %25 ], [ %189, %110 ], [ %236, %190 ]
ret double %238
}