// File: /workspace/github_c_makefile_star2_O3/johsteffens[P]beth/lib/bcore/bcore_btree.c
// Function: bcore_btree_vd_s_pull
void bcore_btree_vd_s_pull( bcore_btree_vd_s* o, bcore_btree_node_vd_s* node )
{
    if( bcore_btree_node_vd_s_is_empty( node->child0 ) )
    {
        if( bcore_btree_node_vd_s_is_full( node->child1 ) )
        {
            node->child0->kv1    = node->kv1;
            node->child0->child1 = node->child1->child0;
            bcore_btree_node_vd_s_set_parent_child1( node->child0 );
            node->kv1            = node->child1->kv1;
            node->child1->kv1    = node->child1->kv2;
            node->child1->child0 = node->child1->child1;
            node->child1->child1 = node->child1->child2;
            node->child1->child2 = NULL;
        }
        else if( bcore_btree_node_vd_s_is_full( node ) )
        {
            node->child1->kv2    = node->child1->kv1;
            node->child1->kv1    = node->kv1;
            node->child1->child2 = node->child1->child1;
            node->child1->child1 = node->child1->child0;
            node->child1->child0 = node->child0->child0;
            bcore_btree_node_vd_s_set_parent_child0( node->child1 );
            bcore_btree_vd_s_delete_node( o, node->child0 );
            node->kv1    = node->kv2;
            node->child0 = node->child1;
            node->child1 = node->child2;
            node->child2 = NULL;
        }
        else
        {
            node->child1->kv2    = node->child1->kv1;
            node->child1->kv1    = node->kv1;
            node->child1->child2 = node->child1->child1;
            node->child1->child1 = node->child1->child0;
            node->child1->child0 = node->child0->child0;
            bcore_btree_node_vd_s_set_parent_child0( node->child1 );
            bcore_btree_vd_s_delete_node( o, node->child0 );
            node->child0 = node->child1;
            node->child1 = node->child2 = NULL;
            if( node->parent )
            {
                bcore_btree_vd_s_pull( o, node->parent );
            }
            else
            {
                o->root = node->child0;
                o->root->parent = NULL;
                bcore_btree_vd_s_delete_node( o, node );
            }
        }
    }
    else if( bcore_btree_node_vd_s_is_empty( node->child1 ) )
    {
        if( bcore_btree_node_vd_s_is_full( node->child0 ) )
        {
            node->child1->kv1    = node->kv1;
            node->child1->child1 = node->child1->child0;
            node->child1->child0 = node->child0->child2;
            bcore_btree_node_vd_s_set_parent_child0( node->child1 );
            node->kv1            = node->child0->kv2;
            node->child0->child2 = NULL;
        }
        else if( bcore_btree_node_vd_s_is_full( node ) )
        {
            node->child0->kv2    = node->kv1;
            node->child0->child2 = node->child1->child0;
            bcore_btree_node_vd_s_set_parent_child2( node->child0 );
            bcore_btree_vd_s_delete_node( o, node->child1 );
            node->kv1    = node->kv2;
            node->child1 = node->child2;
            node->child2 = NULL;
        }
        else
        {
            node->child0->kv2    = node->kv1;
            node->child0->child2 = node->child1->child0;
            bcore_btree_node_vd_s_set_parent_child2( node->child0 );
            bcore_btree_vd_s_delete_node( o, node->child1 );
            node->child1 = node->child2 = NULL;
            if( node->parent )
            {
                bcore_btree_vd_s_pull( o, node->parent );
            }
            else
            {
                o->root = node->child0;
                o->root->parent = NULL;
                bcore_btree_vd_s_delete_node( o, node );
            }
        }
    }
    else // node->child2 is empty
    {
        if( bcore_btree_node_vd_s_is_full( node ) )
        {
            if( bcore_btree_node_vd_s_is_full( node->child1 ) )
            {
                node->child2->kv1 = node->kv2;
                node->child2->child1 = node->child2->child0;
                node->child2->child0 = node->child1->child2;
                bcore_btree_node_vd_s_set_parent_child0( node->child2 );
                node->kv2            = node->child1->kv2;
                node->child1->child2 = NULL;
            }
            else
            {
                node->child1->kv2    = node->kv2;
                node->child1->child2 = node->child2->child0;
                bcore_btree_node_vd_s_set_parent_child2( node->child1 );
                bcore_btree_vd_s_delete_node( o, node->child2 );
                node->child2         = NULL;
            }
        }
    }
}

