// File: /workspace/github_c_makefile_star2_O0/vtereshkov[P]umka-lang/src/umka_types.h
// Function: typeConvOverflow
static inline bool typeConvOverflow(TypeKind destTypeKind, TypeKind srcTypeKind, Const val)
{
    const bool fromVeryBigUInt = val.intVal < 0 && srcTypeKind == TYPE_UINT;
    const bool fromNegativeInt = val.intVal < 0 && typeKindSigned(srcTypeKind);

    switch (destTypeKind)
    {
        case TYPE_VOID:     return true;
        case TYPE_INT8:     return val.intVal  < -128            || val.intVal  > 127        || fromVeryBigUInt;
        case TYPE_INT16:    return val.intVal  < -32768          || val.intVal  > 32767      || fromVeryBigUInt;
        case TYPE_INT32:    return val.intVal  < -2147483647 - 1 || val.intVal  > 2147483647 || fromVeryBigUInt;
        case TYPE_INT:      return fromVeryBigUInt;
        case TYPE_UINT8:    return val.intVal  < 0               || val.intVal  > 255;
        case TYPE_UINT16:   return val.intVal  < 0               || val.intVal  > 65535;
        case TYPE_UINT32:   return val.intVal  < 0               || val.intVal  > 4294967295;
        case TYPE_UINT:     return fromNegativeInt;
        case TYPE_BOOL:     return val.intVal  < 0               || val.intVal  > 1;
        case TYPE_CHAR:     return val.intVal  < 0               || val.intVal  > 255;
        case TYPE_REAL32:   return val.realVal < -FLT_MAX        || val.realVal > FLT_MAX;
        case TYPE_REAL:     return val.realVal < -DBL_MAX        || val.realVal > DBL_MAX;
        case TYPE_PTR:
        case TYPE_WEAKPTR:
        case TYPE_STR:
        case TYPE_ARRAY:
        case TYPE_DYNARRAY:
        case TYPE_MAP:
        case TYPE_STRUCT:
        case TYPE_INTERFACE:
        case TYPE_CLOSURE:
        case TYPE_FIBER:
        case TYPE_FN:       return false;
        default:            return true;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdx, -0x10(%rbp)
movl %edi, -0x14(%rbp)
movl %esi, -0x18(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x10(%rbp)
movb %al, -0x1b(%rbp)
jge 0x98f8
cmpl $0xb, -0x18(%rbp)
sete %al
movb %al, -0x1b(%rbp)
movb -0x1b(%rbp), %al
andb $0x1, %al
movb %al, -0x19(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x10(%rbp)
movb %al, -0x1c(%rbp)
jge 0x9917
movl -0x18(%rbp), %edi
callq 0x9b40
movb %al, -0x1c(%rbp)
movb -0x1c(%rbp), %al
andb $0x1, %al
movb %al, -0x1a(%rbp)
movl -0x14(%rbp), %eax
addl $-0x2, %eax
movl %eax, %ecx
movq %rcx, -0x28(%rbp)
subl $0x18, %eax
ja 0x9b26
movq -0x28(%rbp), %rax
leaq 0x1ce5d9(%rip), %rcx    # 0x1d7f18
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x1, -0x1(%rbp)
jmp 0x9b2a
movb $0x1, %al
cmpq $-0x80, -0x10(%rbp)
movb %al, -0x29(%rbp)
jl 0x996f
movb $0x1, %al
cmpq $0x7f, -0x10(%rbp)
movb %al, -0x29(%rbp)
jg 0x996f
movb -0x19(%rbp), %al
movb %al, -0x29(%rbp)
movb -0x29(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb $0x1, %al
cmpq $-0x8000, -0x10(%rbp)   # imm = 0x8000
movb %al, -0x2a(%rbp)
jl 0x99a0
movb $0x1, %al
cmpq $0x7fff, -0x10(%rbp)    # imm = 0x7FFF
movb %al, -0x2a(%rbp)
jg 0x99a0
movb -0x19(%rbp), %al
movb %al, -0x2a(%rbp)
movb -0x2a(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb $0x1, %al
cmpq $-0x80000000, -0x10(%rbp) # imm = 0x80000000
movb %al, -0x2b(%rbp)
jl 0x99d1
movb $0x1, %al
cmpq $0x7fffffff, -0x10(%rbp) # imm = 0x7FFFFFFF
movb %al, -0x2b(%rbp)
jg 0x99d1
movb -0x19(%rbp), %al
movb %al, -0x2b(%rbp)
movb -0x2b(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb -0x19(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb $0x1, %al
cmpq $0x0, -0x10(%rbp)
movb %al, -0x2c(%rbp)
jl 0x9a05
cmpq $0xff, -0x10(%rbp)
setg %al
movb %al, -0x2c(%rbp)
movb -0x2c(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb $0x1, %al
cmpq $0x0, -0x10(%rbp)
movb %al, -0x2d(%rbp)
jl 0x9a2c
cmpq $0xffff, -0x10(%rbp)    # imm = 0xFFFF
setg %al
movb %al, -0x2d(%rbp)
movb -0x2d(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb $0x1, %al
cmpq $0x0, -0x10(%rbp)
movb %al, -0x2e(%rbp)
jl 0x9a54
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpq %rax, -0x10(%rbp)
setg %al
movb %al, -0x2e(%rbp)
movb -0x2e(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb -0x1a(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb $0x1, %al
cmpq $0x0, -0x10(%rbp)
movb %al, -0x2f(%rbp)
jl 0x9a85
cmpq $0x1, -0x10(%rbp)
setg %al
movb %al, -0x2f(%rbp)
movb -0x2f(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb $0x1, %al
cmpq $0x0, -0x10(%rbp)
movb %al, -0x30(%rbp)
jl 0x9aac
cmpq $0xff, -0x10(%rbp)
setg %al
movb %al, -0x30(%rbp)
movb -0x30(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb $0x1, %al
movsd 0x1ce500(%rip), %xmm0   # 0x1d7fc0
ucomisd -0x10(%rbp), %xmm0
movb %al, -0x31(%rbp)
ja 0x9ae1
movsd -0x10(%rbp), %xmm0
movsd 0x1ce4f1(%rip), %xmm1   # 0x1d7fc8
ucomisd %xmm1, %xmm0
seta %al
movb %al, -0x31(%rbp)
movb -0x31(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb $0x1, %al
movsd 0x1ce4bb(%rip), %xmm0   # 0x1d7fb0
ucomisd -0x10(%rbp), %xmm0
movb %al, -0x32(%rbp)
ja 0x9b16
movsd -0x10(%rbp), %xmm0
movsd 0x1ce4ac(%rip), %xmm1   # 0x1d7fb8
ucomisd %xmm1, %xmm0
seta %al
movb %al, -0x32(%rbp)
movb -0x32(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x9b2a
movb $0x0, -0x1(%rbp)
jmp 0x9b2a
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)