// File: /workspace/github_c_makefile_star2_O1/johsteffens[P]beth/xoico/src/xoico.xo.c
// Function: xoico_typespec_s_converts_to
bl_t xoico_typespec_s_converts_to( const xoico_typespec_s* o, const xoico_typespec_s* b )
{
    // xoico_typespec.x:336:1
    
    if( o->type == b->type )
    {
        if( o->indirection == b->indirection )
        {
            if( o->access_class == TYPEOF_const )
            {
                return  ( b->access_class == TYPEOF_const );
            }
            else
            {
                return  true;
            }
        }
        else
        {
            return  false;
        }
    }
    else
    {
        if( o->indirection == 0 && b->indirection == 0 )
        {
            if( xoico_typespec_is_numeric(o->type ) && xoico_typespec_is_numeric(b->type ) )
            {
                return  true;
            }
            else if( o->type == ((tp_t)(TYPEOF_vd_t)) && b->type == ((tp_t)(TYPEOF_vc_t)) )
            {
                return  true;
            }
            else if( o->type == ((tp_t)(TYPEOF_sd_t)) && b->type == ((tp_t)(TYPEOF_sc_t)) )
            {
                return  true;
            }
            else
            {
                return  false;
            }
        }
        else if( b->type == ((tp_t)(TYPEOF_vc_t)) && b->indirection == 0 )
        {
            if( o->indirection == 1 )
            {
                return  true;
            }
            else
            {
                return  false;
            }
        }
        else if( b->type == ((tp_t)(TYPEOF_vd_t)) && b->indirection == 0 )
        {
            if( o->indirection == 1 && ( o->access_class != TYPEOF_const ) )
            {
                return  true;
            }
            else
            {
                return  false;
            }
        }
        else if( b->type == ((tp_t)(TYPEOF_bl_t)) && b->indirection == 0 )
        {
            if( o->indirection > 0 )
            {
                return  true;
            }
            else if( o->type == ((tp_t)(TYPEOF_vd_t)) || o->type == ((tp_t)(TYPEOF_vc_t)) || o->type == ((tp_t)(TYPEOF_sc_t)) || o->type == ((tp_t)(TYPEOF_sd_t)) )
            {
                return  ( o->indirection == 0 );
            }
            else
            {
                return  false;
            }
        }
        else
        {
            return  false;
        }
    }
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq 0x8(%rdi), %rbx
movq 0x20(%rdi), %rdx
movq 0x8(%rsi), %r14
cmpq %r14, %rbx
jne 0x1218e
cmpq 0x20(%rsi), %rdx
jne 0x121f6
movabsq $0x65c9718e19e3df34, %rcx # imm = 0x65C9718E19E3DF34
movb $0x1, %al
cmpq %rcx, 0x10(%rdi)
jne 0x122b9
cmpq %rcx, 0x10(%rsi)
jmp 0x122b6
testq %rdx, %rdx
sete %cl
jne 0x1219d
cmpq $0x0, 0x20(%rsi)
je 0x121fd
movabsq $-0x3ac242643d9c35a8, %rax # imm = 0xC53DBD9BC263CA58
cmpq %rax, %r14
je 0x121ef
movabsq $0x6f0b060106a30da4, %r8 # imm = 0x6F0B060106A30DA4
cmpq %r8, %r14
je 0x121df
movabsq $0x54de8100f7c1cbe5, %r9 # imm = 0x54DE8100F7C1CBE5
cmpq %r9, %r14
jne 0x121f6
cmpq $0x0, 0x20(%rsi)
je 0x122b2
cmpq %rax, %r14
je 0x121ef
cmpq %r8, %r14
jne 0x121f6
cmpq $0x0, 0x20(%rsi)
je 0x12290
cmpq %rax, %r14
jne 0x121f6
cmpq $0x0, 0x20(%rsi)
je 0x1225d
xorl %eax, %eax
jmp 0x122b9
movq %rbx, %rdi
callq 0x122e3
testb %al, %al
je 0x1221d
movq %r14, %rdi
callq 0x122e3
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
jne 0x122b9
movabsq $0x6f0b060106a30da4, %rcx # imm = 0x6F0B060106A30DA4
xorq %rbx, %rcx
movabsq $0x54de8100f7c1cbe5, %rdx # imm = 0x54DE8100F7C1CBE5
xorq %r14, %rdx
movb $0x1, %al
orq %rcx, %rdx
je 0x122b9
movabsq $0x230abe18cdeefc99, %rax # imm = 0x230ABE18CDEEFC99
xorq %rax, %rbx
movabsq $-0x84b14e74a9e1ff0, %rax # imm = 0xF7B4EB18B561E010
xorq %rax, %r14
orq %rbx, %r14
jmp 0x122b6
movb $0x1, %al
testq %rdx, %rdx
jg 0x122b9
xorl %eax, %eax
movabsq $0x54de8100f7c1cbe4, %rdx # imm = 0x54DE8100F7C1CBE4
cmpq %rdx, %rbx
jg 0x122c1
movabsq $-0x84b14e74a9e1ff0, %rdx # imm = 0xF7B4EB18B561E010
cmpq %rdx, %rbx
je 0x122df
movabsq $0x230abe18cdeefc99, %rdx # imm = 0x230ABE18CDEEFC99
jmp 0x122da
cmpq $0x1, %rdx
jne 0x121f6
movb $0x1, %al
movabsq $0x65c9718e19e3df34, %rcx # imm = 0x65C9718E19E3DF34
cmpq %rcx, 0x10(%rdi)
je 0x121f6
jmp 0x122b9
cmpq $0x1, %rdx
sete %al
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movabsq $0x6f0b060106a30da4, %rdx # imm = 0x6F0B060106A30DA4
cmpq %rdx, %rbx
je 0x122df
movabsq $0x54de8100f7c1cbe5, %rdx # imm = 0x54DE8100F7C1CBE5
cmpq %rdx, %rbx
jne 0x122b9
movl %ecx, %eax
jmp 0x122b9