// File: /workspace/github_cpp_makefile_star2_O1/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 0x26575
movsd 0x2b9bb(%rip), %xmm1    # 0x34650
movsd %xmm0, 0x10(%rsp)
callq 0x2631e
testb %al, %al
je 0x8f1e
movsd 0x2b7b8(%rip), %xmm5    # 0x34468
movsd 0x10(%rsp), %xmm0
movapd %xmm0, %xmm1
mulsd %xmm5, %xmm1
addsd 0x2b72a(%rip), %xmm1    # 0x343f0
movsd 0x2c452(%rip), %xmm2    # 0x35120
mulsd %xmm1, %xmm2
addsd 0x2c44e(%rip), %xmm2    # 0x35128
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
addsd 0x2c446(%rip), %xmm3    # 0x35130
addsd 0x2c446(%rip), %xmm3    # 0x35138
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2c43a(%rip), %xmm4    # 0x35140
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c42e(%rip), %xmm2    # 0x35148
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2c422(%rip), %xmm3    # 0x35150
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2c416(%rip), %xmm4    # 0x35158
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c40a(%rip), %xmm2    # 0x35160
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2c3fe(%rip), %xmm3    # 0x35168
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2c3f2(%rip), %xmm4    # 0x35170
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c3e6(%rip), %xmm2    # 0x35178
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2c3da(%rip), %xmm3    # 0x35180
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2c3ce(%rip), %xmm4    # 0x35188
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c3c2(%rip), %xmm2    # 0x35190
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2c3b6(%rip), %xmm3    # 0x35198
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2c3aa(%rip), %xmm4    # 0x351a0
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c39e(%rip), %xmm2    # 0x351a8
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2c392(%rip), %xmm3    # 0x351b0
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2c386(%rip), %xmm4    # 0x351b8
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c37a(%rip), %xmm2    # 0x351c0
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2c36e(%rip), %xmm3    # 0x351c8
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2c362(%rip), %xmm4    # 0x351d0
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c356(%rip), %xmm2    # 0x351d8
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2c34a(%rip), %xmm3    # 0x351e0
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2c33e(%rip), %xmm4    # 0x351e8
movapd %xmm1, %xmm2
mulsd %xmm4, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c332(%rip), %xmm2    # 0x351f0
movapd %xmm1, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm4, %xmm3
addsd 0x2c326(%rip), %xmm3    # 0x351f8
movapd %xmm1, %xmm4
mulsd %xmm3, %xmm4
subsd %xmm2, %xmm4
addsd 0x2c31a(%rip), %xmm4    # 0x35200
mulsd %xmm1, %xmm4
subsd %xmm3, %xmm4
addsd 0x2c312(%rip), %xmm4    # 0x35208
subsd %xmm3, %xmm4
mulsd %xmm5, %xmm4
mulsd %xmm0, %xmm4
movsd %xmm4, (%rsp)
movq %rbx, %rdi
callq 0x266e0
mulsd (%rsp), %xmm0
movapd %xmm0, (%rsp)
jmp 0x915b
movsd 0x2bf6a(%rip), %xmm4    # 0x34e90
movsd 0x10(%rsp), %xmm1
divsd %xmm1, %xmm4
movapd %xmm1, %xmm0
addsd 0x2b4b4(%rip), %xmm4    # 0x343f0
movsd 0x2c10c(%rip), %xmm1    # 0x35050
mulsd %xmm4, %xmm1
addsd 0x2c108(%rip), %xmm1    # 0x35058
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
addsd 0x2c100(%rip), %xmm2    # 0x35060
addsd 0x2c100(%rip), %xmm2    # 0x35068
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2c0f4(%rip), %xmm3    # 0x35070
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2c0e8(%rip), %xmm1    # 0x35078
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c0dc(%rip), %xmm2    # 0x35080
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2c0d0(%rip), %xmm3    # 0x35088
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2c0c4(%rip), %xmm1    # 0x35090
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c0b8(%rip), %xmm2    # 0x35098
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2c0ac(%rip), %xmm3    # 0x350a0
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2c0a0(%rip), %xmm1    # 0x350a8
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c094(%rip), %xmm2    # 0x350b0
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2c088(%rip), %xmm3    # 0x350b8
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2c07c(%rip), %xmm1    # 0x350c0
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c070(%rip), %xmm2    # 0x350c8
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2c064(%rip), %xmm3    # 0x350d0
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2c058(%rip), %xmm1    # 0x350d8
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c04c(%rip), %xmm2    # 0x350e0
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2c040(%rip), %xmm3    # 0x350e8
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2c034(%rip), %xmm1    # 0x350f0
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c028(%rip), %xmm2    # 0x350f8
movapd %xmm4, %xmm3
mulsd %xmm2, %xmm3
subsd %xmm1, %xmm3
addsd 0x2c01c(%rip), %xmm3    # 0x35100
movapd %xmm4, %xmm1
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
addsd 0x2c010(%rip), %xmm1    # 0x35108
movapd %xmm4, %xmm2
mulsd %xmm1, %xmm2
subsd %xmm3, %xmm2
addsd 0x2c004(%rip), %xmm2    # 0x35110
mulsd %xmm4, %xmm2
subsd %xmm1, %xmm2
addsd 0x2bffc(%rip), %xmm2    # 0x35118
subsd %xmm1, %xmm2
mulsd 0x2b340(%rip), %xmm2    # 0x34468
movsd %xmm2, (%rsp)
movq %rbx, %rdi
callq 0x266e0
mulsd (%rsp), %xmm0
movapd %xmm0, (%rsp)
movsd 0x10(%rsp), %xmm0
movq %rbx, %rdi
callq 0x2658d
movapd (%rsp), %xmm1
divsd %xmm0, %xmm1
movapd %xmm1, (%rsp)
xorpd %xmm1, %xmm1
movsd 0x18(%rsp), %xmm0
callq 0x262fe
testb %al, %al
jne 0x9174
movaps (%rsp), %xmm0
jmp 0x917f
movaps (%rsp), %xmm0
xorps 0x2b061(%rip), %xmm0    # 0x341e0
addq $0x20, %rsp
popq %rbx
retq