// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/lib/bcore/bcore_spect_compare.c
// Function: create_from_self
static bcore_compare_s* create_from_self( const bcore_self_s* self )
{
    assert( self != NULL );

    bcore_compare_s* o = compare_s_create();
    o->o_type  = self->type;
    o->via     = bcore_via_s_get_typed( o->o_type );
    fp_t cmp_a =                     bcore_self_s_try_external_fp( self, typeof( "ap_t" ), typeof( "compare" ) );
    fp_t cmp_o = ( cmp_a ) ? cmp_a : bcore_self_s_try_external_fp( self, typeof( "bcore_fp_compare" ), 0 );

    o->fp_compare = cmp_o;

    typedef s2_t (*fp_icmp)( const bcore_compare_s*, vc_t, vc_t );

    switch( o->o_type )
    {
        case TYPEOF_s3_t: o->compare = ( fp_icmp )compare_s3_t; break;
        case TYPEOF_s2_t: o->compare = ( fp_icmp )compare_s2_t; break;
        case TYPEOF_s1_t: o->compare = ( fp_icmp )compare_s1_t; break;
        case TYPEOF_s0_t: o->compare = ( fp_icmp )compare_s0_t; break;
        case TYPEOF_u3_t: o->compare = ( fp_icmp )compare_u3_t; break;
        case TYPEOF_u2_t: o->compare = ( fp_icmp )compare_u2_t; break;
        case TYPEOF_u1_t: o->compare = ( fp_icmp )compare_u1_t; break;
        case TYPEOF_u0_t: o->compare = ( fp_icmp )compare_u0_t; break;
        case TYPEOF_f3_t: o->compare = ( fp_icmp )compare_f3_t; break;
        case TYPEOF_f2_t: o->compare = ( fp_icmp )compare_f2_t; break;
        case TYPEOF_sz_t: o->compare = ( fp_icmp )compare_sz_t; break;
        case TYPEOF_uz_t: o->compare = ( fp_icmp )compare_uz_t; break;
        case TYPEOF_tp_t: o->compare = ( fp_icmp )compare_tp_t; break;
        default:
        {
            o->compare = cmp_a ? compare_amoebic : ( cmp_o ? compare_o : compare_generic );
        }
        break;
    }

    return o;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
callq 0xe2410
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xe2440
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rax
movq %rax, -0x30(%rbp)
leaq 0x6bc79(%rip), %rdi     # 0x14dd85
callq 0xe0ad0
movq %rax, -0x28(%rbp)
leaq 0x6f201(%rip), %rdi     # 0x15131d
callq 0xe0ad0
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq %rax, %rdx
callq 0xa6a30
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0xe2146
movq -0x18(%rbp), %rax
movq %rax, -0x38(%rbp)
jmp 0xe216e
movq -0x8(%rbp), %rax
movq %rax, -0x40(%rbp)
leaq 0x6d07c(%rip), %rdi     # 0x14f1d1
callq 0xe0ad0
movq -0x40(%rbp), %rdi
movq %rax, %rsi
xorl %eax, %eax
movl %eax, %edx
callq 0xa6a30
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
movabsq $-0x73f6ae1ad309fd45, %rcx # imm = 0x8C0951E52CF602BB
subq %rcx, %rax
je 0xe234e
jmp 0xe21a3
movq -0x48(%rbp), %rax
movabsq $-0x6bce971ace902370, %rcx # imm = 0x943168E5316FDC90
subq %rcx, %rax
je 0xe233a
jmp 0xe21bc
movq -0x48(%rbp), %rax
movabsq $-0x6119581ac7eacd63, %rcx # imm = 0x9EE6A7E53815329D
subq %rcx, %rax
je 0xe2326
jmp 0xe21d5
movq -0x48(%rbp), %rax
movabsq $-0x5fc2af85f419929b, %rcx # imm = 0xA03D507A0BE66D65
subq %rcx, %rax
je 0xe2362
jmp 0xe21ee
movq -0x48(%rbp), %rax
movabsq $-0x5aa4411ac4e2880e, %rcx # imm = 0xA55BBEE53B1D77F2
subq %rcx, %rax
je 0xe2312
jmp 0xe2207
movq -0x48(%rbp), %rax
movabsq $-0x58737885f0577326, %rcx # imm = 0xA78C877A0FA88CDA
subq %rcx, %rax
je 0xe2376
jmp 0xe2220
movq -0x48(%rbp), %rax
movabsq $-0x4882601bdca6aefb, %rcx # imm = 0xB77D9FE423595105
subq %rcx, %rax
je 0xe2398
jmp 0xe2239
movq -0x48(%rbp), %rax
movabsq $-0x3f1363e6d8155aed, %rcx # imm = 0xC0EC9C1927EAA513
subq %rcx, %rax
je 0xe2387
jmp 0xe2252
movq -0x48(%rbp), %rax
movabsq $0x510c2417c67dabeb, %rcx # imm = 0x510C2417C67DABEB
subq %rcx, %rax
je 0xe22d6
jmp 0xe2267
movq -0x48(%rbp), %rax
movabsq $0x585a3b17ca3de200, %rcx # imm = 0x585A3B17CA3DE200
subq %rcx, %rax
je 0xe22c2
jmp 0xe227c
movq -0x48(%rbp), %rax
movabsq $0x62367a17d02b474d, %rcx # imm = 0x62367A17D02B474D
subq %rcx, %rax
je 0xe22fe
jmp 0xe2291
movq -0x48(%rbp), %rax
movabsq $0x69849117d3eb7d62, %rcx # imm = 0x69849117D3EB7D62
subq %rcx, %rax
je 0xe22ea
jmp 0xe22a6
movq -0x48(%rbp), %rax
movabsq $0x6d07f9ef5b68e8a2, %rcx # imm = 0x6D07F9EF5B68E8A2
subq %rcx, %rax
je 0xe23a9
jmp 0xe23ba
movq -0x10(%rbp), %rax
leaq 0x1e3(%rip), %rcx       # 0xe24b0
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x25f(%rip), %rcx       # 0xe2540
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x2db(%rip), %rcx       # 0xe25d0
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x357(%rip), %rcx       # 0xe2660
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x3d3(%rip), %rcx       # 0xe26f0
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x44f(%rip), %rcx       # 0xe2780
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x4cb(%rip), %rcx       # 0xe2810
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x547(%rip), %rcx       # 0xe28a0
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x5c3(%rip), %rcx       # 0xe2930
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x64f(%rip), %rcx       # 0xe29d0
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x6de(%rip), %rcx       # 0xe2a70
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x75d(%rip), %rcx       # 0xe2b00
movq %rcx, 0x20(%rax)
jmp 0xe23f8
movq -0x10(%rbp), %rax
leaq 0x7dc(%rip), %rcx       # 0xe2b90
movq %rcx, 0x20(%rax)
jmp 0xe23f8
cmpq $0x0, -0x18(%rbp)
je 0xe23ce
leaq 0x858(%rip), %rax       # 0xe2c20
movq %rax, -0x50(%rbp)
jmp 0xe23ec
movq -0x20(%rbp), %rdx
leaq -0x2089(%rip), %rax     # 0xe0350
leaq 0x8a0(%rip), %rcx       # 0xe2c80
cmpq $0x0, %rdx
cmovneq %rcx, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)