// File: /workspace/github_c_makefile_star2_O0/saulvargas[P]re-C-sys/topn.c
// Function: topn_add
int topn_add(topn_t* topn, int key, double value) {
    int i;
    int j;

    if (topn->size < topn->capacity) {
        i = topn->size;
        j = parent(i);
        topn->keys[i] = key;
        topn->values[i] = value;
        while (i > 0 && (topn->values[j] > topn->values[i] || (topn->values[j] == topn->values[i] && topn->keys[j] > topn->keys[i]))) {
            swap(topn, i, j);
            i = j;
            j = parent(i);
        }
        topn->size++;

        return 1;
    } else {
        if (topn->values[0] > value || (topn->values[0] == value && topn->keys[0] > key)) {
            return 0;
        }
        i = 0;
        j = minChild(topn, i);
        topn->keys[i] = key;
        topn->values[i] = value;
        while (j != -1 && (topn->values[i] > topn->values[j] || (topn->values[i] == topn->values[j] && topn->keys[i] > topn->keys[j]))) {
            swap(topn, i, j);
            i = j;
            j = minChild(topn, i);
        }

        return 1;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movsd %xmm0, -0x20(%rbp)
movq -0x10(%rbp), %rax
movl 0x14(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x10(%rcx), %eax
jge 0x267c
movq -0x10(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x24(%rbp)
movl -0x24(%rbp), %edi
callq 0x2250
movl %eax, -0x28(%rbp)
movl -0x14(%rbp), %edx
movq -0x10(%rbp), %rax
movq (%rax), %rax
movslq -0x24(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movsd -0x20(%rbp), %xmm0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x24(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
xorl %eax, %eax
cmpl $0x0, -0x24(%rbp)
movb %al, -0x29(%rbp)
jle 0x2635
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x28(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movslq -0x24(%rbp), %rdx
movb $0x1, %al
ucomisd (%rcx,%rdx,8), %xmm0
movb %al, -0x2a(%rbp)
ja 0x262f
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x28(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movslq -0x24(%rbp), %rdx
xorl %eax, %eax
ucomisd (%rcx,%rdx,8), %xmm0
movb %al, -0x2b(%rbp)
jne 0x2629
jp 0x2629
movq -0x10(%rbp), %rax
movq (%rax), %rax
movslq -0x28(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
movslq -0x24(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
setg %al
movb %al, -0x2b(%rbp)
movb -0x2b(%rbp), %al
movb %al, -0x2a(%rbp)
movb -0x2a(%rbp), %al
movb %al, -0x29(%rbp)
movb -0x29(%rbp), %al
testb $0x1, %al
jne 0x263e
jmp 0x2663
movq -0x10(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x28(%rbp), %edx
callq 0x2150
movl -0x28(%rbp), %eax
movl %eax, -0x24(%rbp)
movl -0x24(%rbp), %edi
callq 0x2250
movl %eax, -0x28(%rbp)
jmp 0x25a4
movq -0x10(%rbp), %rax
movl 0x14(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x14(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x27c5
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsd (%rax), %xmm0
ucomisd -0x20(%rbp), %xmm0
ja 0x26b2
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movsd (%rax), %xmm0
ucomisd -0x20(%rbp), %xmm0
jne 0x26be
jp 0x26be
movq -0x10(%rbp), %rax
movq (%rax), %rax
movl (%rax), %eax
cmpl -0x14(%rbp), %eax
jle 0x26be
movl $0x0, -0x4(%rbp)
jmp 0x27c5
movl $0x0, -0x24(%rbp)
movq -0x10(%rbp), %rdi
movl -0x24(%rbp), %esi
callq 0x22b0
movl %eax, -0x28(%rbp)
movl -0x14(%rbp), %edx
movq -0x10(%rbp), %rax
movq (%rax), %rax
movslq -0x24(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movsd -0x20(%rbp), %xmm0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x24(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
xorl %eax, %eax
cmpl $-0x1, -0x28(%rbp)
movb %al, -0x2c(%rbp)
je 0x278c
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x24(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movslq -0x28(%rbp), %rdx
movb $0x1, %al
ucomisd (%rcx,%rdx,8), %xmm0
movb %al, -0x2d(%rbp)
ja 0x2786
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x24(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movslq -0x28(%rbp), %rdx
xorl %eax, %eax
ucomisd (%rcx,%rdx,8), %xmm0
movb %al, -0x2e(%rbp)
jne 0x2780
jp 0x2780
movq -0x10(%rbp), %rax
movq (%rax), %rax
movslq -0x24(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
movslq -0x28(%rbp), %rdx
cmpl (%rcx,%rdx,4), %eax
setg %al
movb %al, -0x2e(%rbp)
movb -0x2e(%rbp), %al
movb %al, -0x2d(%rbp)
movb -0x2d(%rbp), %al
movb %al, -0x2c(%rbp)
movb -0x2c(%rbp), %al
testb $0x1, %al
jne 0x2795
jmp 0x27be
movq -0x10(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x28(%rbp), %edx
callq 0x2150
movl -0x28(%rbp), %eax
movl %eax, -0x24(%rbp)
movq -0x10(%rbp), %rdi
movl -0x24(%rbp), %esi
callq 0x22b0
movl %eax, -0x28(%rbp)
jmp 0x26fb
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nop