// File: DoubleString[P]RtConverter/src/Rtklib/rtkcmn.cpp
// Function: bamboo::ionppp(double const*, double const*, double, double, double*)
extern double ionppp(const double *pos, const double *azel, double re,
                     double hion, double *posp)
{
    double cosaz,rp,ap,sinap,tanap;
    
    rp=re/(re+hion)*cos(azel[1]);
    ap=pi/2.0-azel[1]-asin(rp);
    sinap=sin(ap);
    tanap=tan(ap);
    cosaz=cos(azel[0]);
    posp[0]=asin(sin(pos[0])*cos(ap)+cos(pos[0])*sinap*cosaz);
    
    if ((pos[0]> 70.0*D2R&& tanap*cosaz>tan(pi/2.0-pos[0]))||
        (pos[0]<-70.0*D2R&&-tanap*cosaz>tan(pi/2.0+pos[0]))) {
        posp[1]=pos[1]+pi-asin(sinap*sin(azel[0])/cos(posp[0]));
    }
    else {
        posp[1]=pos[1]+asin(sinap*sin(azel[0])/cos(posp[0]));
    }
    return 1.0/sqrt(1.0-rp*rp);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movsd %xmm0, -0x18(%rbp)
movsd %xmm1, -0x20(%rbp)
movq %rdx, -0x28(%rbp)
movsd -0x18(%rbp), %xmm0
movsd -0x18(%rbp), %xmm1
addsd -0x20(%rbp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x70(%rbp)
movq -0x10(%rbp), %rax
movsd 0x8(%rax), %xmm0
callq 0x9e00
movaps %xmm0, %xmm1
movsd -0x70(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rbp)
movq -0x10(%rbp), %rax
movsd 0x25684(%rip), %xmm0    # 0xbce78
subsd 0x8(%rax), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x38(%rbp), %xmm0
callq 0x9c40
movaps %xmm0, %xmm1
movsd -0x68(%rbp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x40(%rbp), %xmm0
callq 0x91a0
movsd %xmm0, -0x48(%rbp)
movsd -0x40(%rbp), %xmm0
callq 0x93f0
movsd %xmm0, -0x50(%rbp)
movq -0x10(%rbp), %rax
movsd (%rax), %xmm0
callq 0x9e00
movsd %xmm0, -0x30(%rbp)
movq -0x8(%rbp), %rax
movsd (%rax), %xmm0
callq 0x91a0
movsd %xmm0, -0x58(%rbp)
movsd -0x40(%rbp), %xmm0
callq 0x9e00
movsd %xmm0, -0x60(%rbp)
movq -0x8(%rbp), %rax
movsd (%rax), %xmm0
callq 0x9e00
movsd -0x60(%rbp), %xmm2
movaps %xmm0, %xmm1
movsd -0x58(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm1
mulsd -0x30(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x9c40
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x8(%rbp), %rax
movsd (%rax), %xmm0
movsd 0x2fd05(%rip), %xmm1    # 0xc75b8
ucomisd %xmm1, %xmm0
jbe 0x978eb
movsd -0x50(%rbp), %xmm0
mulsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movq -0x8(%rbp), %rax
movsd 0x255a4(%rip), %xmm0    # 0xbce78
subsd (%rax), %xmm0
callq 0x93f0
movaps %xmm0, %xmm1
movsd -0x78(%rbp), %xmm0
ucomisd %xmm1, %xmm0
ja 0x9794e
movq -0x8(%rbp), %rax
movsd 0x2fcc9(%rip), %xmm0    # 0xc75c0
ucomisd (%rax), %xmm0
jbe 0x979d3
movsd -0x50(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movq -0x8(%rbp), %rax
movsd 0x25545(%rip), %xmm0    # 0xbce78
addsd (%rax), %xmm0
callq 0x93f0
movaps %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x979d3
movq -0x8(%rbp), %rax
movsd 0x254fe(%rip), %xmm0    # 0xbce58
addsd 0x8(%rax), %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x98(%rbp)
movq -0x10(%rbp), %rax
movsd (%rax), %xmm0
callq 0x91a0
movaps %xmm0, %xmm1
movsd -0x98(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x90(%rbp)
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
callq 0x9e00
movaps %xmm0, %xmm1
movsd -0x90(%rbp), %xmm0
divsd %xmm1, %xmm0
callq 0x9c40
movaps %xmm0, %xmm1
movsd -0x88(%rbp), %xmm0
subsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x8(%rax)
jmp 0x97a4e
movq -0x8(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0x48(%rbp), %xmm0
movsd %xmm0, -0xb0(%rbp)
movq -0x10(%rbp), %rax
movsd (%rax), %xmm0
callq 0x91a0
movaps %xmm0, %xmm1
movsd -0xb0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0xa8(%rbp)
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
callq 0x9e00
movaps %xmm0, %xmm1
movsd -0xa8(%rbp), %xmm0
divsd %xmm1, %xmm0
callq 0x9c40
movaps %xmm0, %xmm1
movsd -0xa0(%rbp), %xmm0
addsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movsd -0x38(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm1, %xmm0
movsd 0x243e5(%rip), %xmm1    # 0xbbe60
addsd %xmm1, %xmm0
callq 0x95e0
movaps %xmm0, %xmm1
movsd 0x243d1(%rip), %xmm0    # 0xbbe60
divsd %xmm1, %xmm0
addq $0xb0, %rsp
popq %rbp
retq
nopl (%rax)