// File: /workspace/github_c_makefile_star2_O0/johsteffens[P]beth/lib/bcore/bcore.xo.c
// Function: x_btcl_frame_s_eval_number_literal
er_t x_btcl_frame_s_eval_number_literal( x_btcl_frame_s* o, x_source* source, sr_s* sr )
{
    // bcore_x_btcl.x:913:1
    BLM_INIT_LEVEL(0);
    bl_t is_hex = false;
    bl_t is_float = false;
    st_s st;BLM_T_INIT_SPUSH(st_s, &st);;
    
    if( x_source_parse_bl(source,"#?'0x'" ) )
    {
        st_s_push_sc(&(st),"0x" );
        is_hex = true;
    }
    else if( x_source_parse_bl(source,"#?'0X'" ) )
    {
        st_s_push_sc(&(st),"0X" );
        is_hex = true;
    }
    
    if( is_hex )
    {
        while( x_source_parse_bl(source,"#?(([0]>='0'&&[0]<='9')||([0]>='a'&&[0]<='f')||([0]>='A'&&[0]<='F'))" ) )
        {
            st_s_push_char(&(st),x_source_get_char(source) );
        }
    }
    else // decimal
    {
        while( x_source_parse_bl(source,"#?([0]>='0'&&[0]<='9')" ) ) st_s_push_char(&(st),x_source_get_char(source) );
    }
    
    if( !is_hex && x_source_parse_bl(source,"#?([0]=='.')" ) )
    {
        st_s_push_char(&(st),x_source_get_char(source) );
        while( x_source_parse_bl(source,"#?([0]>='0'&&[0]<='9')" ) ) st_s_push_char(&(st),x_source_get_char(source) );
        is_float = true;
    }
    
    bl_t exponent = false;
    
    if( !is_hex && x_source_parse_bl(source,"#?([0]=='e'||[0]=='E')" ) )
    {
        st_s_push_char(&(st),x_source_get_char(source) );
        exponent = true;
        is_float = true;
    }
    
    if( exponent )
    {
        if( x_source_parse_bl(source,"#?([0]=='+'||[0]=='-')" ) )
        {
            st_s_push_char(&(st),x_source_get_char(source) );
        }
    
        while( x_source_parse_bl(source,"#?([0]>='0'&&[0]<='9')" ) )
        {
            st_s_push_char(&(st),x_source_get_char(source) );
        }
    }
    
    f3_t factor = 1.0;
    bl_t use_suffix = true;
    
    char c = x_source_inspect_char(source);
    switch( c )
    {
        case 'd': factor = 1E-1;  break; // deci
        case 'c': factor = 1E-2;  break; // centi
        case 'm': factor = 1E-3;  break; // milli
        case 'u': factor = 1E-6;  break; // micro
        case 'n': factor = 1E-9;  break; // nano
        case 'p': factor = 1E-12; break; // pico
        case 'f': factor = 1E-15; break; // femto
        case 'a': factor = 1E-18; break; // atto
        case 'z': factor = 1E-21; break; // zepto
        case 'y': factor = 1E-24; break; // yocto
        case 'r': factor = 1E-27; break; // ronto
        case 'q': factor = 1E-30; break; // quecto
    
        case 'D': factor = 1E+1;  break; // deca
        case 'C': factor = 1E+2;  break; // cento
        case 'K': factor = 1E+3;  break; // kilo
        case 'M': factor = 1E+6;  break; // mega
        case 'G': factor = 1E+9;  break; // giga
        case 'T': factor = 1E+12; break; // tera
        case 'P': factor = 1E+15; break; // peta
        case 'X': factor = 1E+18; break; // exa
        case 'Z': factor = 1E+21; break; // zetta
        case 'Y': factor = 1E+24; break; // yotta
        case 'R': factor = 1E+27; break; // ronna
        case 'Q': factor = 1E+30; break; // quetta
    
        default: use_suffix = false; break;
    }
    
    if( use_suffix ) x_source_get_char(source);
    
    if( is_float )
    {
        f3_t f3 = 0;
        st_s_parse_fa(&(st),0, -1, "#<f3_t*>", (&(f3)) );
        sr_s_const_from_f3(sr,f3 * factor );
    }
    else
    {
        s3_t s3 = 0;
        st_s_parse_fa(&(st),0, -1, "#<s3_t*>", (&(s3)) );
        if( use_suffix )
        {
            sr_s_const_from_f3(sr,s3 * factor );
        }
        else
        {
            sr_s_const_from_s3(sr,s3 );
        }
    }
    
    BLM_RETURNV(er_t, 0)
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
leaq 0x157082(%rip), %rax    # 0x1b2330
movq (%rax), %rax
movq %rax, -0x20(%rbp)
leaq -0x50(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0xbfe80
movq -0x58(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq $0x0, 0x10(%rax)
movb $0x0, -0x59(%rbp)
movb $0x0, -0x5a(%rbp)
leaq -0x80(%rbp), %rdi
callq 0xfe150
movq -0x20(%rbp), %rdi
movabsq $-0x503db0e6e1c2e704, %rsi # imm = 0xAFC24F191E3D18FC
leaq -0x80(%rbp), %rdx
callq 0xc0220
movq -0x10(%rbp), %rdi
leaq 0xdb3f3(%rip), %rsi     # 0x136704
callq 0x44f40
testb $0x1, %al
jne 0x5b31c
jmp 0x5b332
leaq -0x80(%rbp), %rdi
leaq 0xdb3e4(%rip), %rsi     # 0x13670b
callq 0x100040
movb $0x1, -0x59(%rbp)
jmp 0x5b35e
movq -0x10(%rbp), %rdi
leaq 0xdb3d1(%rip), %rsi     # 0x13670e
callq 0x44f40
testb $0x1, %al
jne 0x5b348
jmp 0x5b35c
leaq -0x80(%rbp), %rdi
leaq 0xdb3c2(%rip), %rsi     # 0x136715
callq 0x100040
movb $0x1, -0x59(%rbp)
jmp 0x5b35e
testb $0x1, -0x59(%rbp)
je 0x5b395
jmp 0x5b366
movq -0x10(%rbp), %rdi
leaq 0xdb3a7(%rip), %rsi     # 0x136718
callq 0x44f40
testb $0x1, %al
jne 0x5b37c
jmp 0x5b393
movq -0x10(%rbp), %rdi
callq 0x547f0
leaq -0x80(%rbp), %rdi
movsbl %al, %esi
callq 0xffba0
jmp 0x5b366
jmp 0x5b3c6
jmp 0x5b397
movq -0x10(%rbp), %rdi
leaq 0xe4c80(%rip), %rsi     # 0x140022
callq 0x44f40
testb $0x1, %al
jne 0x5b3ad
jmp 0x5b3c4
movq -0x10(%rbp), %rdi
callq 0x547f0
leaq -0x80(%rbp), %rdi
movsbl %al, %esi
callq 0xffba0
jmp 0x5b397
jmp 0x5b3c6
testb $0x1, -0x59(%rbp)
jne 0x5b428
movq -0x10(%rbp), %rdi
leaq 0xdb386(%rip), %rsi     # 0x13675d
callq 0x44f40
testb $0x1, %al
jne 0x5b3e2
jmp 0x5b428
movq -0x10(%rbp), %rdi
callq 0x547f0
leaq -0x80(%rbp), %rdi
movsbl %al, %esi
callq 0xffba0
movq -0x10(%rbp), %rdi
leaq 0xe4c20(%rip), %rsi     # 0x140022
callq 0x44f40
testb $0x1, %al
jne 0x5b40d
jmp 0x5b424
movq -0x10(%rbp), %rdi
callq 0x547f0
leaq -0x80(%rbp), %rdi
movsbl %al, %esi
callq 0xffba0
jmp 0x5b3f7
movb $0x1, -0x5a(%rbp)
movb $0x0, -0x81(%rbp)
testb $0x1, -0x59(%rbp)
jne 0x5b46b
movq -0x10(%rbp), %rdi
leaq 0xdb32a(%rip), %rsi     # 0x13676a
callq 0x44f40
testb $0x1, %al
jne 0x5b44b
jmp 0x5b46b
movq -0x10(%rbp), %rdi
callq 0x547f0
leaq -0x80(%rbp), %rdi
movsbl %al, %esi
callq 0xffba0
movb $0x1, -0x81(%rbp)
movb $0x1, -0x5a(%rbp)
testb $0x1, -0x81(%rbp)
je 0x5b4d0
movq -0x10(%rbp), %rdi
leaq 0xdb302(%rip), %rsi     # 0x136781
callq 0x44f40
testb $0x1, %al
jne 0x5b48a
jmp 0x5b49f
movq -0x10(%rbp), %rdi
callq 0x547f0
leaq -0x80(%rbp), %rdi
movsbl %al, %esi
callq 0xffba0
jmp 0x5b4a1
movq -0x10(%rbp), %rdi
leaq 0xe4b76(%rip), %rsi     # 0x140022
callq 0x44f40
testb $0x1, %al
jne 0x5b4b7
jmp 0x5b4ce
movq -0x10(%rbp), %rdi
callq 0x547f0
leaq -0x80(%rbp), %rdi
movsbl %al, %esi
callq 0xffba0
jmp 0x5b4a1
jmp 0x5b4d0
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, -0x90(%rbp)
movb $0x1, -0x91(%rbp)
movq -0x10(%rbp), %rdi
callq 0x547d0
movb %al, -0x92(%rbp)
movsbl -0x92(%rbp), %eax
addl $-0x43, %eax
movl %eax, %ecx
movq %rcx, -0xb8(%rbp)
subl $0x37, %eax
ja 0x5b70d
movq -0xb8(%rbp), %rax
leaq 0xe39ff(%rip), %rcx     # 0x13ef20
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movsd 0xe39b6(%rip), %xmm0    # 0x13eee8
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe3999(%rip), %xmm0    # 0x13eee0
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe397c(%rip), %xmm0    # 0x13eed8
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xd7e4f(%rip), %xmm0    # 0x1333c0
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe394a(%rip), %xmm0    # 0x13eed0
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe392d(%rip), %xmm0    # 0x13eec8
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe3910(%rip), %xmm0    # 0x13eec0
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe38f3(%rip), %xmm0    # 0x13eeb8
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe38d6(%rip), %xmm0    # 0x13eeb0
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe38b9(%rip), %xmm0    # 0x13eea8
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe389c(%rip), %xmm0    # 0x13eea0
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe387f(%rip), %xmm0    # 0x13ee98
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe3862(%rip), %xmm0    # 0x13ee90
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe3845(%rip), %xmm0    # 0x13ee88
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe37d8(%rip), %xmm0    # 0x13ee30
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xd7d5b(%rip), %xmm0    # 0x1333c8
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe37fe(%rip), %xmm0    # 0x13ee80
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe37e1(%rip), %xmm0    # 0x13ee78
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe37c7(%rip), %xmm0    # 0x13ee70
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe37ad(%rip), %xmm0    # 0x13ee68
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe3793(%rip), %xmm0    # 0x13ee60
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe3779(%rip), %xmm0    # 0x13ee58
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe375f(%rip), %xmm0    # 0x13ee50
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movsd 0xe3745(%rip), %xmm0    # 0x13ee48
movsd %xmm0, -0x90(%rbp)
jmp 0x5b714
movb $0x0, -0x91(%rbp)
testb $0x1, -0x91(%rbp)
je 0x5b726
movq -0x10(%rbp), %rdi
callq 0x547f0
testb $0x1, -0x5a(%rbp)
je 0x5b776
xorps %xmm0, %xmm0
movsd %xmm0, -0xa0(%rbp)
leaq -0x80(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movq $-0x1, %rdx
leaq 0xf367e(%rip), %rcx     # 0x14edcb
leaq -0xa0(%rbp), %r8
movb $0x0, %al
callq 0x105550
movq -0x18(%rbp), %rdi
movsd -0xa0(%rbp), %xmm0
mulsd -0x90(%rbp), %xmm0
callq 0xfc4e0
jmp 0x5b7dc
movq $0x0, -0xa8(%rbp)
leaq -0x80(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movq $-0x1, %rdx
leaq 0xfb6af(%rip), %rcx     # 0x156e46
leaq -0xa8(%rbp), %r8
movb $0x0, %al
callq 0x105550
testb $0x1, -0x91(%rbp)
je 0x5b7ca
movq -0x18(%rbp), %rdi
cvtsi2sdq -0xa8(%rbp), %xmm0
mulsd -0x90(%rbp), %xmm0
callq 0xfc4e0
jmp 0x5b7da
movq -0x18(%rbp), %rdi
movq -0xa8(%rbp), %rsi
callq 0xfc5c0
jmp 0x5b7dc
movq $0x0, -0xb0(%rbp)
movq -0x58(%rbp), %rdi
callq 0xc0720
movq -0xb0(%rbp), %rax
addq $0xc0, %rsp
popq %rbp
retq