// File: /workspace/github_c_makefile_star2_O2/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), %rcx
movq 0x8(%rsi), %r14
cmpq %r14, %rbx
jne 0xeac7
cmpq 0x20(%rsi), %rcx
jne 0xebe6
movabsq $0x65c9718e19e3df34, %rcx # imm = 0x65C9718E19E3DF34
movb $0x1, %al
cmpq %rcx, 0x10(%rdi)
jne 0xebe8
cmpq %rcx, 0x10(%rsi)
jmp 0xeb13
testq %rcx, %rcx
sete %dl
jne 0xeada
cmpq $0x0, 0x20(%rsi)
je 0xeb8d
movabsq $-0x3ac242643d9c35a8, %rax # imm = 0xC53DBD9BC263CA58
movabsq $0x6f0b060106a30da4, %r9 # imm = 0x6F0B060106A30DA4
movabsq $0x54de8100f7c1cbe5, %r8 # imm = 0x54DE8100F7C1CBE5
cmpq %rax, %r14
je 0xeb4b
cmpq %r9, %r14
je 0xeb1b
cmpq %r8, %r14
jne 0xebe6
xorq $0x1, %rcx
orq 0x20(%rsi), %rcx
sete %al
jmp 0xebe8
cmpq $0x0, 0x20(%rsi)
jne 0xebe6
cmpq $0x1, %rcx
jne 0xebe6
movb $0x1, %al
movabsq $0x65c9718e19e3df34, %rcx # imm = 0x65C9718E19E3DF34
cmpq %rcx, 0x10(%rdi)
je 0xebe6
jmp 0xebe8
cmpq $0x0, 0x20(%rsi)
jne 0xebe6
movb $0x1, %al
testq %rcx, %rcx
jg 0xebe8
movabsq $-0x84b14e74a9e1ff0, %rax # imm = 0xF7B4EB18B561E010
cmpq %rax, %rbx
je 0xeb89
movabsq $0x230abe18cdeefc99, %rax # imm = 0x230ABE18CDEEFC99
cmpq %rax, %rbx
je 0xeb89
cmpq %r9, %rbx
je 0xeb89
cmpq %r8, %rbx
jne 0xebe6
movl %edx, %eax
jmp 0xebe8
movq %rbx, %rdi
callq 0xebf0
testb %al, %al
je 0xeba9
movq %r14, %rdi
callq 0xebf0
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
jne 0xebe8
movabsq $0x230abe18cdeefc99, %rax # imm = 0x230ABE18CDEEFC99
cmpq %rax, %rbx
je 0xebd5
movabsq $0x6f0b060106a30da4, %rax # imm = 0x6F0B060106A30DA4
cmpq %rax, %rbx
jne 0xebe6
movb $0x1, %al
movabsq $0x54de8100f7c1cbe5, %rcx # imm = 0x54DE8100F7C1CBE5
jmp 0xebe1
movb $0x1, %al
movabsq $-0x84b14e74a9e1ff0, %rcx # imm = 0xF7B4EB18B561E010
cmpq %rcx, %r14
je 0xebe8
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq