// File: chhylp123[P]hifiasm/hic.cpp
// Function: get_max_block_multi_thread(H_partition*, G_partition*, bubble_type*, mul_block_phase_type*, long long*, long long*, long long*, long long*, long long*, double*)
int get_max_block_multi_thread(H_partition* h, G_partition* g_p, bubble_type* bub, mul_block_phase_type* x,
long long* min_u, long long* min_f_bid, long long* min_f_uid, long long* min_l_bid, long long* min_l_uid, 
double* min_w)
{
    uint32_t i;
    (*min_w) = 1;
    (*min_u) = (*min_f_bid) = (*min_f_uid) = (*min_l_bid) = (*min_l_uid) = -1;
    for (i = 0; i < x->n_thread; i++)
    {
        x->res[i].min_chain_id = x->res[i].min_f_bid = x->res[i].min_f_uid = -1;
        x->res[i].min_l_bid = x->res[i].min_l_uid = x->res[i].min_idx = -1; 
        x->res[i].min_w = 1;
    }
    x->g_p = g_p;
    x->h = h;
    kt_for(x->n_thread, worker_for_max_block, x, x->chain_ele_occ);
    ///kt_for(x->n_thread, worker_for_max_block_by_chain, x, x->chain_idx_n);

    long long min_idx = -1;
    for (i = 0; i < x->n_thread; i++)
    {
        if(x->res[i].min_chain_id == -1) continue;
        if(x->res[i].min_f_bid == -1 || x->res[i].min_f_uid == -1) continue;
        if(x->res[i].min_l_bid == -1 || x->res[i].min_l_uid == -1) continue;
        if(((*min_w) > x->res[i].min_w) || ((*min_w) == x->res[i].min_w && x->res[i].min_idx < min_idx))
        {
            (*min_w) = x->res[i].min_w;
            (*min_u) = x->res[i].min_chain_id;
            (*min_f_bid) = x->res[i].min_f_bid;
            (*min_f_uid) = x->res[i].min_f_uid;
            (*min_l_bid) = x->res[i].min_l_bid;
            (*min_l_uid) = x->res[i].min_l_uid;
            min_idx = x->res[i].min_idx;
        }
    }

    if((*min_u) != -1 && (*min_f_bid) != -1 && (*min_f_uid) != -1 && (*min_l_bid) != -1 && (*min_l_uid) != -1)
    {
        return 1;
    }

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq 0x28(%rbp), %rax
movsd 0x18fc34(%rip), %xmm0   # 0x382000
movsd %xmm0, (%rax)
movq 0x20(%rbp), %rax
movq $-0x1, (%rax)
movq 0x18(%rbp), %rax
movq $-0x1, (%rax)
movq 0x10(%rbp), %rax
movq $-0x1, (%rax)
movq -0x38(%rbp), %rax
movq $-0x1, (%rax)
movq -0x30(%rbp), %rax
movq $-0x1, (%rax)
movl $0x0, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl 0x8(%rcx), %eax
jae 0x1f24e6
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq $-0x1, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq $-0x1, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq $-0x1, (%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq $-0x1, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq $-0x1, 0x20(%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq $-0x1, 0x18(%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x18fb2d(%rip), %xmm0   # 0x382000
movsd %xmm0, 0x30(%rax)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x1f240e
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x28(%rbp), %rax
movl 0x8(%rax), %edi
movq -0x28(%rbp), %rdx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rcx
leaq 0x248(%rip), %rsi       # 0x1f2760
callq 0x16d710
movq $-0x1, -0x48(%rbp)
movl $0x0, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl 0x8(%rcx), %eax
jae 0x1f270c
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpq $-0x1, (%rax)
jne 0x1f2559
jmp 0x1f26fe
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpq $-0x1, 0x8(%rax)
je 0x1f258b
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpq $-0x1, 0x10(%rax)
jne 0x1f2590
jmp 0x1f26fe
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpq $-0x1, 0x18(%rax)
je 0x1f25c2
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpq $-0x1, 0x20(%rax)
jne 0x1f25c7
jmp 0x1f26fe
movq 0x28(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
ucomisd 0x30(%rax), %xmm0
ja 0x1f2633
movq 0x28(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
ucomisd 0x30(%rax), %xmm0
jne 0x1f26fc
jp 0x1f26fc
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq 0x28(%rax), %rax
cmpq -0x48(%rbp), %rax
jge 0x1f26fc
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movsd 0x30(%rax), %xmm0
movq 0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq 0x10(%rax), %rcx
movq 0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq 0x18(%rax), %rcx
movq 0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq 0x20(%rax), %rcx
movq 0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rax
movl -0x3c(%rbp), %ecx
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movq 0x28(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x1f26fe
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x1f252c
movq -0x30(%rbp), %rax
cmpq $-0x1, (%rax)
je 0x1f2747
movq -0x38(%rbp), %rax
cmpq $-0x1, (%rax)
je 0x1f2747
movq 0x10(%rbp), %rax
cmpq $-0x1, (%rax)
je 0x1f2747
movq 0x18(%rbp), %rax
cmpq $-0x1, (%rax)
je 0x1f2747
movq 0x20(%rbp), %rax
cmpq $-0x1, (%rax)
je 0x1f2747
movl $0x1, -0x4(%rbp)
jmp 0x1f274e
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw (%rax,%rax)