// File: DoubleString[P]RtConverter/src/Rtklib/rtcm3e.cpp
// Function: bamboo::gen_obs_glo(bamboo::rtcm_t*, bamboo::obsd_t const*, int, int*, int*, int*, int*, int*, int*, int*, int*, int*, int*, int*)
static void gen_obs_glo(rtcm_t *rtcm, const obsd_t *data, int fcn, int *code1,
                        int *pr1, int *ppr1, int *lock1, int *amb, int *cnr1,
                        int *code2, int *pr21, int *ppr2, int *lock2, int *cnr2)
{
    double lam1=0.0,lam2=0.0,pr1c=0.0,ppr;
    int lt1,lt2;
    
    if (fcn>=0) {
        lam1=CLIGHT/(FREQ1_GLO+DFRQ1_GLO*(fcn-7));
        lam2=CLIGHT/(FREQ2_GLO+DFRQ2_GLO*(fcn-7));
    }
    *pr1=*amb=0;
    if (ppr1) *ppr1=0xFFF80000; /* invalid values */
    if (pr21) *pr21=0xFFFFE000;
    if (ppr2) *ppr2=0xFFF80000;
    
    /* L1 peudorange */
    if (data->P[0]!=0.0) {
        *amb=(int)floor(data->P[0]/PRUNIT_GLO);
        *pr1=ROUND((data->P[0]-*amb*PRUNIT_GLO)/0.02);
        pr1c=*pr1*0.02+*amb*PRUNIT_GLO;
    }
    /* L1 phaserange - L1 pseudorange */
    if (data->P[0]!=0.0&&data->L[0]!=0.0&&data->code[0]&&lam1>0.0) {
        ppr=cp_pr(data->L[0],pr1c/lam1);
        if (ppr1) *ppr1=ROUND(ppr*lam1/0.0005);
    }
    /* L2 -L1 pseudorange */
    if (data->P[0]!=0.0&&data->P[1]!=0.0&&data->code[0]&&data->code[1]&&
        fabs(data->P[1]-pr1c)<=163.82) {
        if (pr21) *pr21=ROUND((data->P[1]-pr1c)/0.02);
    }
    /* L2 phaserange - L1 pseudorange */
    if (data->P[0]!=0.0&&data->L[1]!=0.0&&data->code[0]&&data->code[1]&&
        lam2>0.0) {
        ppr=cp_pr(data->L[1],pr1c/lam2);
        if (ppr2) *ppr2=ROUND(ppr*lam2/0.0005);
    }
    lt1=locktime(data->time,rtcm->lltime[data->sat-1]  ,data->LLI[0]);
    lt2=locktime(data->time,rtcm->lltime[data->sat-1]+1,data->LLI[1]);
    
    if (lock1) *lock1=to_lock(lt1);
    if (lock2) *lock2=to_lock(lt2);
    if (cnr1 ) *cnr1=data->SNR[0];
    if (cnr2 ) *cnr2=data->SNR[1];
    if (code1) *code1=to_code1_glo(data->code[0]);
    if (code2) *code2=to_code2_glo(data->code[1]);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq 0x48(%rbp), %rax
movq 0x40(%rbp), %rax
movq 0x38(%rbp), %rax
movq 0x30(%rbp), %rax
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x38(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x40(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
cmpl $0x0, -0x14(%rbp)
jl 0x880b6
movl -0x14(%rbp), %eax
subl $0x7, %eax
cvtsi2sd %eax, %xmm1
movsd 0x34e76(%rip), %xmm0    # 0xbced8
mulsd %xmm0, %xmm1
movsd 0x34e72(%rip), %xmm0    # 0xbcee0
addsd %xmm0, %xmm1
movsd 0x35d2e(%rip), %xmm0    # 0xbdda8
divsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rbp)
movl -0x14(%rbp), %eax
subl $0x7, %eax
cvtsi2sd %eax, %xmm1
movsd 0x34e33(%rip), %xmm0    # 0xbcec8
mulsd %xmm0, %xmm1
movsd 0x34e2f(%rip), %xmm0    # 0xbced0
addsd %xmm0, %xmm1
movsd 0x35cfb(%rip), %xmm0    # 0xbdda8
divsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movq 0x18(%rbp), %rax
movl $0x0, (%rax)
movq -0x28(%rbp), %rax
movl $0x0, (%rax)
cmpq $0x0, -0x30(%rbp)
je 0x880db
movq -0x30(%rbp), %rax
movl $0xfff80000, (%rax)     # imm = 0xFFF80000
cmpq $0x0, 0x30(%rbp)
je 0x880ec
movq 0x30(%rbp), %rax
movl $0xffffe000, (%rax)     # imm = 0xFFFFE000
cmpq $0x0, 0x38(%rbp)
je 0x880fd
movq 0x38(%rbp), %rax
movl $0xfff80000, (%rax)     # imm = 0xFFF80000
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x88116
jp 0x88116
jmp 0x881ca
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
movsd 0x388d1(%rip), %xmm1    # 0xc09f8
divsd %xmm1, %xmm0
callq 0x9c90
cvttsd2si %xmm0, %ecx
movq 0x18(%rbp), %rax
movl %ecx, (%rax)
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm1
movq 0x18(%rbp), %rax
cvtsi2sdl (%rax), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x3888e(%rip), %xmm2    # 0xc09f8
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0x35c0e(%rip), %xmm1    # 0xbdd88
divsd %xmm1, %xmm0
movsd 0x34cfa(%rip), %xmm1    # 0xbce80
addsd %xmm1, %xmm0
callq 0x9c90
cvttsd2si %xmm0, %ecx
movq -0x28(%rbp), %rax
movl %ecx, (%rax)
movq -0x28(%rbp), %rax
cvtsi2sdl (%rax), %xmm0
movq 0x18(%rbp), %rax
cvtsi2sdl (%rax), %xmm1
movsd 0x38847(%rip), %xmm2    # 0xc09f8
mulsd %xmm2, %xmm1
movsd 0x35bcb(%rip), %xmm2    # 0xbdd88
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x881e3
jp 0x881e3
jmp 0x88268
movq -0x10(%rbp), %rax
movsd 0x20(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x881f9
jp 0x881f9
jmp 0x88268
movq -0x10(%rbp), %rax
cmpb $0x0, 0x18(%rax)
je 0x88268
movsd -0x38(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x88268
movq -0x10(%rbp), %rax
movsd 0x20(%rax), %xmm0
movsd -0x48(%rbp), %xmm1
divsd -0x38(%rbp), %xmm1
callq 0x87c80
movsd %xmm0, -0x50(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x88266
movsd -0x50(%rbp), %xmm0
mulsd -0x38(%rbp), %xmm0
movsd 0x387a1(%rip), %xmm1    # 0xc09e8
divsd %xmm1, %xmm0
movsd 0x34c2d(%rip), %xmm1    # 0xbce80
addsd %xmm1, %xmm0
callq 0x9c90
cvttsd2si %xmm0, %ecx
movq -0x30(%rbp), %rax
movl %ecx, (%rax)
jmp 0x88268
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x88281
jp 0x88281
jmp 0x88310
movq -0x10(%rbp), %rax
movsd 0x40(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x88297
jp 0x88297
jmp 0x88310
movq -0x10(%rbp), %rax
cmpb $0x0, 0x18(%rax)
je 0x88310
movq -0x10(%rbp), %rax
cmpb $0x0, 0x19(%rax)
je 0x88310
movq -0x10(%rbp), %rax
movsd 0x40(%rax), %xmm1
subsd -0x48(%rbp), %xmm1
movaps 0x34f60(%rip), %xmm0    # 0xbd220
pand %xmm0, %xmm1
movsd 0x39b04(%rip), %xmm0    # 0xc1dd0
ucomisd %xmm1, %xmm0
jb 0x88310
cmpq $0x0, 0x30(%rbp)
je 0x8830e
movq -0x10(%rbp), %rax
movsd 0x40(%rax), %xmm0
subsd -0x48(%rbp), %xmm0
movsd 0x35a99(%rip), %xmm1    # 0xbdd88
divsd %xmm1, %xmm0
movsd 0x34b85(%rip), %xmm1    # 0xbce80
addsd %xmm1, %xmm0
callq 0x9c90
cvttsd2si %xmm0, %ecx
movq 0x30(%rbp), %rax
movl %ecx, (%rax)
jmp 0x88310
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x88329
jp 0x88329
jmp 0x883b8
movq -0x10(%rbp), %rax
movsd 0x28(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x8833f
jp 0x8833f
jmp 0x883b8
movq -0x10(%rbp), %rax
cmpb $0x0, 0x18(%rax)
je 0x883b8
movq -0x10(%rbp), %rax
cmpb $0x0, 0x19(%rax)
je 0x883b8
movsd -0x40(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x883b8
movq -0x10(%rbp), %rax
movsd 0x28(%rax), %xmm0
movsd -0x48(%rbp), %xmm1
divsd -0x40(%rbp), %xmm1
callq 0x87c80
movsd %xmm0, -0x50(%rbp)
cmpq $0x0, 0x38(%rbp)
je 0x883b6
movsd -0x50(%rbp), %xmm0
mulsd -0x40(%rbp), %xmm0
movsd 0x38651(%rip), %xmm1    # 0xc09e8
divsd %xmm1, %xmm0
movsd 0x34add(%rip), %xmm1    # 0xbce80
addsd %xmm1, %xmm0
callq 0x9c90
cvttsd2si %xmm0, %ecx
movq 0x38(%rbp), %rax
movl %ecx, (%rax)
jmp 0x883b8
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x68(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x8(%rbp), %rsi
addq $0x9d3a8, %rsi          # imm = 0x9D3A8
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
subl $0x1, %eax
cltq
imulq $0x30, %rax, %rax
addq %rax, %rsi
movq -0x10(%rbp), %rax
movb 0x15(%rax), %al
movq -0x68(%rbp), %rdi
movsd -0x60(%rbp), %xmm0
movzbl %al, %edx
callq 0x87cd0
movl %eax, -0x54(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x78(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x70(%rbp)
movq -0x8(%rbp), %rsi
addq $0x9d3a8, %rsi          # imm = 0x9D3A8
movq -0x10(%rbp), %rax
movzbl 0x10(%rax), %eax
subl $0x1, %eax
cltq
imulq $0x30, %rax, %rax
addq %rax, %rsi
addq $0x10, %rsi
movq -0x10(%rbp), %rax
movb 0x16(%rax), %al
movq -0x78(%rbp), %rdi
movsd -0x70(%rbp), %xmm0
movzbl %al, %edx
callq 0x87cd0
movl %eax, -0x58(%rbp)
cmpq $0x0, 0x10(%rbp)
je 0x8846d
movl -0x54(%rbp), %edi
callq 0x87d60
movl %eax, %ecx
movq 0x10(%rbp), %rax
movl %ecx, (%rax)
cmpq $0x0, 0x40(%rbp)
je 0x88484
movl -0x58(%rbp), %edi
callq 0x87d60
movl %eax, %ecx
movq 0x40(%rbp), %rax
movl %ecx, (%rax)
cmpq $0x0, 0x20(%rbp)
je 0x88499
movq -0x10(%rbp), %rax
movzbl 0x12(%rax), %ecx
movq 0x20(%rbp), %rax
movl %ecx, (%rax)
cmpq $0x0, 0x48(%rbp)
je 0x884ae
movq -0x10(%rbp), %rax
movzbl 0x13(%rax), %ecx
movq 0x48(%rbp), %rax
movl %ecx, (%rax)
cmpq $0x0, -0x20(%rbp)
je 0x884ca
movq -0x10(%rbp), %rax
movzbl 0x18(%rax), %edi
callq 0x884f0
movl %eax, %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
cmpq $0x0, 0x28(%rbp)
je 0x884e6
movq -0x10(%rbp), %rax
movzbl 0x19(%rax), %edi
callq 0x88530
movl %eax, %ecx
movq 0x28(%rbp), %rax
movl %ecx, (%rax)
addq $0x80, %rsp
popq %rbp
retq
nop