// File: /workspace/github_c_makefile_star2_O0/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 %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x6ef9
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jne 0x6ef0
movq -0x10(%rbp), %rax
movabsq $0x65c9718e19e3df34, %rcx # imm = 0x65C9718E19E3DF34
cmpq %rcx, 0x10(%rax)
jne 0x6ee7
movq -0x18(%rbp), %rax
movabsq $0x65c9718e19e3df34, %rcx # imm = 0x65C9718E19E3DF34
cmpq %rcx, 0x10(%rax)
sete %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x70de
movb $0x1, -0x1(%rbp)
jmp 0x70de
movb $0x0, -0x1(%rbp)
jmp 0x70de
movq -0x10(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x6fb1
movq -0x18(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x6fb1
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x70f0
testb $0x1, %al
jne 0x6f2a
jmp 0x6f46
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x70f0
testb $0x1, %al
jne 0x6f3d
jmp 0x6f46
movb $0x1, -0x1(%rbp)
jmp 0x70de
movq -0x10(%rbp), %rax
movabsq $0x6f0b060106a30da4, %rcx # imm = 0x6F0B060106A30DA4
cmpq %rcx, 0x8(%rax)
jne 0x6f77
movq -0x18(%rbp), %rax
movabsq $0x54de8100f7c1cbe5, %rcx # imm = 0x54DE8100F7C1CBE5
cmpq %rcx, 0x8(%rax)
jne 0x6f77
movb $0x1, -0x1(%rbp)
jmp 0x70de
movq -0x10(%rbp), %rax
movabsq $0x230abe18cdeefc99, %rcx # imm = 0x230ABE18CDEEFC99
cmpq %rcx, 0x8(%rax)
jne 0x6fa8
movq -0x18(%rbp), %rax
movabsq $-0x84b14e74a9e1ff0, %rcx # imm = 0xF7B4EB18B561E010
cmpq %rcx, 0x8(%rax)
jne 0x6fa8
movb $0x1, -0x1(%rbp)
jmp 0x70de
movb $0x0, -0x1(%rbp)
jmp 0x70de
movq -0x18(%rbp), %rax
movabsq $0x54de8100f7c1cbe5, %rcx # imm = 0x54DE8100F7C1CBE5
cmpq %rcx, 0x8(%rax)
jne 0x6fed
movq -0x18(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x6fed
movq -0x10(%rbp), %rax
cmpq $0x1, 0x20(%rax)
jne 0x6fe4
movb $0x1, -0x1(%rbp)
jmp 0x70de
movb $0x0, -0x1(%rbp)
jmp 0x70de
movq -0x18(%rbp), %rax
movabsq $0x6f0b060106a30da4, %rcx # imm = 0x6F0B060106A30DA4
cmpq %rcx, 0x8(%rax)
jne 0x703d
movq -0x18(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x703d
movq -0x10(%rbp), %rax
cmpq $0x1, 0x20(%rax)
jne 0x7034
movq -0x10(%rbp), %rax
movabsq $0x65c9718e19e3df34, %rcx # imm = 0x65C9718E19E3DF34
cmpq %rcx, 0x10(%rax)
je 0x7034
movb $0x1, -0x1(%rbp)
jmp 0x70de
movb $0x0, -0x1(%rbp)
jmp 0x70de
movq -0x18(%rbp), %rax
movabsq $-0x3ac242643d9c35a8, %rcx # imm = 0xC53DBD9BC263CA58
cmpq %rcx, 0x8(%rax)
jne 0x70da
movq -0x18(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x70da
movq -0x10(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jle 0x7071
movb $0x1, -0x1(%rbp)
jmp 0x70de
movq -0x10(%rbp), %rax
movabsq $0x6f0b060106a30da4, %rcx # imm = 0x6F0B060106A30DA4
cmpq %rcx, 0x8(%rax)
je 0x70c1
movq -0x10(%rbp), %rax
movabsq $0x54de8100f7c1cbe5, %rcx # imm = 0x54DE8100F7C1CBE5
cmpq %rcx, 0x8(%rax)
je 0x70c1
movq -0x10(%rbp), %rax
movabsq $-0x84b14e74a9e1ff0, %rcx # imm = 0xF7B4EB18B561E010
cmpq %rcx, 0x8(%rax)
je 0x70c1
movq -0x10(%rbp), %rax
movabsq $0x230abe18cdeefc99, %rcx # imm = 0x230ABE18CDEEFC99
cmpq %rcx, 0x8(%rax)
jne 0x70d4
movq -0x10(%rbp), %rax
cmpq $0x0, 0x20(%rax)
sete %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x70de
movb $0x0, -0x1(%rbp)
jmp 0x70de
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)