// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/lib/bcore/bcore_spect_array.c
// Function: bcore_array_default_make_strong
void bcore_array_default_make_strong( const bcore_array_s* p, bcore_array* o )
{
    if( p->size_fix > 0 ) return;
    vd_t obj = ( u0_t* )o + p->caps_offset;
    if( ( ( bcore_array_dyn_head_s* )obj )->size <= ( ( bcore_array_dyn_head_s* )obj )->space ) return;
    switch( p->type_caps )
    {
        case BCORE_CAPS_ARRAY_DYN_SOLID_STATIC:
        {
            bcore_array_dyn_solid_static_s* arr = obj;
            const bcore_inst_s* instance_p = p->item_p;
            uz_t unit_size = instance_p->size;
            vc_t src_data = arr->data;
            arr->data = bcore_u_alloc( unit_size, NULL, arr->size, &arr->space );
            if( instance_p->move_flat )
            {
                bcore_u_memcpy( unit_size, arr->data, src_data, arr->size );
            }
            else
            {
                vd_t dst_data = arr->data;
                for( uz_t i = 0; i < arr->size; i++ )
                {
                    instance_p->copy( instance_p, dst_data, src_data );
                    dst_data = ( u0_t* )dst_data + unit_size;
                    src_data = ( u0_t* )src_data + unit_size;
                }
            }
        }
        break;

        case BCORE_CAPS_ARRAY_DYN_SOLID_TYPED:
        {
            bcore_array_dyn_solid_typed_s* arr = obj;
            if( !arr->type ) ERR( "attempt to take ownership of type-zero array" );
            const bcore_inst_s* instance_p = bcore_inst_s_get_typed( arr->type );
            uz_t unit_size = instance_p->size;
            vc_t src_data = arr->data;
            arr->data = bcore_u_alloc( unit_size, NULL, arr->size, &arr->space );
            if( instance_p->move_flat )
            {
                bcore_u_memcpy( unit_size, arr->data, src_data, arr->size );
            }
            else
            {
                vd_t dst_data = arr->data;
                for( uz_t i = 0; i < arr->size; i++ )
                {
                    instance_p->copy( instance_p, dst_data, src_data );
                    dst_data = ( u0_t* )dst_data + unit_size;
                    src_data = ( u0_t* )src_data + unit_size;
                }
            }
        }
        break;

        case BCORE_CAPS_ARRAY_DYN_LINK_STATIC:
        {
            bcore_array_dyn_link_static_s* arr = obj;
            const bcore_inst_s* instance_p = p->item_p;
            vd_t* src_data = arr->data;
            arr->data = bcore_u_alloc( sizeof( vd_t ), NULL, arr->size, &arr->space );
            vd_t* dst_data = arr->data;
            for( uz_t i = 0; i < arr->size; i++ ) *dst_data++ = instance_p->clone( instance_p, *src_data++ );
        }
        break;

        case BCORE_CAPS_ARRAY_DYN_LINK_TYPED:
        {
            bcore_array_dyn_link_typed_s* arr = obj;
            if( !arr->type ) ERR( "attempt to take ownership of type-zero array" );
            const bcore_inst_s* instance_p = bcore_inst_s_get_typed( arr->type );
            vd_t* src_data = arr->data;
            arr->data = bcore_u_alloc( sizeof( vd_t ), NULL, arr->size, &arr->space );
            vd_t* dst_data = arr->data;
            for( uz_t i = 0; i < arr->size; i++ ) *dst_data++ = instance_p->clone( instance_p, *src_data++ );
        }
        break;

        case BCORE_CAPS_ARRAY_DYN_LINK_AWARE:
        {
            bcore_array_dyn_link_aware_s* arr = obj;
            vd_t* src_data = arr->data;
            arr->data = bcore_u_alloc( sizeof( vd_t ), NULL, arr->size, &arr->space );
            vd_t* dst_data = arr->data;
            for( uz_t i = 0; i < arr->size; i++ ) *dst_data++ = bcore_inst_a_clone( *src_data++ );
        }
        break;

        default: ERR( "invalid type_caps (%"PRIu32")", ( u2_t )p->type_caps );
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jbe 0xd4173
jmp 0xd46b8
movq -0x10(%rbp), %rax
movq -0x8(%rbp), %rcx
addq 0x20(%rcx), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x10(%rcx), %rax
ja 0xd419a
jmp 0xd46b8
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
addq $-0x6, %rax
movq %rax, -0xf0(%rbp)
subq $0x4, %rax
ja 0xd468c
movq -0xf0(%rbp), %rax
leaq 0x7eb2b(%rip), %rcx     # 0x152cf0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0x20(%rbp), %rcx
addq $0x10, %rcx
xorl %eax, %eax
movl %eax, %esi
callq 0x9d330
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
testb $0x1, 0x2c(%rax)
je 0xd4248
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rax
movq (%rax), %rsi
movq -0x38(%rbp), %rdx
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rcx
callq 0x9d630
jmp 0xd42aa
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq -0x20(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0xd42a8
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x38(%rbp), %rdx
callq *%rax
movq -0x40(%rbp), %rax
addq -0x30(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
addq -0x30(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0xd425b
jmp 0xd42aa
jmp 0xd46b8
movq -0x18(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0xd42e3
leaq 0x7ec0f(%rip), %rdi     # 0x152ed8
leaq 0x7ec28(%rip), %rsi     # 0x152ef8
movl $0x85, %edx
leaq 0x7ec30(%rip), %rcx     # 0x152f0c
movb $0x0, %al
callq 0x9cf40
movq -0x50(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xd46d0
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rdi
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0x50(%rbp), %rcx
addq $0x10, %rcx
xorl %eax, %eax
movl %eax, %esi
callq 0x9d330
movq %rax, %rcx
movq -0x50(%rbp), %rax
movq %rcx, (%rax)
movq -0x58(%rbp), %rax
testb $0x1, 0x2c(%rax)
je 0xd435a
movq -0x60(%rbp), %rdi
movq -0x50(%rbp), %rax
movq (%rax), %rsi
movq -0x68(%rbp), %rdx
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rcx
callq 0x9d630
jmp 0xd43bc
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x70(%rbp)
movq $0x0, -0x78(%rbp)
movq -0x78(%rbp), %rax
movq -0x50(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0xd43ba
movq -0x58(%rbp), %rax
movq 0x90(%rax), %rax
movq -0x58(%rbp), %rdi
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
callq *%rax
movq -0x70(%rbp), %rax
addq -0x60(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x68(%rbp), %rax
addq -0x60(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0xd436d
jmp 0xd43bc
jmp 0xd46b8
movq -0x18(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x80(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x90(%rbp)
movq -0x80(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0x80(%rbp), %rcx
addq $0x10, %rcx
movl $0x8, %edi
xorl %eax, %eax
movl %eax, %esi
callq 0x9d330
movq %rax, %rcx
movq -0x80(%rbp), %rax
movq %rcx, (%rax)
movq -0x80(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x98(%rbp)
movq $0x0, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
movq -0x80(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0xd4496
movq -0x88(%rbp), %rax
movq 0xc0(%rax), %rax
movq -0x88(%rbp), %rdi
movq -0x90(%rbp), %rcx
movq %rcx, %rdx
addq $0x8, %rdx
movq %rdx, -0x90(%rbp)
movq (%rcx), %rsi
callq *%rax
movq %rax, %rcx
movq -0x98(%rbp), %rax
movq %rax, %rdx
addq $0x8, %rdx
movq %rdx, -0x98(%rbp)
movq %rcx, (%rax)
movq -0xa0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xa0(%rbp)
jmp 0xd4427
jmp 0xd46b8
movq -0x18(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0xd44d5
leaq 0x7ea1d(%rip), %rdi     # 0x152ed8
leaq 0x7ea36(%rip), %rsi     # 0x152ef8
movl $0xa9, %edx
leaq 0x7ea3e(%rip), %rcx     # 0x152f0c
movb $0x0, %al
callq 0x9cf40
movq -0xa8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xd46d0
movq %rax, -0xb0(%rbp)
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xb8(%rbp)
movq -0xa8(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0xa8(%rbp), %rcx
addq $0x10, %rcx
movl $0x8, %edi
xorl %eax, %eax
movl %eax, %esi
callq 0x9d330
movq %rax, %rcx
movq -0xa8(%rbp), %rax
movq %rcx, (%rax)
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xc0(%rbp)
movq $0x0, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
movq -0xa8(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0xd45bc
movq -0xb0(%rbp), %rax
movq 0xc0(%rax), %rax
movq -0xb0(%rbp), %rdi
movq -0xb8(%rbp), %rcx
movq %rcx, %rdx
addq $0x8, %rdx
movq %rdx, -0xb8(%rbp)
movq (%rcx), %rsi
callq *%rax
movq %rax, %rcx
movq -0xc0(%rbp), %rax
movq %rax, %rdx
addq $0x8, %rdx
movq %rdx, -0xc0(%rbp)
movq %rcx, (%rax)
movq -0xc8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xc8(%rbp)
jmp 0xd454a
jmp 0xd46b8
movq -0x18(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xd8(%rbp)
movq -0xd0(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0xd0(%rbp), %rcx
addq $0x10, %rcx
movl $0x8, %edi
xorl %eax, %eax
movl %eax, %esi
callq 0x9d330
movq %rax, %rcx
movq -0xd0(%rbp), %rax
movq %rcx, (%rax)
movq -0xd0(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xe0(%rbp)
movq $0x0, -0xe8(%rbp)
movq -0xe8(%rbp), %rax
movq -0xd0(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0xd468a
movq -0xd8(%rbp), %rax
movq %rax, %rcx
addq $0x8, %rcx
movq %rcx, -0xd8(%rbp)
movq (%rax), %rdi
callq 0xd4740
movq %rax, %rcx
movq -0xe0(%rbp), %rax
movq %rax, %rdx
addq $0x8, %rdx
movq %rdx, -0xe0(%rbp)
movq %rcx, (%rax)
movq -0xe8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xe8(%rbp)
jmp 0xd462a
jmp 0xd46b8
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movl %eax, %r8d
leaq 0x7e83a(%rip), %rdi     # 0x152ed8
leaq 0x7e853(%rip), %rsi     # 0x152ef8
movl $0xbc, %edx
leaq 0x7e888(%rip), %rcx     # 0x152f39
movb $0x0, %al
callq 0x9cf40
addq $0xf0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)