// File: DoubleString[P]RtConverter/src/Rtklib/rtkcmn.cpp
// Function: bamboo::geterp(bamboo::erp_t const*, bamboo::gtime_t, double*)
extern int geterp(const erp_t *erp, gtime_t time, double *erpv)
{
    const double ep[]={2000,1,1,12,0,0};
    double mjd,day,a;
    int i,j,k;
    
    trace(4,"geterp:\n");
    
    if (erp->n<=0) return 0;
    
    mjd=51544.5+(timediff(gpst2utc(time),epoch2time(ep)))/86400.0;
    
    if (mjd<=erp->data[0].mjd) {
        day=mjd-erp->data[0].mjd;
        erpv[0]=erp->data[0].xp     +erp->data[0].xpr*day;
        erpv[1]=erp->data[0].yp     +erp->data[0].ypr*day;
        erpv[2]=erp->data[0].ut1_utc-erp->data[0].lod*day;
        erpv[3]=erp->data[0].lod;
        return 1;
    }
    if (mjd>=erp->data[erp->n-1].mjd) {
        day=mjd-erp->data[erp->n-1].mjd;
        erpv[0]=erp->data[erp->n-1].xp     +erp->data[erp->n-1].xpr*day;
        erpv[1]=erp->data[erp->n-1].yp     +erp->data[erp->n-1].ypr*day;
        erpv[2]=erp->data[erp->n-1].ut1_utc-erp->data[erp->n-1].lod*day;
        erpv[3]=erp->data[erp->n-1].lod;
        return 1;
    }
    for (j=0,k=erp->n-1;j<k-1;) {
        i=(j+k)/2;
        if (mjd<erp->data[i].mjd) k=i; else j=i;
    }
    if (erp->data[j].mjd==erp->data[j+1].mjd) {
        a=0.5;
    }
    else {
        a=(mjd-erp->data[j].mjd)/(erp->data[j+1].mjd-erp->data[j].mjd);
    }
    erpv[0]=(1.0-a)*erp->data[j].xp     +a*erp->data[j+1].xp;
    erpv[1]=(1.0-a)*erp->data[j].yp     +a*erp->data[j+1].yp;
    erpv[2]=(1.0-a)*erp->data[j].ut1_utc+a*erp->data[j+1].ut1_utc;
    erpv[3]=(1.0-a)*erp->data[j].lod    +a*erp->data[j+1].lod;
    return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rsi, -0x18(%rbp)
movsd %xmm0, -0x10(%rbp)
movq %rdi, -0x20(%rbp)
movq %rdx, -0x28(%rbp)
leaq -0x60(%rbp), %rdi
xorl %esi, %esi
movl $0x30, %edx
callq 0x93d0
movsd 0x347a4(%rip), %xmm0    # 0xc73c8
movsd %xmm0, -0x60(%rbp)
movsd 0x2922f(%rip), %xmm0    # 0xbbe60
movsd %xmm0, -0x58(%rbp)
movsd 0x29222(%rip), %xmm0    # 0xbbe60
movsd %xmm0, -0x50(%rbp)
movsd 0x2ab2d(%rip), %xmm0    # 0xbd778
movsd %xmm0, -0x48(%rbp)
movl $0x4, %edi
leaq 0x34f39(%rip), %rsi     # 0xc7b95
movb $0x0, %al
callq 0x8b980
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
jg 0x92c78
movl $0x0, -0x4(%rbp)
jmp 0x93218
movq -0x18(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0xa8(%rbp), %rdi
movsd -0xa0(%rbp), %xmm0
callq 0x8ef80
movq %rax, -0x98(%rbp)
movsd %xmm0, -0x90(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x8e180
movq %rax, -0xb8(%rbp)
movsd %xmm0, -0xb0(%rbp)
movq -0x98(%rbp), %rdi
movsd -0x90(%rbp), %xmm0
movq -0xb8(%rbp), %rsi
movsd -0xb0(%rbp), %xmm1
callq 0x8e8e0
movaps %xmm0, %xmm1
movsd 0x2a129(%rip), %xmm0    # 0xbce20
divsd %xmm0, %xmm1
movsd 0x347cd(%rip), %xmm0    # 0xc74d0
addsd %xmm1, %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x68(%rbp), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jb 0x92e05
movsd -0x68(%rbp), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
subsd (%rax), %xmm0
movsd %xmm0, -0x70(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x8(%rax), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm0
movsd -0x70(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x10(%rax), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x20(%rax), %xmm0
movsd -0x70(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x28(%rax), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x30(%rax), %xmm0
movsd -0x70(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x10(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x30(%rax), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x18(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x93218
movsd -0x68(%rbp), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
ucomisd (%rax), %xmm0
jb 0x92fa5
movsd -0x68(%rbp), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
subsd (%rax), %xmm0
movsd %xmm0, -0x70(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x8(%rax), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x18(%rax), %xmm0
movsd -0x70(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x10(%rax), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x20(%rax), %xmm0
movsd -0x70(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x28(%rax), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x30(%rax), %xmm0
movsd -0x70(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x10(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x30(%rax), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x18(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x93218
movl $0x0, -0x80(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x84(%rbp)
movl -0x80(%rbp), %eax
movl -0x84(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x93014
movl -0x80(%rbp), %eax
addl -0x84(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, -0x7c(%rbp)
movsd -0x68(%rbp), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x7c(%rbp), %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x9300c
movl -0x7c(%rbp), %eax
movl %eax, -0x84(%rbp)
jmp 0x93012
movl -0x7c(%rbp), %eax
movl %eax, -0x80(%rbp)
jmp 0x92fbb
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x80(%rbp), %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd (%rax), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movl -0x80(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
ucomisd (%rax), %xmm0
jne 0x9305a
jp 0x9305a
movsd 0x29e2d(%rip), %xmm0    # 0xbce80
movsd %xmm0, -0x78(%rbp)
jmp 0x930b2
movsd -0x68(%rbp), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x80(%rbp), %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
subsd (%rax), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movl -0x80(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd (%rax), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x80(%rbp), %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
subsd (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x78(%rbp)
movsd 0x28da6(%rip), %xmm0    # 0xbbe60
subsd -0x78(%rbp), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x80(%rbp), %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x8(%rax), %xmm2
movsd -0x78(%rbp), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movl -0x80(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
mulsd 0x8(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movsd 0x28d4f(%rip), %xmm0    # 0xbbe60
subsd -0x78(%rbp), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x80(%rbp), %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x10(%rax), %xmm2
movsd -0x78(%rbp), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movl -0x80(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
mulsd 0x10(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movsd 0x28cf7(%rip), %xmm0    # 0xbbe60
subsd -0x78(%rbp), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x80(%rbp), %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x28(%rax), %xmm2
movsd -0x78(%rbp), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movl -0x80(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
mulsd 0x28(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x10(%rax)
movsd 0x28c9f(%rip), %xmm0    # 0xbbe60
subsd -0x78(%rbp), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x80(%rbp), %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x30(%rax), %xmm2
movsd -0x78(%rbp), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movl -0x80(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
mulsd 0x30(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x18(%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0xc0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)