// File: /workspace/github_cpp_makefile_star2_O3/besm6[P]pascal-re/pascompl.cc
// Function: parseLiteral(Types*&, Word&, bool)
void parseLiteral(TypesPtr & litType, Word & litValue,
    bool allowSign)
{
    Operator l3var1z;
    litValue = curToken;
    if (GTSY < SY) {
        if (allowSign and (charClass == PLUSOP || charClass == MINUSOP))  {
            l3var1z = charClass;
            inSymbol();
            parseLiteral(litType, litValue, false);
            if (litType != IntegerType && litType != RealType) {
                error(62); /* errIntegerNeeded */
                litType = IntegerType;
                litValue.i = 1;
            } else if (l3var1z == MINUSOP) {
                if (litType == IntegerType)
                    litValue.i = -litValue.i;
                else
                    litValue.r = -litValue.r;
            }
        } else {
L99:        litType = NULL;
            error(errNoConstant);
        }
    } else
        switch (SY) {
        case IDENT: {
            if ((hashTravPtr == NULL) or
                (hashTravPtr->cl != ENUMID))
                goto L99;
            litType = hashTravPtr->typ;
            litValue.ii = hashTravPtr->value();
        } break;
        case INTCONST:
            litType = IntegerType;
            break;
        case REALCONST:
            litType = RealType;
            break;
        case CHARCONST:
            litType = CharType;
            break;
        case LTSY:
            litType = makeStringType();
            break;
        case GTSY: {
            litType = pointerType;
            litValue.ii = 074000;
            } break;
        default: break;
        } /* case */
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x170, %rsp            # imm = 0x170
movq %rsi, %rbx
movq %rdi, %r14
movq 0x5c8b8(%rip), %rax     # 0x64a28
movq %rax, (%rsi)
movl 0x5c6a3(%rip), %eax     # 0x6481c
cmpl $0x6, %eax
jl 0x8204
testb %dl, %dl
je 0x824f
movl 0x5c687(%rip), %r15d    # 0x64818
leal -0x5(%r15), %eax
cmpl $0x1, %eax
ja 0x824f
movq %rsp, %rdi
callq 0x6f40
movq %r14, %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x8157
movq (%r14), %rax
movq 0x5c82b(%rip), %rcx     # 0x649e8
cmpq %rcx, %rax
je 0x82af
cmpq 0x5c823(%rip), %rax     # 0x649f0
je 0x82af
movl $0x3e, %edi
callq 0x58ff
movq 0x5c804(%rip), %rax     # 0x649e8
movq %rax, (%r14)
movzwl 0x6(%rbx), %eax
shlq $0x30, %rax
movabsq $0xd00000000001, %rcx   # imm = 0xD00000000001
orq %rax, %rcx
movq %rcx, (%rbx)
jmp 0x828f
jae 0x828f
movl %eax, %eax
leaq 0x14375(%rip), %rcx     # 0x1c588
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x5c77d(%rip), %rax     # 0x649a0
testq %rax, %rax
je 0x824f
cmpl $0x1, 0x20(%rax)
jne 0x824f
movq 0x18(%rax), %rax
movq %rax, (%r14)
movq 0x5c764(%rip), %rax     # 0x649a0
cmpl $0x0, 0x20(%rax)
je 0x82fb
movq 0x30(%rax), %rax
movq %rax, (%rbx)
jmp 0x828f
movq $0x0, (%r14)
movl $0x6, %edi
addq $0x170, %rsp            # imm = 0x170
popq %rbx
popq %r14
popq %r15
jmp 0x58ff
callq 0x577a
jmp 0x828c
movq 0x5c776(%rip), %rax     # 0x649f0
jmp 0x828c
movq 0x5c775(%rip), %rax     # 0x649f8
jmp 0x828c
movq 0x5c75c(%rip), %rax     # 0x649e8
movq %rax, (%r14)
addq $0x170, %rsp            # imm = 0x170
popq %rbx
popq %r14
popq %r15
retq
movq 0x5c725(%rip), %rax     # 0x649c8
movq %rax, (%r14)
movq $0x7800, (%rbx)         # imm = 0x7800
jmp 0x828f
cmpl $0x6, %r15d
jne 0x828f
movq (%rbx), %rdi
movq %rdi, %rsi
shlq $0x17, %rsi
sarq $0x17, %rsi
cmpq %rcx, %rax
je 0x82ee
cvtsi2sd %rsi, %xmm0
shrq $0x29, %rdi
andl $0x7f, %edi
addl $-0x68, %edi
callq 0x3360
xorpd 0x13dac(%rip), %xmm0    # 0x1c090
movq %rbx, %rdi
callq 0x15c84
jmp 0x828f
negq %rsi
movq %rbx, %rdi
callq 0x3c48
jmp 0x828f
leaq 0x15398(%rip), %rdi     # 0x1d69a
leaq 0x1536b(%rip), %rsi     # 0x1d674
leaq 0x15397(%rip), %rcx     # 0x1d6a7
movl $0x2d9, %edx            # imm = 0x2D9
callq 0x3170