// File: DoubleString[P]RtConverter/src/Rtklib/rtcm3e.cpp
// Function: bamboo::gen_obs_gps(bamboo::rtcm_t*, bamboo::obsd_t const*, int*, int*, int*, int*, int*, int*, int*, int*, int*, int*, int*)
static void gen_obs_gps(rtcm_t *rtcm, const obsd_t *data, int *code1, int *pr1,
                        int *ppr1, int *lock1, int *amb, int *cnr1, int *code2,
                        int *pr21, int *ppr2, int *lock2, int *cnr2)
{
    double lam1,lam2,pr1c=0.0,ppr;
    int lt1,lt2;
    
    lam1=CLIGHT/FREQ1;
    lam2=CLIGHT/FREQ2;
    *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&&data->code[0]) {
        *amb=(int)floor(data->P[0]/PRUNIT_GPS);
        *pr1=ROUND((data->P[0]-*amb*PRUNIT_GPS)/0.02);
        pr1c=*pr1*0.02+*amb*PRUNIT_GPS;
    }
    /* L1 phaserange - L1 pseudorange */
    if (data->P[0]!=0.0&&data->L[0]!=0.0&&data->code[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]) {
        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_gps(data->code[0]);
    if (code2) *code2=to_code2_gps(data->code[1]);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
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)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
movsd 0x3a589(%rip), %xmm0    # 0xc1dc8
movsd %xmm0, -0x38(%rbp)
movsd 0x3a574(%rip), %xmm0    # 0xc1dc0
movsd %xmm0, -0x40(%rbp)
movq 0x10(%rbp), %rax
movl $0x0, (%rax)
movq -0x20(%rbp), %rax
movl $0x0, (%rax)
cmpq $0x0, -0x28(%rbp)
je 0x87876
movq -0x28(%rbp), %rax
movl $0xfff80000, (%rax)     # imm = 0xFFF80000
cmpq $0x0, 0x28(%rbp)
je 0x87887
movq 0x28(%rbp), %rax
movl $0xffffe000, (%rax)     # imm = 0xFFFFE000
cmpq $0x0, 0x30(%rbp)
je 0x87898
movq 0x30(%rbp), %rax
movl $0xfff80000, (%rax)     # imm = 0xFFF80000
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x878b1
jp 0x878b1
jmp 0x87973
movq -0x10(%rbp), %rax
cmpb $0x0, 0x18(%rax)
je 0x87973
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
movsd 0x39110(%rip), %xmm1    # 0xc09e0
divsd %xmm1, %xmm0
callq 0x9c90
cvttsd2si %xmm0, %ecx
movq 0x10(%rbp), %rax
movl %ecx, (%rax)
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm1
movq 0x10(%rbp), %rax
cvtsi2sdl (%rax), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x390cd(%rip), %xmm2    # 0xc09e0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0x36465(%rip), %xmm1    # 0xbdd88
divsd %xmm1, %xmm0
movsd 0x35551(%rip), %xmm1    # 0xbce80
addsd %xmm1, %xmm0
callq 0x9c90
cvttsd2si %xmm0, %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
cvtsi2sdl (%rax), %xmm0
movq 0x10(%rbp), %rax
cvtsi2sdl (%rax), %xmm1
movsd 0x39086(%rip), %xmm2    # 0xc09e0
mulsd %xmm2, %xmm1
movsd 0x36422(%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 0x87989
jp 0x87989
jmp 0x87a00
movq -0x10(%rbp), %rax
movsd 0x20(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x8799f
jp 0x8799f
jmp 0x87a00
movq -0x10(%rbp), %rax
cmpb $0x0, 0x18(%rax)
je 0x87a00
movq -0x10(%rbp), %rax
movsd 0x20(%rax), %xmm0
movsd -0x48(%rbp), %xmm1
divsd -0x38(%rbp), %xmm1
callq 0x87c80
movsd %xmm0, -0x50(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x879fe
movsd -0x50(%rbp), %xmm0
mulsd -0x38(%rbp), %xmm0
movsd 0x39009(%rip), %xmm1    # 0xc09e8
divsd %xmm1, %xmm0
movsd 0x35495(%rip), %xmm1    # 0xbce80
addsd %xmm1, %xmm0
callq 0x9c90
cvttsd2si %xmm0, %ecx
movq -0x28(%rbp), %rax
movl %ecx, (%rax)
jmp 0x87a00
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x87a19
jp 0x87a19
jmp 0x87aa8
movq -0x10(%rbp), %rax
movsd 0x40(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x87a2f
jp 0x87a2f
jmp 0x87aa8
movq -0x10(%rbp), %rax
cmpb $0x0, 0x18(%rax)
je 0x87aa8
movq -0x10(%rbp), %rax
cmpb $0x0, 0x19(%rax)
je 0x87aa8
movq -0x10(%rbp), %rax
movsd 0x40(%rax), %xmm1
subsd -0x48(%rbp), %xmm1
movaps 0x357c8(%rip), %xmm0    # 0xbd220
pand %xmm0, %xmm1
movsd 0x3a36c(%rip), %xmm0    # 0xc1dd0
ucomisd %xmm1, %xmm0
jb 0x87aa8
cmpq $0x0, 0x28(%rbp)
je 0x87aa6
movq -0x10(%rbp), %rax
movsd 0x40(%rax), %xmm0
subsd -0x48(%rbp), %xmm0
movsd 0x36301(%rip), %xmm1    # 0xbdd88
divsd %xmm1, %xmm0
movsd 0x353ed(%rip), %xmm1    # 0xbce80
addsd %xmm1, %xmm0
callq 0x9c90
cvttsd2si %xmm0, %ecx
movq 0x28(%rbp), %rax
movl %ecx, (%rax)
jmp 0x87aa8
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x87ac1
jp 0x87ac1
jmp 0x87b42
movq -0x10(%rbp), %rax
movsd 0x28(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x87ad7
jp 0x87ad7
jmp 0x87b42
movq -0x10(%rbp), %rax
cmpb $0x0, 0x18(%rax)
je 0x87b42
movq -0x10(%rbp), %rax
cmpb $0x0, 0x19(%rax)
je 0x87b42
movq -0x10(%rbp), %rax
movsd 0x28(%rax), %xmm0
movsd -0x48(%rbp), %xmm1
divsd -0x40(%rbp), %xmm1
callq 0x87c80
movsd %xmm0, -0x50(%rbp)
cmpq $0x0, 0x30(%rbp)
je 0x87b40
movsd -0x50(%rbp), %xmm0
mulsd -0x40(%rbp), %xmm0
movsd 0x38ec7(%rip), %xmm1    # 0xc09e8
divsd %xmm1, %xmm0
movsd 0x35353(%rip), %xmm1    # 0xbce80
addsd %xmm1, %xmm0
callq 0x9c90
cvttsd2si %xmm0, %ecx
movq 0x30(%rbp), %rax
movl %ecx, (%rax)
jmp 0x87b42
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, -0x30(%rbp)
je 0x87bf7
movl -0x54(%rbp), %edi
callq 0x87d60
movl %eax, %ecx
movq -0x30(%rbp), %rax
movl %ecx, (%rax)
cmpq $0x0, 0x38(%rbp)
je 0x87c0e
movl -0x58(%rbp), %edi
callq 0x87d60
movl %eax, %ecx
movq 0x38(%rbp), %rax
movl %ecx, (%rax)
cmpq $0x0, 0x18(%rbp)
je 0x87c23
movq -0x10(%rbp), %rax
movzbl 0x12(%rax), %ecx
movq 0x18(%rbp), %rax
movl %ecx, (%rax)
cmpq $0x0, 0x40(%rbp)
je 0x87c38
movq -0x10(%rbp), %rax
movzbl 0x13(%rax), %ecx
movq 0x40(%rbp), %rax
movl %ecx, (%rax)
cmpq $0x0, -0x18(%rbp)
je 0x87c54
movq -0x10(%rbp), %rax
movzbl 0x18(%rax), %edi
callq 0x87e30
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, (%rax)
cmpq $0x0, 0x20(%rbp)
je 0x87c70
movq -0x10(%rbp), %rax
movzbl 0x19(%rax), %edi
callq 0x87e80
movl %eax, %ecx
movq 0x20(%rbp), %rax
movl %ecx, (%rax)
addq $0x80, %rsp
popq %rbp
retq
nopl (%rax)