// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/lib/bcore/bcore_btree.c
// Function: bcore_btree_ip_s_push
void bcore_btree_ip_s_push( bcore_btree_ip_s* o, bcore_btree_node_ip_s* node, bcore_btree_ip_kv_s* kv, bcore_btree_node_ip_s* child0, bcore_btree_node_ip_s* child1 )
{
    if( bcore_btree_node_ip_s_is_full( node ) )
    {
        bcore_btree_node_ip_s* l_node = node;
        bcore_btree_node_ip_s* r_node = bcore_btree_ip_s_new_node( o );
        bcore_btree_ip_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_ip_s_set_parent_child0( r_node );
        bcore_btree_node_ip_s_set_parent_child1( r_node );
        bcore_btree_node_ip_s_set_parent_child0( l_node );
        bcore_btree_node_ip_s_set_parent_child1( l_node );

        if( l_node->parent )
        {
            bcore_btree_ip_s_push( o, l_node->parent, &root_kv, l_node, r_node );
        }
        else
        {
            o->root = bcore_btree_ip_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_ip_s_set_parent_child0( node );
            bcore_btree_node_ip_s_set_parent_child1( node );
            bcore_btree_node_ip_s_set_parent_child2( node );
        }
        else
        {
            node->kv2    = *kv;
            node->child2 = child1;
            node->child1 = child0;
            bcore_btree_node_ip_s_set_parent_child1( node );
            bcore_btree_node_ip_s_set_parent_child2( node );
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %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 0x1209a0
cmpl $0x0, %eax
je 0x1215f9
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
callq 0x121250
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x121480
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x48(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
movq -0x30(%rbp), %rcx
movq 0x10(%rcx), %rdx
movq %rdx, (%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x30(%rbp), %rax
movq 0x38(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x30(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x121529
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jbe 0x1214d5
movq -0x30(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x48(%rbp)
movq 0x18(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x121527
movq -0x18(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x48(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
movq -0x30(%rbp), %rcx
movq 0x10(%rcx), %rdx
movq %rdx, (%rax)
movq 0x18(%rcx), %rcx
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq 0x38(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x28(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x20(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x121529
movq -0x38(%rbp), %rax
movq $0x0, 0x38(%rax)
movq -0x30(%rbp), %rax
movq $0x0, 0x38(%rax)
movq -0x38(%rbp), %rdi
callq 0x1208b0
movq -0x38(%rbp), %rdi
callq 0x1208f0
movq -0x30(%rbp), %rdi
callq 0x1208b0
movq -0x30(%rbp), %rdi
callq 0x1208f0
movq -0x30(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x12158f
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rsi
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
leaq -0x48(%rbp), %rdx
callq 0x1213b0
jmp 0x1215f4
movq -0x8(%rbp), %rdi
callq 0x121250
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq -0x48(%rbp), %rcx
movq %rcx, (%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rcx
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rcx, 0x28(%rax)
movq -0x38(%rbp), %rcx
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rcx, 0x30(%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x1216be
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x12167b
movq -0x10(%rbp), %rax
movq -0x10(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rdi
callq 0x1208b0
movq -0x10(%rbp), %rdi
callq 0x1208f0
movq -0x10(%rbp), %rdi
callq 0x120930
jmp 0x1216bc
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rdi
callq 0x1208f0
movq -0x10(%rbp), %rdi
callq 0x120930
jmp 0x1216be
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)