// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/lib/bcore/bcore_btree.c
// Function: bcore_btree_vd_s_push
void bcore_btree_vd_s_push( bcore_btree_vd_s* o, bcore_btree_node_vd_s* node, bcore_btree_vd_kv_s* kv, bcore_btree_node_vd_s* child0, bcore_btree_node_vd_s* child1 )
{
    if( bcore_btree_node_vd_s_is_full( node ) )
    {
        bcore_btree_node_vd_s* l_node = node;
        bcore_btree_node_vd_s* r_node = bcore_btree_vd_s_new_node( o );
        bcore_btree_vd_kv_s root_kv;

        if( kv->key < node->kv1.key )
        {
            root_kv        = l_node->kv1;
            r_node->kv1    = l_node->kv2;
            r_node->child0 = l_node->child1;
            r_node->child1 = l_node->child2;
            l_node->kv1    = *kv;
            l_node->child0 = child0;
            l_node->child1 = child1;
        }
        else if( kv->key > node->kv2.key )
        {
            root_kv        = l_node->kv2;
            r_node->kv1    = *kv;
            r_node->child0 = child0;
            r_node->child1 = child1;
        }
        else
        {
            root_kv        = *kv;
            r_node->kv1    = l_node->kv2;
            r_node->child1 = l_node->child2;
            r_node->child0 = child1;
            l_node->child1 = child0;
        }
        r_node->child2 = NULL;
        l_node->child2 = NULL;

        bcore_btree_node_vd_s_set_parent_child0( r_node );
        bcore_btree_node_vd_s_set_parent_child1( r_node );
        bcore_btree_node_vd_s_set_parent_child0( l_node );
        bcore_btree_node_vd_s_set_parent_child1( l_node );

        if( l_node->parent )
        {
            bcore_btree_vd_s_push( o, l_node->parent, &root_kv, l_node, r_node );
        }
        else
        {
            o->root = bcore_btree_vd_s_new_node( o );
            o->root->kv1    = root_kv;
            o->root->child0 = l_node;
            o->root->child1 = r_node;
            l_node->parent  = o->root;
            r_node->parent  = o->root;
        }
    }
    else
    {
        if( kv->key < node->kv1.key )
        {
            node->kv2    = node->kv1;
            node->kv1    = *kv;
            node->child2 = node->child1;
            node->child1 = child1;
            node->child0 = child0;
            bcore_btree_node_vd_s_set_parent_child0( node );
            bcore_btree_node_vd_s_set_parent_child1( node );
            bcore_btree_node_vd_s_set_parent_child2( node );
        }
        else
        {
            node->kv2    = *kv;
            node->child2 = child1;
            node->child1 = child0;
            bcore_btree_node_vd_s_set_parent_child1( node );
            bcore_btree_node_vd_s_set_parent_child2( node );
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq -0x10(%rbp), %rdi
callq 0x1275d0
cmpl $0x0, %eax
je 0x1281c9
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
callq 0x127e60
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x128078
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
movq -0x30(%rbp), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, (%rax)
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x30(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x128101
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jbe 0x1280bd
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x1280ff
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
movq -0x30(%rbp), %rcx
movq 0x8(%rcx), %rcx
movq %rcx, (%rax)
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x128101
movq -0x38(%rbp), %rax
movq $0x0, 0x28(%rax)
movq -0x30(%rbp), %rax
movq $0x0, 0x28(%rax)
movq -0x38(%rbp), %rdi
callq 0x1274e0
movq -0x38(%rbp), %rdi
callq 0x127520
movq -0x30(%rbp), %rdi
callq 0x1274e0
movq -0x30(%rbp), %rdi
callq 0x127520
movq -0x30(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x128167
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
leaq -0x40(%rbp), %rdx
callq 0x127fc0
jmp 0x1281c4
movq -0x8(%rbp), %rdi
callq 0x127e60
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq -0x40(%rbp), %rcx
movq %rcx, (%rax)
movq -0x30(%rbp), %rcx
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rcx, 0x18(%rax)
movq -0x38(%rbp), %rcx
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rcx, 0x20(%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x128276
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x12823b
movq -0x10(%rbp), %rax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x10(%rbp), %rdi
callq 0x1274e0
movq -0x10(%rbp), %rdi
callq 0x127520
movq -0x10(%rbp), %rdi
callq 0x127560
jmp 0x128274
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rdi
callq 0x127520
movq -0x10(%rbp), %rdi
callq 0x127560
jmp 0x128276
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)