// File: /workspace/github_c_makefile_star2_O0/ryvnf[P]czc/eval.c
// Function: eval_size
size_t eval_size(struct ast *ast)
{
    switch (ast->tag) {
        case COMMA_EXPR:
            eval_size(ast_ast(ast, 0));
            return eval_size(ast_ast(ast, 1));

        case OR_EXPR:
            return eval_size(ast_ast(ast, 0)) | eval_size(ast_ast(ast, 1));

        case XOR_EXPR:
            return eval_size(ast_ast(ast, 0)) ^ eval_size(ast_ast(ast, 1));

        case AND_EXPR:
            return eval_size(ast_ast(ast, 0)) & eval_size(ast_ast(ast, 1));

        case SHL_EXPR:
            return eval_size(ast_ast(ast, 0)) << eval_size(ast_ast(ast, 1));

        case SHR_EXPR:
            return eval_size(ast_ast(ast, 0)) >> eval_size(ast_ast(ast, 1));

        case ADD_EXPR:
            return eval_size(ast_ast(ast, 0)) + eval_size(ast_ast(ast, 1));

        case SUB_EXPR:
            return eval_size(ast_ast(ast, 0)) - eval_size(ast_ast(ast, 1));

        case MUL_EXPR:
            return eval_size(ast_ast(ast, 0)) * eval_size(ast_ast(ast, 1));

        case DIV_EXPR:
            return eval_size(ast_ast(ast, 0)) / eval_size(ast_ast(ast, 1));

        case REM_EXPR:
            return eval_size(ast_ast(ast, 0)) % eval_size(ast_ast(ast, 1));

        case COMPL_EXPR:
            return ~eval_size(ast_ast(ast, 0));

        case UPLUS_EXPR:
            return +eval_size(ast_ast(ast, 0));

        case NEG_EXPR:
            return -eval_size(ast_ast(ast, 0));

        case SIZEOF_EXPR:
            return sizeof_type(ast->loc, eval_type(NULL, ast_ast(ast, 0)));

        case INT_CONST:
            return ast_i(ast);

        case NAME:
            return eval_name_size(ast);

        case TRUE_TOK:
        case FALSE_TOK:
            fatal(ast->loc, "boolean constants are not implemented in this "
                    "context (yet)");
            unreachable();
            return 0;

        case NULL_TOK:
            fatal(ast->loc, "pointers are not allowed in constant context (yet)");
            unreachable();
            return 0;
    }

    const char *op_name = op_to_name(ast->tag);
    if (op_name) {
        fatal(ast->loc, "%s operator is allowed in this context (yet)",
                op_name);
    }

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x1c(%rbp)
subl $0x124, %eax            # imm = 0x124
je 0x8e4c
jmp 0x8985
movl -0x1c(%rbp), %eax
addl $0xfffffedb, %eax       # imm = 0xFFFFFEDB
subl $0x2, %eax
jb 0x8e36
jmp 0x8998
movl -0x1c(%rbp), %eax
subl $0x1000, %eax           # imm = 0x1000
je 0x8e27
jmp 0x89a8
movl -0x1c(%rbp), %eax
subl $0x2000, %eax           # imm = 0x2000
je 0x8e18
jmp 0x89b8
movl -0x1c(%rbp), %eax
subl $0x4200, %eax           # imm = 0x4200
je 0x8aab
jmp 0x89c8
movl -0x1c(%rbp), %eax
subl $0x4270, %eax           # imm = 0x4270
je 0x8adf
jmp 0x89d8
movl -0x1c(%rbp), %eax
subl $0x4280, %eax           # imm = 0x4280
je 0x8b21
jmp 0x89e8
movl -0x1c(%rbp), %eax
subl $0x4290, %eax           # imm = 0x4290
je 0x8b63
jmp 0x89f8
movl -0x1c(%rbp), %eax
subl $0x42a0, %eax           # imm = 0x42A0
je 0x8ba5
jmp 0x8a08
movl -0x1c(%rbp), %eax
subl $0x42a1, %eax           # imm = 0x42A1
je 0x8be7
jmp 0x8a18
movl -0x1c(%rbp), %eax
subl $0x42b0, %eax           # imm = 0x42B0
je 0x8c29
jmp 0x8a28
movl -0x1c(%rbp), %eax
subl $0x42b1, %eax           # imm = 0x42B1
je 0x8c6b
jmp 0x8a38
movl -0x1c(%rbp), %eax
subl $0x42c0, %eax           # imm = 0x42C0
je 0x8cad
jmp 0x8a48
movl -0x1c(%rbp), %eax
subl $0x42c1, %eax           # imm = 0x42C1
je 0x8cf0
jmp 0x8a58
movl -0x1c(%rbp), %eax
subl $0x42c2, %eax           # imm = 0x42C2
je 0x8d34
jmp 0x8a68
movl -0x1c(%rbp), %eax
subl $0x42d1, %eax           # imm = 0x42D1
je 0x8d78
jmp 0x8a78
movl -0x1c(%rbp), %eax
subl $0x42d2, %eax           # imm = 0x42D2
je 0x8d9a
jmp 0x8a88
movl -0x1c(%rbp), %eax
subl $0x42d3, %eax           # imm = 0x42D3
je 0x8db8
jmp 0x8a98
movl -0x1c(%rbp), %eax
subl $0x42d7, %eax           # imm = 0x42D7
je 0x8dde
jmp 0x8e62
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, %rcx
movq -0x28(%rbp), %rax
orq %rcx, %rax
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, %rcx
movq -0x30(%rbp), %rax
xorq %rcx, %rax
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, %rcx
movq -0x38(%rbp), %rax
andq %rcx, %rax
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, %rcx
movq -0x40(%rbp), %rax
shlq %cl, %rax
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, %rcx
movq -0x48(%rbp), %rax
shrq %cl, %rax
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, %rcx
movq -0x50(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x58(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, %rcx
movq -0x58(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, %rcx
movq -0x60(%rbp), %rax
imulq %rcx, %rax
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x68(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, %rcx
movq -0x68(%rbp), %rax
xorl %edx, %edx
divq %rcx
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x70(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, %rcx
movq -0x70(%rbp), %rax
xorl %edx, %edx
divq %rcx
movq %rdx, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
xorq $-0x1, %rax
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rdi
callq 0x8960
movq %rax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x78(%rbp)
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rsi
xorl %eax, %eax
movl %eax, %edi
callq 0x7130
movq -0x78(%rbp), %rdi
movq %rax, %rsi
callq 0x86e0
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
callq 0x2920
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rdi
callq 0x88d0
movq %rax, -0x8(%rbp)
jmp 0x8e9a
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xa4f3(%rip), %rsi      # 0x13338
movb $0x0, %al
callq 0x6610
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xa519(%rip), %rsi      # 0x13374
movb $0x0, %al
callq 0x6610
movq -0x10(%rbp), %rax
movl (%rax), %edi
callq 0x6740
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x8e92
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x18(%rbp), %rdx
leaq 0xa51c(%rip), %rsi      # 0x133a7
movb $0x0, %al
callq 0x6610
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x80, %rsp
popq %rbp
retq
nopw (%rax,%rax)