// File: /workspace/github_cpp_makefile_star2_O3/chhylp123[P]hifiasm/Overlaps.cpp
// Function: refine_u_trans_t(u_trans_hit_t*, kv_ca_buf_t*)
void refine_u_trans_t(u_trans_hit_t *q, kv_ca_buf_t* cb)
{
    ///already know [qScur, qEcur), [qSpre, qEpre)
    uint32_t s, e, i, si, ei;
    s = q->qScur; e = q->qEcur;///[s, e)
    for (i = 0, si = ei = cb->n; i < cb->n; i++)
    {
        if(cb->a[i].c_x_p > s && si == cb->n)
        {
            si = i;
        } 

        if(cb->a[i].c_x_p > (e-1) && ei == cb->n)
        {
            ei = i;
        }

        if(si != cb->n && ei != cb->n) break;        
    }

    if(si == 0 || ei == 0) fprintf(stderr, "ERROR-si-ei-0\n");
    if(si >= cb->n || ei >= cb->n) fprintf(stderr, "ERROR-si-ei-1\n");
    si--; ei--;

    if(s < cb->a[si].c_x_p || ((si + 1) < cb->n && s >= cb->a[si + 1].c_x_p))
    {
        fprintf(stderr, "ERROR3\n");
    }
    if(e < cb->a[ei].c_x_p || ((ei + 1) < cb->n && e > cb->a[ei + 1].c_x_p))
    {
        fprintf(stderr, "ERROR4\n");
    }
    ///si and ei must be less than (cb->n-1)    
    // q->tScur = cb->a[si].c_y_p + ((cb->a[si+1].c_y_p - cb->a[si].c_y_p)
    //             *(double)((double)(s - cb->a[si].c_x_p)/(double)(cb->a[si+1].c_x_p - cb->a[si].c_x_p)));
    q->tScur = cb->a[si].c_y_p + 
        get_offset_adjust(s-cb->a[si].c_x_p, cb->a[si+1].c_x_p-cb->a[si].c_x_p, cb->a[si+1].c_y_p-cb->a[si].c_y_p);
 
    
    // q->tEcur = cb->a[ei].c_y_p + ((cb->a[ei+1].c_y_p - cb->a[ei].c_y_p)
    //             *(double)((double)(e - cb->a[ei].c_x_p)/(double)(cb->a[ei+1].c_x_p - cb->a[ei].c_x_p)));
    q->tEcur = cb->a[ei].c_y_p + 
        get_offset_adjust(e-cb->a[ei].c_x_p, cb->a[ei+1].c_x_p-cb->a[ei].c_x_p, cb->a[ei+1].c_y_p-cb->a[ei].c_y_p);
    


    ///might be equal
    if(q->tScur > q->tEcur) fprintf(stderr, "ERROR5\n");
    // if(q->tScur >= q->tEcur)
    // {
    //     fprintf(stderr, "\n###q->tScur: %u, s: %u, si: %u, q->tEcur: %u, e: %u, ei: %u\n", 
    //     q->tScur, s, si, q->tEcur, e, ei);

    //     fprintf(stderr, "###cb->a[si].c_x_p: %u, cb->a[si].c_y_p: %u, cb->a[si+1].c_x_p: %u, cb->a[si+1].c_y_p: %u\n", 
    //     cb->a[si].c_x_p, cb->a[si].c_y_p, cb->a[si+1].c_x_p, cb->a[si+1].c_y_p);

    //     fprintf(stderr, "###cb->a[ei].c_x_p: %u, cb->a[ei].c_y_p: %u, cb->a[ei+1].c_x_p: %u, cb->a[ei+1].c_y_p: %u\n", 
    //     cb->a[ei].c_x_p, cb->a[ei].c_y_p, cb->a[ei+1].c_x_p, cb->a[ei+1].c_y_p);

    //     fprintf(stderr, "ERROR5\n");
    // }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %r14
movl 0x8(%rdi), %r12d
movq %rdi, 0x10(%rsp)
movl 0xc(%rdi), %r11d
movq (%rsi), %rax
testq %rax, %rax
je 0xbd159
movq 0x10(%r14), %rcx
leal -0x1(%r11), %edx
movl $0x1, %esi
xorl %edi, %edi
movl %eax, %r13d
movl %eax, %ebp
movl %ebp, %r8d
movl %r13d, %r9d
leal -0x1(%rsi), %r13d
leaq (%rdi,%rdi,8), %r10
leaq (%r10,%r10,2), %r10
addq %rdi, %r10
movl 0x10(%rcx,%r10), %edi
cmpl %r12d, %edi
cmoval %r13d, %ebp
movl %r8d, %r10d
cmpq %r10, %rax
cmovnel %r8d, %ebp
movl %r9d, %r8d
cmpq %r8, %rax
cmovnel %r9d, %r13d
cmpl %edx, %edi
cmovbel %r9d, %r13d
cmpq %rbp, %rax
sete %dil
movl %r13d, %r8d
cmpq %r8, %rax
sete %r8b
orb %dil, %r8b
cmpb $0x1, %r8b
jne 0xbcf8e
movl %esi, %edi
incl %esi
cmpq %rdi, %rax
ja 0xbcf30
testl %ebp, %ebp
je 0xbd15e
testl %r13d, %r13d
je 0xbd15e
movl %ebp, %ebp
movl %r13d, %r13d
cmpq %rbp, %rax
jbe 0xbd196
cmpq %r13, %rax
jbe 0xbd196
leal -0x1(%rbp), %ecx
leal -0x1(%r13), %r15d
movq 0x10(%r14), %rax
leaq (%rcx,%rcx,8), %rdx
leaq (%rdx,%rdx,2), %rbx
addq %rcx, %rbx
cmpl 0x10(%rax,%rbx), %r12d
jb 0xbd0f3
cmpq %rbp, (%r14)
jbe 0xbcff9
leaq (,%rbp,8), %rcx
addq %rbp, %rcx
leaq (%rcx,%rcx,2), %rcx
addq %rbp, %rcx
cmpl 0x10(%rax,%rcx), %r12d
jae 0xbd0f3
movl %r15d, %ecx
leaq (%rcx,%rcx,8), %rdx
leaq (%rdx,%rdx,2), %r15
addq %rcx, %r15
cmpl 0x10(%rax,%r15), %r11d
jb 0xbd126
cmpq %r13, (%r14)
jbe 0xbd034
leaq (,%r13,8), %rcx
addq %r13, %rcx
leaq (%rcx,%rcx,2), %rcx
addq %r13, %rcx
cmpl 0x10(%rax,%rcx), %r11d
ja 0xbd126
movl 0x10(%rax,%rbx), %ecx
movl 0x14(%rax,%rbx), %edx
subl %ecx, %r12d
leaq (,%rbp,8), %rsi
addq %rbp, %rsi
leaq (%rsi,%rsi,2), %rsi
addq %rbp, %rsi
movl 0x10(%rax,%rsi), %edi
movl 0x14(%rax,%rsi), %esi
subl %ecx, %edi
subl %edx, %esi
cvtsi2sd %r12, %xmm0
cvtsi2sd %rdi, %xmm1
divsd %xmm1, %xmm0
xorps %xmm1, %xmm1
cvtsi2sd %rsi, %xmm1
mulsd %xmm0, %xmm1
cvttsd2si %xmm1, %rcx
addl %edx, %ecx
movq 0x10(%rsp), %r9
movl %ecx, 0x1c(%r9)
movl 0x10(%rax,%r15), %edx
movl 0x14(%rax,%r15), %esi
subl %edx, %r11d
leaq (,%r13,8), %rdi
addq %r13, %rdi
leaq (%rdi,%rdi,2), %rdi
addq %r13, %rdi
movl 0x10(%rax,%rdi), %r8d
movl 0x14(%rax,%rdi), %eax
subl %edx, %r8d
subl %esi, %eax
xorps %xmm0, %xmm0
cvtsi2sd %r11, %xmm0
xorps %xmm1, %xmm1
cvtsi2sd %r8, %xmm1
cvtsi2sd %rax, %xmm2
divsd %xmm1, %xmm0
mulsd %xmm0, %xmm2
cvttsd2si %xmm2, %rax
addl %esi, %eax
movl %eax, 0x20(%r9)
cmpl %eax, %ecx
ja 0xbd18c
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x1d7ee6(%rip), %rax    # 0x294fe0
movq (%rax), %rcx
leaq 0x1798ef(%rip), %rdi    # 0x2369f3
movl $0x7, %esi
movl $0x1, %edx
movq %r11, 0x8(%rsp)
callq 0x2410
movq 0x8(%rsp), %r11
movq 0x10(%r14), %rax
jmp 0xbcff9
movq 0x1d7eb3(%rip), %rax    # 0x294fe0
movq (%rax), %rcx
leaq 0x1798c4(%rip), %rdi    # 0x2369fb
movl $0x7, %esi
movl $0x1, %edx
movq %r11, 0x8(%rsp)
callq 0x2410
movq 0x8(%rsp), %r11
movq 0x10(%r14), %rax
jmp 0xbd034
xorl %r13d, %r13d
xorl %ebp, %ebp
movq 0x1d7e7b(%rip), %rax    # 0x294fe0
movq (%rax), %rcx
leaq 0x179866(%rip), %rdi    # 0x2369d5
movl $0xe, %esi
movl $0x1, %edx
movq %r11, %rbx
callq 0x2410
movq %rbx, %r11
movq (%r14), %rax
jmp 0xbcf9f
callq 0x10421
jmp 0xbd0e4
movq %r11, %rbx
callq 0x10405
movq %rbx, %r11
jmp 0xbcfb6