// File: /workspace/github_cpp_makefile_star2_O2/mouda[P]LTE_random_access-simulate/specialfunctions.cpp
// Function: alglib_impl::besseli1(double, alglib_impl::ae_state*)
double besseli1(double x, ae_state *_state)
{
    double y;
    double z;
    double v;
    double b0;
    double b1;
    double b2;
    double result;


    z = ae_fabs(x, _state);
    if( ae_fp_less_eq(z,8.0) )
    {
        y = z/2.0-2.0;
        bessel_besselm1firstcheb(2.77791411276104639959E-18, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -2.11142121435816608115E-17, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 1.55363195773620046921E-16, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -1.10559694773538630805E-15, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 7.60068429473540693410E-15, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -5.04218550472791168711E-14, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 3.22379336594557470981E-13, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -1.98397439776494371520E-12, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 1.17361862988909016308E-11, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -6.66348972350202774223E-11, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 3.62559028155211703701E-10, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -1.88724975172282928790E-9, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 9.38153738649577178388E-9, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -4.44505912879632808065E-8, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 2.00329475355213526229E-7, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -8.56872026469545474066E-7, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 3.47025130813767847674E-6, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -1.32731636560394358279E-5, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 4.78156510755005422638E-5, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -1.61760815825896745588E-4, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 5.12285956168575772895E-4, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -1.51357245063125314899E-3, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 4.15642294431288815669E-3, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -1.05640848946261981558E-2, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 2.47264490306265168283E-2, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -5.29459812080949914269E-2, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 1.02643658689847095384E-1, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -1.76416518357834055153E-1, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 2.52587186443633654823E-1, &b0, &b1, &b2, _state);
        v = 0.5*(b0-b2);
        z = v*z*ae_exp(z, _state);
    }
    else
    {
        y = 32.0/z-2.0;
        bessel_besselm1firstcheb(7.51729631084210481353E-18, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 4.41434832307170791151E-18, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -4.65030536848935832153E-17, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -3.20952592199342395980E-17, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 2.96262899764595013876E-16, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 3.30820231092092828324E-16, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -1.88035477551078244854E-15, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -3.81440307243700780478E-15, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 1.04202769841288027642E-14, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 4.27244001671195135429E-14, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -2.10154184277266431302E-14, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -4.08355111109219731823E-13, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -7.19855177624590851209E-13, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 2.03562854414708950722E-12, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 1.41258074366137813316E-11, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 3.25260358301548823856E-11, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -1.89749581235054123450E-11, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -5.58974346219658380687E-10, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -3.83538038596423702205E-9, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -2.63146884688951950684E-8, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -2.51223623787020892529E-7, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -3.88256480887769039346E-6, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -1.10588938762623716291E-4, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, -9.76109749136146840777E-3, &b0, &b1, &b2, _state);
        bessel_besselm1nextcheb(y, 7.78576235018280120474E-1, &b0, &b1, &b2, _state);
        v = 0.5*(b0-b2);
        z = v*ae_exp(z, _state)/ae_sqrt(z, _state);
    }
    if( ae_fp_less(x,0) )
    {
        z = -z;
    }
    result = z;
    return result;
}