// Assembly:
pushq %rbx
leaq 0x76ec1(%rip), %rcx     # 0x19d3f0
xorps %xmm0, %xmm0
movq %rsi, %rax
leaq 0x18(%rsi), %rdx
movq 0x18(%rsi), %r9
movq 0x20(%rsi), %r8
addq $0x20, %rsi
cmpq $0x0, 0x20(%r9)
je 0x1265cb
cmpq $0x0, 0x20(%r8)
jne 0x12666e
cmpq $0x0, 0x28(%r9)
jne 0x1266d0
cmpq $0x0, 0x28(%rax)
jne 0x126720
movq (%rax), %r8
movq %r8, 0x8(%r9)
movq 0x18(%rax), %r9
movq 0x20(%rax), %r8
movq 0x18(%r8), %r10
movq %r10, 0x28(%r9)
testq %r10, %r10
sete %r11b
cmpq %rcx, %r10
sete %bl
orb %r11b, %bl
jne 0x12659a
movq %r9, 0x10(%r10)
leaq 0x18(%r8), %r9
movups %xmm0, (%r9)
movq $0x0, 0x10(%r9)
movq 0x20(%rdi), %r9
movq %r9, 0x10(%r8)
movq %r8, 0x20(%rdi)
movups %xmm0, (%rsi)
movq 0x10(%rax), %rsi
testq %rsi, %rsi
jne 0x126532
jmp 0x126781
cmpq $0x0, 0x28(%r8)
jne 0x1267a9
cmpq $0x0, 0x28(%rax)
jne 0x126803
movq (%r8), %r9
movq %r9, 0x8(%r8)
movq (%rax), %r8
movq 0x20(%rax), %r9
movq %r8, (%r9)
movq 0x20(%rax), %r8
movups 0x18(%r8), %xmm1
movups %xmm1, 0x20(%r8)
movq 0x18(%rax), %r9
movq 0x20(%rax), %r8
movq 0x18(%r9), %r9
movq %r9, 0x18(%r8)
testq %r9, %r9
sete %r10b
cmpq %rcx, %r9
sete %r11b
orb %r10b, %r11b
jne 0x126627
movq %r8, 0x10(%r9)
movq 0x18(%rax), %r8
movups %xmm0, 0x18(%r8)
movq $0x0, 0x28(%r8)
movq 0x20(%rdi), %r9
movq %r9, 0x10(%r8)
movq %r8, 0x20(%rdi)
movq 0x20(%rax), %r8
movq %r8, 0x18(%rax)
movups %xmm0, (%rsi)
movq 0x10(%rax), %rsi
testq %rsi, %rsi
jne 0x126532
movq %r8, (%rdi)
xorl %ecx, %ecx
movq %rcx, 0x10(%r8)
movq %rcx, 0x10(%rdx)
jmp 0x126792
movq 0x28(%rax), %rdx
testq %rdx, %rdx
je 0x1268c3
cmpq $0x0, 0x28(%r8)
je 0x126874
movq 0x8(%rax), %rsi
movq %rsi, (%rdx)
movq 0x28(%rax), %rsi
movq 0x18(%rsi), %rdx
movq %rdx, 0x20(%rsi)
movq 0x20(%rax), %rdx
movq 0x28(%rdx), %rdi
movq %rdi, 0x18(%rsi)
testq %rdi, %rdi
sete %r8b
cmpq %rcx, %rdi
sete %cl
orb %r8b, %cl
jne 0x1266bb
movq %rsi, 0x10(%rdi)
movq 0x8(%rdx), %rcx
movq %rcx, 0x8(%rax)
movq $0x0, 0x28(%rdx)
jmp 0x1268c3
movq (%rax), %rdx
movq %rdx, (%r8)
movq 0x20(%rax), %rdx
movq 0x18(%rdx), %rsi
movq %rsi, 0x20(%rdx)
movq 0x18(%rax), %rsi
movq 0x20(%rax), %rdx
movq 0x28(%rsi), %rsi
movq %rsi, 0x18(%rdx)
testq %rsi, %rsi
sete %dil
cmpq %rcx, %rsi
sete %cl
orb %dil, %cl
jne 0x126708
movq %rdx, 0x10(%rsi)
movq 0x18(%rax), %rcx
movq 0x8(%rcx), %rdx
movq %rdx, (%rax)
movq $0x0, 0x28(%rcx)
jmp 0x1268c3
movq (%rax), %rdx
movq %rdx, 0x8(%r9)
movq 0x18(%rax), %r8
movq 0x20(%rax), %rdx
leaq 0x18(%rdx), %rsi
movq 0x18(%rdx), %r9
movq %r9, 0x28(%r8)
testq %r9, %r9
sete %r10b
cmpq %rcx, %r9
sete %cl
orb %r10b, %cl
jne 0x126751
movq %r8, 0x10(%r9)
xorps %xmm0, %xmm0
movups %xmm0, (%rsi)
xorl %ecx, %ecx
movq %rcx, 0x10(%rsi)
movq 0x20(%rdi), %rsi
movq %rsi, 0x10(%rdx)
movq %rdx, 0x20(%rdi)
movq 0x8(%rax), %rdx
movq 0x28(%rax), %rsi
movq %rdx, (%rax)
movq %rsi, 0x20(%rax)
movq %rcx, 0x28(%rax)
jmp 0x1268c3
movq 0x18(%rax), %rcx
movq %rcx, (%rdi)
xorl %esi, %esi
movq %rsi, 0x10(%rcx)
movq %rsi, 0x10(%rdx)
xorps %xmm0, %xmm0
movups %xmm0, (%rdx)
movq 0x20(%rdi), %rcx
movq %rcx, 0x10(%rax)
movq %rax, 0x20(%rdi)
jmp 0x1268c3
movq (%rax), %rdx
movq %rdx, (%r9)
movq 0x18(%rax), %rdx
movq 0x20(%rax), %rsi
movq 0x18(%rsi), %rsi
movq %rsi, 0x20(%rdx)
testq %rsi, %rsi
sete %dil
cmpq %rcx, %rsi
sete %cl
orb %dil, %cl
jne 0x1267d5
movq %rdx, 0x10(%rsi)
movq 0x20(%rax), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, (%rcx)
movq 0x20(%rax), %rcx
movups 0x20(%rcx), %xmm0
movups %xmm0, 0x18(%rcx)
movq 0x20(%rax), %rax
movq $0x0, 0x28(%rax)
jmp 0x1268c3
movq (%r8), %rdx
movq %rdx, 0x8(%r8)
movq (%rax), %rdx
movq 0x20(%rax), %rsi
movq %rdx, (%rsi)
movq 0x20(%rax), %rdx
movups 0x18(%rdx), %xmm0
movups %xmm0, 0x20(%rdx)
movq 0x18(%rax), %rsi
movq 0x20(%rax), %rdx
movq 0x18(%rsi), %rsi
movq %rsi, 0x18(%rdx)
testq %rsi, %rsi
sete %r8b
cmpq %rcx, %rsi
sete %cl
orb %r8b, %cl
jne 0x126846
movq %rdx, 0x10(%rsi)
movq 0x18(%rax), %rcx
xorl %edx, %edx
movq %rdx, 0x28(%rcx)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%rcx)
movq 0x20(%rdi), %rsi
movq %rsi, 0x10(%rcx)
movq %rcx, 0x20(%rdi)
movq 0x8(%rax), %rcx
movq %rcx, (%rax)
movups 0x20(%rax), %xmm0
movups %xmm0, 0x18(%rax)
jmp 0x1268bf
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%r8)
movq 0x20(%rax), %rdx
movq 0x28(%rax), %rsi
movq 0x18(%rsi), %rsi
movq %rsi, 0x28(%rdx)
testq %rsi, %rsi
sete %r8b
cmpq %rcx, %rsi
sete %cl
orb %r8b, %cl
jne 0x1268a2
movq %rdx, 0x10(%rsi)
movq 0x28(%rax), %rcx
xorl %edx, %edx
movq %rdx, 0x28(%rcx)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%rcx)
movq 0x20(%rdi), %rsi
movq %rsi, 0x10(%rcx)
movq %rcx, 0x20(%rdi)
movq %rdx, 0x28(%rax)
popq %rbx
retq