// File: /workspace/github_c_makefile_star2_O0/lucvoo[P]sparse-dev/evaluate.c
// Function: evaluate_preop
static struct symbol *evaluate_preop(struct expression *expr)
{
	struct symbol *ctype = expr->unop->ctype;

	switch (expr->op) {
	case '(':
		*expr = *expr->unop;
		return ctype;

	case '+':
	case '-':
	case '~':
		return evaluate_sign(expr);

	case '*':
		return evaluate_dereference(expr);

	case '&':
		return evaluate_addressof(expr);

	case SPECIAL_INCREMENT:
	case SPECIAL_DECREMENT:
		/*
		 * From a type evaluation standpoint the preops are
		 * the same as the postops
		 */
		return evaluate_postop(expr);

	case '!':
		ctype = degenerate(expr->unop);
		expr->flags = expr->unop->flags & ~CEF_CONST_MASK;
		/*
		 * A logical negation never yields an address constant
		 * [6.6(9)].
		 */
		expr->flags &= ~CEF_ADDR;

		if (is_safe_type(ctype))
			warning(expr->pos, "testing a 'safe expression'");
		if (is_float_type(ctype)) {
			struct expression *arg = expr->unop;
			expr->type = EXPR_COMPARE;
			expr->op = SPECIAL_EQUAL;
			expr->left = arg;
			expr->right = alloc_expression(expr->pos, EXPR_FVALUE);
			expr->right->ctype = ctype;
			expr->right->fvalue = 0;
		} else if (is_fouled_type(ctype)) {
			warning(expr->pos, "%s degrades to integer",
				show_typename(ctype->ctype.base_type));
		}
		/* the result is int [6.5.3.3(5)]*/
		ctype = &int_ctype;
		break;

	default:
		break;
	}
	expr->ctype = ctype;
	return ctype;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x24(%rbp)
subl $0x21, %eax
je 0x4d577
jmp 0x4d4b1
movl -0x24(%rbp), %eax
subl $0x26, %eax
je 0x4d553
jmp 0x4d4bf
movl -0x24(%rbp), %eax
subl $0x28, %eax
je 0x4d50c
jmp 0x4d4c9
movl -0x24(%rbp), %eax
subl $0x2a, %eax
je 0x4d541
jmp 0x4d4d3
movl -0x24(%rbp), %eax
subl $0x2b, %eax
je 0x4d52f
jmp 0x4d4dd
movl -0x24(%rbp), %eax
subl $0x2d, %eax
je 0x4d52f
jmp 0x4d4e7
movl -0x24(%rbp), %eax
subl $0x7e, %eax
je 0x4d52f
jmp 0x4d4f1
movl -0x24(%rbp), %eax
subl $0x101, %eax            # imm = 0x101
je 0x4d565
jmp 0x4d4fd
movl -0x24(%rbp), %eax
subl $0x103, %eax            # imm = 0x103
je 0x4d565
jmp 0x4d6c7
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rsi
movl $0x40, %edx
callq 0x111d0
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x4d6dd
movq -0x10(%rbp), %rdi
callq 0x52f80
movq %rax, -0x8(%rbp)
jmp 0x4d6dd
movq -0x10(%rbp), %rdi
callq 0x530d0
movq %rax, -0x8(%rbp)
jmp 0x4d6dd
movq -0x10(%rbp), %rdi
callq 0x532e0
movq %rax, -0x8(%rbp)
jmp 0x4d6dd
movq -0x10(%rbp), %rdi
callq 0x4d6f0
movq %rax, -0x8(%rbp)
jmp 0x4d6dd
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x4c1c0
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movl (%rax), %edx
shrl $0x8, %edx
andl $0xff, %edx
andl $-0xc, %edx
movq -0x10(%rbp), %rax
movl (%rax), %ecx
andl $0xff, %edx
shll $0x8, %edx
andl $0xffff00ff, %ecx       # imm = 0xFFFF00FF
orl %edx, %ecx
movl %ecx, (%rax)
movq -0x10(%rbp), %rax
movl (%rax), %edx
shrl $0x8, %edx
andl $0xff, %edx
andl $-0x41, %edx
movl (%rax), %ecx
andl $0xff, %edx
shll $0x8, %edx
andl $0xffff00ff, %ecx       # imm = 0xFFFF00FF
orl %edx, %ecx
movl %ecx, (%rax)
movq -0x18(%rbp), %rax
movq 0x68(%rax), %rax
andq $0x800000, %rax         # imm = 0x800000
cmpq $0x0, %rax
je 0x4d608
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1e850(%rip), %rsi     # 0x6be51
movb $0x0, %al
callq 0x16d80
movq -0x18(%rbp), %rdi
callq 0x533f0
cmpl $0x0, %eax
je 0x4d67c
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movb $0x16, (%rax)
movq -0x10(%rbp), %rax
movl $0x10a, 0x4(%rax)       # imm = 0x10A
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movl $0x1c, %esi
callq 0x50ab0
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rcx
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq %rcx, 0x10(%rax)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
fldz
fstpt 0x20(%rax)
jmp 0x4d6ba
movq -0x18(%rbp), %rdi
callq 0x51c20
cmpl $0xe, %eax
jne 0x4d6b8
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq 0x60(%rax), %rdi
callq 0x33340
movq %rax, %rdx
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1e502(%rip), %rsi     # 0x6bbb3
movb $0x0, %al
callq 0x16d80
jmp 0x4d6ba
leaq 0x44457(%rip), %rax     # 0x91b18
movq %rax, -0x18(%rbp)
jmp 0x4d6c9
jmp 0x4d6c9
movq -0x18(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopw (%rax,%rax)