// Assembly:
pushq %rbx
subq $0x20, %rsp
movq %rdi, %rbx
movsd %xmm0, 0x18(%rsp)
callq 0x2440c
movsd 0x28291(%rip), %xmm1    # 0x30678
movsd %xmm0, 0x10(%rsp)
callq 0x24259
testb %al, %al
je 0x8670
movsd 0x28086(%rip), %xmm5    # 0x30488
movsd 0x10(%rsp), %xmm0
movapd %xmm0, %xmm1
mulsd %xmm5, %xmm1
addsd 0x27fe8(%rip), %xmm1    # 0x30400
movsd 0x28af8(%rip), %xmm2    # 0x30f18
mulsd %xmm1, %xmm2
addsd 0x28af4(%rip), %xmm2    # 0x30f20
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
addsd 0x28aec(%rip), %xmm3    # 0x30f28
addsd 0x28aec(%rip), %xmm3    # 0x30f30
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x28ae0(%rip), %xmm4    # 0x30f38
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x28ad4(%rip), %xmm2    # 0x30f40
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x28ac8(%rip), %xmm3    # 0x30f48
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x28abc(%rip), %xmm4    # 0x30f50
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x28ab0(%rip), %xmm2    # 0x30f58
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x28aa4(%rip), %xmm3    # 0x30f60
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x28a98(%rip), %xmm4    # 0x30f68
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x28a8c(%rip), %xmm2    # 0x30f70
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x28a80(%rip), %xmm3    # 0x30f78
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x28a74(%rip), %xmm4    # 0x30f80
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x28a68(%rip), %xmm2    # 0x30f88
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x28a5c(%rip), %xmm3    # 0x30f90
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x28a50(%rip), %xmm4    # 0x30f98
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x28a44(%rip), %xmm2    # 0x30fa0
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x28a38(%rip), %xmm3    # 0x30fa8
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x28a2c(%rip), %xmm4    # 0x30fb0
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x28a20(%rip), %xmm2    # 0x30fb8
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x28a14(%rip), %xmm3    # 0x30fc0
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x28a08(%rip), %xmm4    # 0x30fc8
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x289fc(%rip), %xmm2    # 0x30fd0
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x289f0(%rip), %xmm3    # 0x30fd8
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x289e4(%rip), %xmm4    # 0x30fe0
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x289d8(%rip), %xmm2    # 0x30fe8
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x289cc(%rip), %xmm3    # 0x30ff0
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x289c0(%rip), %xmm4    # 0x30ff8
mulsd %xmm1, %xmm4
subsd %xmm3, %xmm4
addsd 0x289b8(%rip), %xmm4    # 0x31000
subsd %xmm3, %xmm4
mulsd %xmm5, %xmm4
mulsd %xmm0, %xmm4
movsd %xmm4, (%rsp)
movq %rbx, %rdi
callq 0x24569
mulsd (%rsp), %xmm0
movapd %xmm0, (%rsp)
jmp 0x88ad
movsd 0x28610(%rip), %xmm4    # 0x30c88
movsd 0x10(%rsp), %xmm1
divsd %xmm1, %xmm4
movapd %xmm1, %xmm0
addsd 0x27d72(%rip), %xmm4    # 0x30400
movsd 0x287b2(%rip), %xmm1    # 0x30e48
mulsd %xmm4, %xmm1
addsd 0x287ae(%rip), %xmm1    # 0x30e50
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
addsd 0x287a6(%rip), %xmm2    # 0x30e58
addsd 0x287a6(%rip), %xmm2    # 0x30e60
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2879a(%rip), %xmm3    # 0x30e68
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2878e(%rip), %xmm1    # 0x30e70
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x28782(%rip), %xmm2    # 0x30e78
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x28776(%rip), %xmm3    # 0x30e80
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2876a(%rip), %xmm1    # 0x30e88
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2875e(%rip), %xmm2    # 0x30e90
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x28752(%rip), %xmm3    # 0x30e98
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x28746(%rip), %xmm1    # 0x30ea0
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2873a(%rip), %xmm2    # 0x30ea8
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2872e(%rip), %xmm3    # 0x30eb0
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x28722(%rip), %xmm1    # 0x30eb8
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x28716(%rip), %xmm2    # 0x30ec0
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2870a(%rip), %xmm3    # 0x30ec8
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x286fe(%rip), %xmm1    # 0x30ed0
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x286f2(%rip), %xmm2    # 0x30ed8
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x286e6(%rip), %xmm3    # 0x30ee0
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x286da(%rip), %xmm1    # 0x30ee8
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x286ce(%rip), %xmm2    # 0x30ef0
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x286c2(%rip), %xmm3    # 0x30ef8
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x286b6(%rip), %xmm1    # 0x30f00
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x286aa(%rip), %xmm2    # 0x30f08
mulsd %xmm4, %xmm2
subsd %xmm1, %xmm2
addsd 0x286a2(%rip), %xmm2    # 0x30f10
subsd %xmm1, %xmm2
mulsd 0x27c0e(%rip), %xmm2    # 0x30488
movsd %xmm2, (%rsp)
movq %rbx, %rdi
callq 0x24569
mulsd (%rsp), %xmm0
movapd %xmm0, (%rsp)
movsd 0x10(%rsp), %xmm0
movq %rbx, %rdi
callq 0x24424
movapd (%rsp), %xmm1
divsd %xmm0, %xmm1
movapd %xmm1, (%rsp)
xorpd %xmm1, %xmm1
movsd 0x18(%rsp), %xmm0
callq 0x24239
testb %al, %al
jne 0x88c6
movaps (%rsp), %xmm0
jmp 0x88d1
movaps (%rsp), %xmm0
xorps 0x278df(%rip), %xmm0    # 0x301b0
addq $0x20, %rsp
popq %rbx
retq