// File: /workspace/github_c_makefile_star2_O0/lucvoo[P]sparse-dev/expression.c
// Function: get_number_value
static void get_number_value(struct expression *expr, struct token *token)
{
	const char *str = token->number;
	unsigned long long value;
	char *end;
	int size = 0, want_unsigned = 0;
	int overflow = 0, do_warn = 0;
	int try_unsigned = 1;
	int bits;

	errno = 0;
	value = parse_num(str, &end);
	if (end == str)
		goto Float;
	if (value == ULLONG_MAX && errno == ERANGE)
		overflow = 1;
	while (1) {
		char c = *end++;
		if (!c) {
			break;
		} else if (c == 'u' || c == 'U') {
			if (want_unsigned)
				goto Enoint;
			want_unsigned = 1;
		} else if (c == 'l' || c == 'L') {
			if (size)
				goto Enoint;
			size = 1;
			if (*end == c) {
				size = 2;
				end++;
			}
		} else
			goto Float;
	}
	if (overflow)
		goto Eoverflow;
	/* OK, it's a valid integer */
	/* decimals can be unsigned only if directly specified as such */
	if (str[0] != '0' && !want_unsigned)
		try_unsigned = 0;
	if (!size) {
		bits = bits_in_int - 1;
		if (!(value & (~1ULL << bits))) {
			if (!(value & (1ULL << bits))) {
				goto got_it;
			} else if (try_unsigned) {
				want_unsigned = 1;
				goto got_it;
			}
		}
		size = 1;
		do_warn = 1;
	}
	if (size < 2) {
		bits = bits_in_long - 1;
		if (!(value & (~1ULL << bits))) {
			if (!(value & (1ULL << bits))) {
				goto got_it;
			} else if (try_unsigned) {
				want_unsigned = 1;
				goto got_it;
			}
			do_warn |= 2;
		}
		size = 2;
		do_warn |= 1;
	}
	bits = bits_in_longlong - 1;
	if (value & (~1ULL << bits))
		goto Eoverflow;
	if (!(value & (1ULL << bits)))
		goto got_it;
	if (!try_unsigned)
		warning(expr->pos, "decimal constant %s is too big for long long",
			show_token(token));
	want_unsigned = 1;
got_it:
	if (do_warn && Wconstant_suffix)
		warning(expr->pos, "constant %s is so big it is%s%s%s",
			show_token(token),
			want_unsigned ? " unsigned":"",
			size > 0 ? " long":"",
			size > 1 ? " long":"");
	if (do_warn & 2)
		warning(expr->pos,
			"decimal constant %s is between LONG_MAX and ULONG_MAX."
			" For C99 that means long long, C90 compilers are very "
			"likely to produce unsigned long (and a warning) here",
			show_token(token));
        expr->type = EXPR_VALUE;
	expr->flags = CEF_SET_INT;
        expr->ctype = ctype_integer(size, want_unsigned);
        expr->value = value;
	return;
Eoverflow:
	error_die(expr->pos, "constant %s is too big even for unsigned long long",
			show_token(token));
	return;
Float:
	expr->fvalue = string_to_ld(str, &end);
	if (str == end)
		goto Enoint;

	if (*end && end[1])
		goto Enoint;

	if (*end == 'f' || *end == 'F')
		expr->ctype = &float_ctype;
	else if (*end == 'l' || *end == 'L')
		expr->ctype = &ldouble_ctype;
	else if (!*end)
		expr->ctype = &double_ctype;
	else
		goto Enoint;

	expr->flags = CEF_SET_FLOAT;
	expr->type = EXPR_FVALUE;
	return;

Enoint:
	sparse_error(expr->pos, "constant %s is not a valid number", show_token(token));
	expr->type = EXPR_VALUE;
	expr->value = 0;
	expr->ctype = &int_ctype;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x18(%rbp)
movl $0x0, -0x2c(%rbp)
movl $0x0, -0x30(%rbp)
movl $0x0, -0x34(%rbp)
movl $0x0, -0x38(%rbp)
movl $0x1, -0x3c(%rbp)
callq 0x11070
movl $0x0, (%rax)
movq -0x18(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x57380
movq %rax, -0x20(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x18(%rbp), %rax
jne 0x561ea
jmp 0x56569
cmpq $-0x1, -0x20(%rbp)
jne 0x56202
callq 0x11070
cmpl $0x22, (%rax)
jne 0x56202
movl $0x1, -0x34(%rbp)
jmp 0x56204
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb (%rax), %al
movb %al, -0x41(%rbp)
cmpb $0x0, -0x41(%rbp)
jne 0x56220
jmp 0x5629c
movsbl -0x41(%rbp), %eax
cmpl $0x75, %eax
je 0x56232
movsbl -0x41(%rbp), %eax
cmpl $0x55, %eax
jne 0x56246
cmpl $0x0, -0x30(%rbp)
je 0x5623d
jmp 0x56643
movl $0x1, -0x30(%rbp)
jmp 0x56295
movsbl -0x41(%rbp), %eax
cmpl $0x6c, %eax
je 0x56258
movsbl -0x41(%rbp), %eax
cmpl $0x4c, %eax
jne 0x5628e
cmpl $0x0, -0x2c(%rbp)
je 0x56263
jmp 0x56643
movl $0x1, -0x2c(%rbp)
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
movsbl -0x41(%rbp), %ecx
cmpl %ecx, %eax
jne 0x5628c
movl $0x2, -0x2c(%rbp)
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x56293
jmp 0x56569
jmp 0x56295
jmp 0x56297
jmp 0x56204
cmpl $0x0, -0x34(%rbp)
je 0x562a7
jmp 0x5653f
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x30, %eax
je 0x562c0
cmpl $0x0, -0x30(%rbp)
jne 0x562c0
movl $0x0, -0x3c(%rbp)
cmpl $0x0, -0x2c(%rbp)
jne 0x56336
leaq 0x3440b(%rip), %rax     # 0x8a6d8
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movl -0x40(%rbp), %ecx
movq $-0x2, %rdx
shlq %cl, %rdx
movq %rdx, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x56328
movq -0x20(%rbp), %rax
movl -0x40(%rbp), %ecx
movl $0x1, %edx
shlq %cl, %rdx
movq %rdx, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x56312
jmp 0x5643a
cmpl $0x0, -0x3c(%rbp)
je 0x56324
movl $0x1, -0x30(%rbp)
jmp 0x5643a
jmp 0x56326
jmp 0x56328
movl $0x1, -0x2c(%rbp)
movl $0x1, -0x38(%rbp)
cmpl $0x2, -0x2c(%rbp)
jge 0x563b5
leaq 0x34399(%rip), %rax     # 0x8a6dc
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movl -0x40(%rbp), %ecx
movq $-0x2, %rdx
shlq %cl, %rdx
movq %rdx, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x563a5
movq -0x20(%rbp), %rax
movl -0x40(%rbp), %ecx
movl $0x1, %edx
shlq %cl, %rdx
movq %rdx, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x56388
jmp 0x5643a
cmpl $0x0, -0x3c(%rbp)
je 0x5639a
movl $0x1, -0x30(%rbp)
jmp 0x5643a
jmp 0x5639c
movl -0x38(%rbp), %eax
orl $0x2, %eax
movl %eax, -0x38(%rbp)
movl $0x2, -0x2c(%rbp)
movl -0x38(%rbp), %eax
orl $0x1, %eax
movl %eax, -0x38(%rbp)
leaq 0x34324(%rip), %rax     # 0x8a6e0
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movl -0x40(%rbp), %ecx
movq $-0x2, %rdx
shlq %cl, %rdx
movq %rdx, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
je 0x563e6
jmp 0x5653f
movq -0x20(%rbp), %rax
movl -0x40(%rbp), %ecx
movl $0x1, %edx
shlq %cl, %rdx
movq %rdx, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x56403
jmp 0x5643a
cmpl $0x0, -0x3c(%rbp)
jne 0x56433
movq -0x8(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rdi
callq 0x44420
movq %rax, %rdx
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x164f6(%rip), %rsi     # 0x6c922
movb $0x0, %al
callq 0x16d80
movl $0x1, -0x30(%rbp)
cmpl $0x0, -0x38(%rbp)
je 0x564be
leaq 0x36d89(%rip), %rax     # 0x8d1d0
cmpl $0x0, (%rax)
je 0x564be
movq -0x8(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x10(%rbp), %rdi
callq 0x44420
movq %rax, %rdx
movq -0x58(%rbp), %rax
movl -0x30(%rbp), %edi
leaq 0xc3bb(%rip), %rcx      # 0x62829
leaq 0x164fc(%rip), %rsi     # 0x6c971
cmpl $0x0, %edi
cmovneq %rsi, %rcx
movl -0x2c(%rbp), %edi
leaq 0xc3a3(%rip), %r8       # 0x62829
leaq 0x11f06(%rip), %rsi     # 0x68393
cmpl $0x0, %edi
cmovgq %rsi, %r8
movl -0x2c(%rbp), %edi
leaq 0xc38b(%rip), %r9       # 0x62829
leaq 0x11eee(%rip), %rsi     # 0x68393
cmpl $0x1, %edi
cmovgq %rsi, %r9
movq 0x8(%rax), %rdi
leaq 0x16498(%rip), %rsi     # 0x6c94f
movb $0x0, %al
callq 0x16d80
movl -0x38(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x564f3
movq -0x8(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rdi
callq 0x44420
movq %rax, %rdx
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1648f(%rip), %rsi     # 0x6c97b
movb $0x0, %al
callq 0x16d80
movq -0x8(%rbp), %rax
movl (%rax), %ecx
andl $0xffffff00, %ecx       # imm = 0xFFFFFF00
orl $0x1, %ecx
movl %ecx, (%rax)
movq -0x8(%rbp), %rax
movl (%rax), %ecx
andl $0xffff00ff, %ecx       # imm = 0xFFFF00FF
orl $0x3100, %ecx           # imm = 0x3100
movl %ecx, (%rax)
movl -0x2c(%rbp), %edi
movl -0x30(%rbp), %esi
callq 0x23120
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x20(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x56699
movq -0x8(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x10(%rbp), %rdi
callq 0x44420
movq %rax, %rdx
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x164ba(%rip), %rsi     # 0x6ca1c
movb $0x0, %al
callq 0x170e0
movq -0x18(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x49490
movq -0x8(%rbp), %rax
fstpt 0x20(%rax)
movq -0x18(%rbp), %rax
cmpq -0x28(%rbp), %rax
jne 0x5658c
jmp 0x56643
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
je 0x565aa
movq -0x28(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x0, %eax
je 0x565aa
jmp 0x56643
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x66, %eax
je 0x565c2
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x46, %eax
jne 0x565d3
movq -0x8(%rbp), %rax
leaq 0x3bfcb(%rip), %rcx     # 0x92598
movq %rcx, 0x10(%rax)
jmp 0x5661c
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x6c, %eax
je 0x565eb
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x4c, %eax
jne 0x565fc
movq -0x8(%rbp), %rax
leaq 0x3c162(%rip), %rcx     # 0x92758
movq %rcx, 0x10(%rax)
jmp 0x5661a
movq -0x28(%rbp), %rax
cmpb $0x0, (%rax)
jne 0x56616
movq -0x8(%rbp), %rax
leaq 0x3c068(%rip), %rcx     # 0x92678
movq %rcx, 0x10(%rax)
jmp 0x56618
jmp 0x56643
jmp 0x5661a
jmp 0x5661c
movq -0x8(%rbp), %rax
movl (%rax), %ecx
andl $0xffff00ff, %ecx       # imm = 0xFFFF00FF
orl $0x2200, %ecx           # imm = 0x2200
movl %ecx, (%rax)
movq -0x8(%rbp), %rax
movl (%rax), %ecx
andl $0xffffff00, %ecx       # imm = 0xFFFFFF00
orl $0x1c, %ecx
movl %ecx, (%rax)
jmp 0x56699
movq -0x8(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x10(%rbp), %rdi
callq 0x44420
movq %rax, %rdx
movq -0x70(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x163e9(%rip), %rsi     # 0x6ca4f
movb $0x0, %al
callq 0x16f90
movq -0x8(%rbp), %rax
movl (%rax), %ecx
andl $0xffffff00, %ecx       # imm = 0xFFFFFF00
orl $0x1, %ecx
movl %ecx, (%rax)
movq -0x8(%rbp), %rax
movq $0x0, 0x20(%rax)
movq -0x8(%rbp), %rax
leaq 0x3b483(%rip), %rcx     # 0x91b18
movq %rcx, 0x10(%rax)
addq $0x70, %rsp
popq %rbp
retq
nop