// File: /workspace/github_cpp_makefile_star2_O3/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 0x25e30
movsd 0x2ab57(%rip), %xmm1    # 0x33678
movsd %xmm0, 0x10(%rsp)
callq 0x25bd9
testb %al, %al
je 0x8daa
movsd 0x2a94c(%rip), %xmm5    # 0x33488
movsd 0x10(%rsp), %xmm0
movapd %xmm0, %xmm1
mulsd %xmm5, %xmm1
addsd 0x2a8be(%rip), %xmm1    # 0x33410
movsd 0x2b3be(%rip), %xmm2    # 0x33f18
mulsd %xmm1, %xmm2
addsd 0x2b3ba(%rip), %xmm2    # 0x33f20
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
addsd 0x2b3b2(%rip), %xmm3    # 0x33f28
addsd 0x2b3b2(%rip), %xmm3    # 0x33f30
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2b3a6(%rip), %xmm4    # 0x33f38
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2b39a(%rip), %xmm2    # 0x33f40
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2b38e(%rip), %xmm3    # 0x33f48
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2b382(%rip), %xmm4    # 0x33f50
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2b376(%rip), %xmm2    # 0x33f58
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2b36a(%rip), %xmm3    # 0x33f60
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2b35e(%rip), %xmm4    # 0x33f68
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2b352(%rip), %xmm2    # 0x33f70
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2b346(%rip), %xmm3    # 0x33f78
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2b33a(%rip), %xmm4    # 0x33f80
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2b32e(%rip), %xmm2    # 0x33f88
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2b322(%rip), %xmm3    # 0x33f90
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2b316(%rip), %xmm4    # 0x33f98
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2b30a(%rip), %xmm2    # 0x33fa0
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2b2fe(%rip), %xmm3    # 0x33fa8
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2b2f2(%rip), %xmm4    # 0x33fb0
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2b2e6(%rip), %xmm2    # 0x33fb8
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2b2da(%rip), %xmm3    # 0x33fc0
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2b2ce(%rip), %xmm4    # 0x33fc8
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2b2c2(%rip), %xmm2    # 0x33fd0
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2b2b6(%rip), %xmm3    # 0x33fd8
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2b2aa(%rip), %xmm4    # 0x33fe0
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2b29e(%rip), %xmm2    # 0x33fe8
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2b292(%rip), %xmm3    # 0x33ff0
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2b286(%rip), %xmm4    # 0x33ff8
mulsd %xmm1, %xmm4
subsd %xmm3, %xmm4
addsd 0x2b27e(%rip), %xmm4    # 0x34000
subsd %xmm3, %xmm4
mulsd %xmm5, %xmm4
mulsd %xmm0, %xmm4
movsd %xmm4, (%rsp)
movq %rbx, %rdi
callq 0x25f9b
mulsd (%rsp), %xmm0
movapd %xmm0, (%rsp)
jmp 0x8fe7
movsd 0x2aed6(%rip), %xmm4    # 0x33c88
movsd 0x10(%rsp), %xmm1
divsd %xmm1, %xmm4
movapd %xmm1, %xmm0
addsd 0x2a648(%rip), %xmm4    # 0x33410
movsd 0x2b078(%rip), %xmm1    # 0x33e48
mulsd %xmm4, %xmm1
addsd 0x2b074(%rip), %xmm1    # 0x33e50
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
addsd 0x2b06c(%rip), %xmm2    # 0x33e58
addsd 0x2b06c(%rip), %xmm2    # 0x33e60
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2b060(%rip), %xmm3    # 0x33e68
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2b054(%rip), %xmm1    # 0x33e70
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2b048(%rip), %xmm2    # 0x33e78
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2b03c(%rip), %xmm3    # 0x33e80
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2b030(%rip), %xmm1    # 0x33e88
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2b024(%rip), %xmm2    # 0x33e90
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2b018(%rip), %xmm3    # 0x33e98
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2b00c(%rip), %xmm1    # 0x33ea0
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2b000(%rip), %xmm2    # 0x33ea8
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2aff4(%rip), %xmm3    # 0x33eb0
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2afe8(%rip), %xmm1    # 0x33eb8
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2afdc(%rip), %xmm2    # 0x33ec0
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2afd0(%rip), %xmm3    # 0x33ec8
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2afc4(%rip), %xmm1    # 0x33ed0
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2afb8(%rip), %xmm2    # 0x33ed8
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2afac(%rip), %xmm3    # 0x33ee0
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2afa0(%rip), %xmm1    # 0x33ee8
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2af94(%rip), %xmm2    # 0x33ef0
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2af88(%rip), %xmm3    # 0x33ef8
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2af7c(%rip), %xmm1    # 0x33f00
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2af70(%rip), %xmm2    # 0x33f08
mulsd %xmm4, %xmm2
subsd %xmm1, %xmm2
addsd 0x2af68(%rip), %xmm2    # 0x33f10
subsd %xmm1, %xmm2
mulsd 0x2a4d4(%rip), %xmm2    # 0x33488
movsd %xmm2, (%rsp)
movq %rbx, %rdi
callq 0x25f9b
mulsd (%rsp), %xmm0
movapd %xmm0, (%rsp)
movsd 0x10(%rsp), %xmm0
movq %rbx, %rdi
callq 0x25e48
movapd (%rsp), %xmm1
divsd %xmm0, %xmm1
movapd %xmm1, (%rsp)
xorpd %xmm1, %xmm1
movsd 0x18(%rsp), %xmm0
callq 0x25bb9
testb %al, %al
jne 0x9000
movaps (%rsp), %xmm0
jmp 0x900b
movaps (%rsp), %xmm0
xorps 0x2a1a5(%rip), %xmm0    # 0x331b0
addq $0x20, %rsp
popq %rbx
retq