// File: DoubleString[P]RtConverter/src/Rtklib/rtkcmn.cpp
// Function: bamboo::sunmoonpos_eci(bamboo::gtime_t, double*, double*)
static void sunmoonpos_eci(gtime_t tut, double *rsun, double *rmoon)
{
    const double ep2000[]={2000,1,1,12,0,0};
    double t,f[5],eps,Ms,ls,rs,lm,pm,rm,sine,cose,sinp,cosp,sinl,cosl;
    
    trace(4,"sunmoonpos_eci: tut=%s\n",time_str(tut,3));
    
    t=timediff(tut,epoch2time(ep2000))/86400.0/36525.0;
    
    /* astronomical arguments */
    ast_args(t,f);
    
    /* obliquity of the ecliptic */
    eps=23.439291-0.0130042*t;
    sine=sin(eps*D2R); cose=cos(eps*D2R);
    
    /* sun position in eci */
    if (rsun) {
        Ms=357.5277233+35999.05034*t;
        ls=280.460+36000.770*t+1.914666471*sin(Ms*D2R)+0.019994643*sin(2.0*Ms*D2R);
        rs=AU*(1.000140612-0.016708617*cos(Ms*D2R)-0.000139589*cos(2.0*Ms*D2R));
        sinl=sin(ls*D2R); cosl=cos(ls*D2R);
        rsun[0]=rs*cosl;
        rsun[1]=rs*cose*sinl;
        rsun[2]=rs*sine*sinl;
        
        trace(5,"rsun =%.3f %.3f %.3f\n",rsun[0],rsun[1],rsun[2]);
    }
    /* moon position in eci */
    if (rmoon) {
        lm=218.32+481267.883*t+6.29*sin(f[0])-1.27*sin(f[0]-2.0*f[3])+
           0.66*sin(2.0*f[3])+0.21*sin(2.0*f[0])-0.19*sin(f[1])-0.11*sin(2.0*f[2]);
        pm=5.13*sin(f[2])+0.28*sin(f[0]+f[2])-0.28*sin(f[2]-f[0])-
           0.17*sin(f[2]-2.0*f[3]);
        rm=RE_WGS84/sin((0.9508+0.0518*cos(f[0])+0.0095*cos(f[0]-2.0*f[3])+
                   0.0078*cos(2.0*f[3])+0.0028*cos(2.0*f[0]))*D2R);
        sinl=sin(lm*D2R); cosl=cos(lm*D2R);
        sinp=sin(pm*D2R); cosp=cos(pm*D2R);
        rmoon[0]=rm*cosp*cosl;
        rmoon[1]=rm*(cose*cosp*sinl-sine*sinp);
        rmoon[2]=rm*(sine*cosp*sinl+cose*sinp);
        
        trace(5,"rmoon=%.3f %.3f %.3f\n",rmoon[0],rmoon[1],rmoon[2]);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x190, %rsp            # imm = 0x190
movq %rdi, -0x10(%rbp)
movsd %xmm0, -0x8(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
leaq -0x50(%rbp), %rdi
xorl %esi, %esi
movl $0x30, %edx
callq 0x93d0
movsd 0x2ec84(%rip), %xmm0    # 0xc73c8
movsd %xmm0, -0x50(%rbp)
movsd 0x2370f(%rip), %xmm0    # 0xbbe60
movsd %xmm0, -0x48(%rbp)
movsd 0x23702(%rip), %xmm0    # 0xbbe60
movsd %xmm0, -0x40(%rbp)
movsd 0x2500d(%rip), %xmm0    # 0xbd778
movsd %xmm0, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq -0xf8(%rbp), %rdi
movsd -0xf0(%rbp), %xmm0
movl $0x3, %esi
callq 0x8f6d0
movq %rax, %rdx
movl $0x4, %edi
leaq 0x2faee(%rip), %rsi     # 0xc829c
movb $0x0, %al
callq 0x8b980
movq -0x10(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x100(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x8e180
movq %rax, -0x118(%rbp)
movsd %xmm0, -0x110(%rbp)
movq -0x108(%rbp), %rdi
movsd -0x100(%rbp), %xmm0
movq -0x118(%rbp), %rsi
movsd -0x110(%rbp), %xmm1
callq 0x8e8e0
movsd 0x24612(%rip), %xmm1    # 0xbce20
divsd %xmm1, %xmm0
movsd 0x2ec06(%rip), %xmm1    # 0xc7420
divsd %xmm1, %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x58(%rbp), %xmm0
leaq -0x80(%rbp), %rdi
callq 0x91100
movsd -0x58(%rbp), %xmm0
movsd 0x2ee2a(%rip), %xmm1    # 0xc7668
mulsd %xmm1, %xmm0
movsd 0x2ee26(%rip), %xmm1    # 0xc7670
addsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
movsd 0x2ec62(%rip), %xmm0    # 0xc74c0
mulsd -0x88(%rbp), %xmm0
callq 0x91a0
movsd %xmm0, -0xc0(%rbp)
movsd 0x2ec45(%rip), %xmm0    # 0xc74c0
mulsd -0x88(%rbp), %xmm0
callq 0x9e00
movsd %xmm0, -0xc8(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x98aa1
movsd -0x58(%rbp), %xmm0
movsd 0x2ee10(%rip), %xmm1    # 0xc76b8
mulsd %xmm1, %xmm0
movsd 0x2ee0c(%rip), %xmm1    # 0xc76c0
addsd %xmm1, %xmm0
movsd %xmm0, -0x90(%rbp)
movsd -0x58(%rbp), %xmm0
movsd 0x2eddb(%rip), %xmm1    # 0xc76a8
mulsd %xmm1, %xmm0
movsd 0x2edd7(%rip), %xmm1    # 0xc76b0
addsd %xmm1, %xmm0
movsd %xmm0, -0x130(%rbp)
movsd 0x2ebd3(%rip), %xmm0    # 0xc74c0
mulsd -0x90(%rbp), %xmm0
callq 0x91a0
movsd -0x130(%rbp), %xmm1
movsd 0x2ed96(%rip), %xmm2    # 0xc76a0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x128(%rbp)
movsd 0x24e2e(%rip), %xmm0    # 0xbd750
mulsd -0x90(%rbp), %xmm0
movsd 0x2eb8e(%rip), %xmm1    # 0xc74c0
mulsd %xmm1, %xmm0
callq 0x91a0
movsd -0x128(%rbp), %xmm1
movsd 0x2ed4d(%rip), %xmm2    # 0xc7698
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x98(%rbp)
movsd 0x2eb5d(%rip), %xmm0    # 0xc74c0
mulsd -0x90(%rbp), %xmm0
callq 0x9e00
movsd 0x2ed10(%rip), %xmm1    # 0xc7688
mulsd %xmm1, %xmm0
movsd 0x2ed0c(%rip), %xmm1    # 0xc7690
addsd %xmm1, %xmm0
movsd %xmm0, -0x120(%rbp)
movsd 0x24db8(%rip), %xmm0    # 0xbd750
mulsd -0x90(%rbp), %xmm0
movsd 0x2eb18(%rip), %xmm1    # 0xc74c0
mulsd %xmm1, %xmm0
callq 0x9e00
movaps %xmm0, %xmm1
movsd -0x120(%rbp), %xmm0
movsd 0x2ecbc(%rip), %xmm2    # 0xc7680
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x2eca4(%rip), %xmm0    # 0xc7678
mulsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd 0x2ead8(%rip), %xmm0    # 0xc74c0
mulsd -0x98(%rbp), %xmm0
callq 0x91a0
movsd %xmm0, -0xe0(%rbp)
movsd 0x2eabb(%rip), %xmm0    # 0xc74c0
mulsd -0x98(%rbp), %xmm0
callq 0x9e00
movsd %xmm0, -0xe8(%rbp)
movsd -0xa0(%rbp), %xmm0
mulsd -0xe8(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0xa0(%rbp), %xmm0
mulsd -0xc8(%rbp), %xmm0
mulsd -0xe0(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movsd -0xa0(%rbp), %xmm0
mulsd -0xc0(%rbp), %xmm0
mulsd -0xe0(%rbp), %xmm0
movq -0x18(%rbp), %rax
movsd %xmm0, 0x10(%rax)
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm1
movq -0x18(%rbp), %rax
movsd 0x10(%rax), %xmm2
movl $0x5, %edi
leaq 0x2f81a(%rip), %rsi     # 0xc82b4
movb $0x3, %al
callq 0x8b980
cmpq $0x0, -0x20(%rbp)
je 0x98eef
movsd -0x58(%rbp), %xmm0
movsd 0x2ec87(%rip), %xmm1    # 0xc7740
mulsd %xmm1, %xmm0
movsd 0x2ec83(%rip), %xmm1    # 0xc7748
addsd %xmm1, %xmm0
movsd %xmm0, -0x190(%rbp)
movsd -0x80(%rbp), %xmm0
callq 0x91a0
movsd -0x190(%rbp), %xmm1
movsd 0x2ec4d(%rip), %xmm2    # 0xc7738
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x188(%rbp)
movsd -0x80(%rbp), %xmm0
movsd -0x68(%rbp), %xmm1
addsd %xmm1, %xmm1
subsd %xmm1, %xmm0
callq 0x91a0
movsd -0x188(%rbp), %xmm1
movsd 0x2ec0e(%rip), %xmm2    # 0xc7730
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x180(%rbp)
movsd 0x24c16(%rip), %xmm0    # 0xbd750
mulsd -0x68(%rbp), %xmm0
callq 0x91a0
movsd -0x180(%rbp), %xmm1
movsd 0x2ebd4(%rip), %xmm2    # 0xc7728
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x178(%rbp)
movsd 0x24be4(%rip), %xmm0    # 0xbd750
mulsd -0x80(%rbp), %xmm0
callq 0x91a0
movsd -0x178(%rbp), %xmm1
movsd 0x2eb9a(%rip), %xmm2    # 0xc7720
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x170(%rbp)
movsd -0x78(%rbp), %xmm0
callq 0x91a0
movsd -0x170(%rbp), %xmm1
movsd 0x2eb68(%rip), %xmm2    # 0xc7718
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x168(%rbp)
movsd 0x24b88(%rip), %xmm0    # 0xbd750
mulsd -0x70(%rbp), %xmm0
callq 0x91a0
movsd -0x168(%rbp), %xmm1
movsd 0x2eb2e(%rip), %xmm2    # 0xc7710
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa8(%rbp)
movsd -0x70(%rbp), %xmm0
callq 0x91a0
movsd %xmm0, -0x160(%rbp)
movsd -0x80(%rbp), %xmm0
addsd -0x70(%rbp), %xmm0
callq 0x91a0
movaps %xmm0, %xmm2
movsd -0x160(%rbp), %xmm0
movsd 0x2eae2(%rip), %xmm1    # 0xc7708
mulsd %xmm2, %xmm1
movsd 0x2eace(%rip), %xmm2    # 0xc7700
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x158(%rbp)
movsd -0x70(%rbp), %xmm0
subsd -0x80(%rbp), %xmm0
callq 0x91a0
movsd -0x158(%rbp), %xmm1
movsd 0x2ea97(%rip), %xmm2    # 0xc76f8
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x150(%rbp)
movsd -0x70(%rbp), %xmm0
movsd -0x68(%rbp), %xmm1
addsd %xmm1, %xmm1
subsd %xmm1, %xmm0
callq 0x91a0
movsd -0x150(%rbp), %xmm1
movsd 0x2ea58(%rip), %xmm2    # 0xc76f0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xb0(%rbp)
movsd -0x80(%rbp), %xmm0
callq 0x9e00
movsd 0x2ea26(%rip), %xmm1    # 0xc76e0
mulsd %xmm1, %xmm0
movsd 0x2ea22(%rip), %xmm1    # 0xc76e8
addsd %xmm1, %xmm0
movsd %xmm0, -0x148(%rbp)
movsd -0x80(%rbp), %xmm0
movsd -0x68(%rbp), %xmm1
addsd %xmm1, %xmm1
subsd %xmm1, %xmm0
callq 0x9e00
movsd -0x148(%rbp), %xmm1
movsd 0x2e9df(%rip), %xmm2    # 0xc76d8
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x140(%rbp)
movsd 0x24a3f(%rip), %xmm0    # 0xbd750
mulsd -0x68(%rbp), %xmm0
callq 0x9e00
movsd -0x140(%rbp), %xmm1
movsd 0x2e9a5(%rip), %xmm2    # 0xc76d0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x138(%rbp)
movsd 0x24a0d(%rip), %xmm0    # 0xbd750
mulsd -0x80(%rbp), %xmm0
callq 0x9e00
movsd -0x138(%rbp), %xmm1
movsd 0x2e96b(%rip), %xmm2    # 0xc76c8
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0x2e753(%rip), %xmm1    # 0xc74c0
mulsd %xmm1, %xmm0
callq 0x91a0
movaps %xmm0, %xmm1
movsd 0x240c7(%rip), %xmm0    # 0xbce48
divsd %xmm1, %xmm0
movsd %xmm0, -0xb8(%rbp)
movsd 0x2e72b(%rip), %xmm0    # 0xc74c0
mulsd -0xa8(%rbp), %xmm0
callq 0x91a0
movsd %xmm0, -0xe0(%rbp)
movsd 0x2e70e(%rip), %xmm0    # 0xc74c0
mulsd -0xa8(%rbp), %xmm0
callq 0x9e00
movsd %xmm0, -0xe8(%rbp)
movsd 0x2e6f1(%rip), %xmm0    # 0xc74c0
mulsd -0xb0(%rbp), %xmm0
callq 0x91a0
movsd %xmm0, -0xd0(%rbp)
movsd 0x2e6d4(%rip), %xmm0    # 0xc74c0
mulsd -0xb0(%rbp), %xmm0
callq 0x9e00
movsd %xmm0, -0xd8(%rbp)
movsd -0xb8(%rbp), %xmm0
mulsd -0xd8(%rbp), %xmm0
mulsd -0xe8(%rbp), %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0xb8(%rbp), %xmm0
movsd -0xc8(%rbp), %xmm1
mulsd -0xd8(%rbp), %xmm1
movsd -0xe0(%rbp), %xmm3
movsd -0xc0(%rbp), %xmm2
mulsd -0xd0(%rbp), %xmm2
movq %xmm2, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm2
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movsd -0xb8(%rbp), %xmm0
movsd -0xc0(%rbp), %xmm1
mulsd -0xd8(%rbp), %xmm1
movsd -0xe0(%rbp), %xmm3
movsd -0xc8(%rbp), %xmm2
mulsd -0xd0(%rbp), %xmm2
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, 0x10(%rax)
movq -0x20(%rbp), %rax
movsd (%rax), %xmm0
movq -0x20(%rbp), %rax
movsd 0x8(%rax), %xmm1
movq -0x20(%rbp), %rax
movsd 0x10(%rax), %xmm2
movl $0x5, %edi
leaq 0x2f3e2(%rip), %rsi     # 0xc82ca
movb $0x3, %al
callq 0x8b980
addq $0x190, %rsp            # imm = 0x190
popq %rbp
retq
nopl (%rax,%rax)