// File: /workspace/github_c_makefile_star2_O2/ryvnf[P]czc/eval.c
// Function: eval_expr_
static struct expr eval_expr_(struct type *t, struct ast *ast, bool global_init)
{
    switch (ast->tag) {
        case COMMA_EXPR:
            return eval_comma_expr(t, ast);

        case COND_EXPR:
            return eval_cond_expr(t, ast);

        case ASGN_EXPR:
            return eval_asgn_expr(ast);
        case ADD_ASGN_EXPR:
            return eval_binop_expr(ast, addasgn_binop_rope);
        case SUB_ASGN_EXPR:
            return eval_binop_expr(ast, subasgn_binop_rope);
        case MUL_ASGN_EXPR:
            return eval_binop_expr(ast, mulasgn_binop_rope);
        case DIV_ASGN_EXPR:
            return eval_binop_expr(ast, divasgn_binop_rope);
        case REM_ASGN_EXPR:
            return eval_binop_expr(ast, remasgn_binop_rope);
        case OR_ASGN_EXPR:
            return eval_binop_expr(ast, orasgn_binop_rope);
        case XOR_ASGN_EXPR:
            return eval_binop_expr(ast, xorasgn_binop_rope);
        case AND_ASGN_EXPR:
            return eval_binop_expr(ast, andasgn_binop_rope);
        case SHL_ASGN_EXPR:
            return eval_binop_expr(ast, shlasgn_binop_rope);
        case SHR_ASGN_EXPR:
            return eval_binop_expr(ast, shrasgn_binop_rope);

        case LOR_EXPR:
            return eval_binop_expr(ast, lor_binop_rope);
        case LAND_EXPR:
            return eval_binop_expr(ast, land_binop_rope);

        case EQ_EXPR:
            return eval_binop_expr(ast, eq_binop_rope);
        case NE_EXPR:
            return eval_binop_expr(ast, ne_binop_rope);

        case LT_EXPR:
            return eval_binop_expr(ast, lt_binop_rope);
        case GT_EXPR:
            return eval_binop_expr(ast, gt_binop_rope);
        case LE_EXPR:
            return eval_binop_expr(ast, le_binop_rope);
        case GE_EXPR:
            return eval_binop_expr(ast, ge_binop_rope);

        case OR_EXPR:
            return eval_binop_expr(ast, or_binop_rope);
        case XOR_EXPR:
            return eval_binop_expr(ast, xor_binop_rope);
        case AND_EXPR:
            return eval_binop_expr(ast, and_binop_rope);
        case SHL_EXPR:
            return eval_binop_expr(ast, shl_binop_rope);
        case SHR_EXPR:
            return eval_binop_expr(ast, shr_binop_rope);

        case ADD_EXPR:
            return eval_binop_expr(ast, add_binop_rope);

        case SUB_EXPR:
            return eval_binop_expr(ast, sub_binop_rope);

        case MUL_EXPR:
            return eval_binop_expr(ast, mul_binop_rope);
        case DIV_EXPR:
            return eval_binop_expr(ast, div_binop_rope);
        case REM_EXPR:
            return eval_binop_expr(ast, rem_binop_rope);

        case NOT_EXPR:
            return eval_preop_expr(ast, not_rope);

        case COMPL_EXPR:
            return eval_preop_expr(ast, compl_rope);

        case UPLUS_EXPR:
            return eval_preop_expr(ast, plus_rope);
        case NEG_EXPR:
            return eval_preop_expr(ast, minus_rope);

        case REF_EXPR:
            return eval_preop_expr(ast, amp_rope);

        case PRE_INC_EXPR:
            return eval_preop_expr(ast, inc_rope);
        case PRE_DEC_EXPR:
            return eval_preop_expr(ast, dec_rope);

        case SIZEOF_EXPR:
            return eval_sizeof_expr(ast);

        case CAST_EXPR:
            return eval_cast_expr(ast);

        case DEREF_EXPR:
            return eval_preop_expr(ast, star_rope);

        case SUBSCR_EXPR:
            return eval_subscr_expr(ast);

        case CALL_EXPR:
            return eval_call_expr(ast);

        case POST_INC_EXPR:
            return eval_postop_expr(ast, inc_rope);
        case POST_DEC_EXPR:
            return eval_postop_expr(ast, dec_rope);

        case MEMBER_EXPR:
            return eval_member_expr(ast);

        case INT_CONST:
            return eval_int_const_expr(ast);

        case FLOAT_CONST:
            return eval_float_const_expr(ast);

        case STR_LIT:
            return eval_str_lit_expr(ast);

        case TRUE_CONST:
            return (struct expr) { .rope = one_rope, .type = eval_type(NULL, ast) };

        case FALSE_CONST:
            return (struct expr) { .rope = zero_rope, .type = eval_type(NULL, ast) };

        case NULL_CONST:
            return (struct expr) { .rope = zero_rope, .type = eval_type(NULL, ast) };

        case NAME:
            return eval_name_expr(t, ast);

        case DECL:
            return eval_decl_expr(ast);

        case INIT_EXPR:
            return eval_init_expr(t, ast, global_init);
    }
    return (struct expr){ 0 };
}

// Assembly:
pushq %rax
movl %edx, %ecx
movl (%rsi), %r8d
xorl %eax, %eax
leal -0x42d0(%r8), %edx
cmpl $0x26, %edx
jbe 0x71b8
leal -0x4220(%r8), %ecx
cmpl $0x10, %ecx
jbe 0x71d7
leal -0x4260(%r8), %ecx
cmpl $0x3, %ecx
jbe 0x71f6
testl %r8d, %r8d
je 0x7212
cmpl $0x1, %r8d
je 0x7212
cmpl $0x2, %r8d
je 0x73f8
cmpl $0x1000, %r8d           # imm = 0x1000
je 0x73df
cmpl $0x2000, %r8d           # imm = 0x2000
je 0x7453
cmpl $0x3000, %r8d           # imm = 0x3000
je 0x741a
cmpl $0x4000, %r8d           # imm = 0x4000
je 0x73d5
cmpl $0x5000, %r8d           # imm = 0x5000
je 0x7364
cmpl $0x4210, %r8d           # imm = 0x4210
je 0x73b9
cmpl $0x4240, %r8d           # imm = 0x4240
je 0x7371
cmpl $0x4250, %r8d           # imm = 0x4250
je 0x7408
cmpl $0x4251, %r8d           # imm = 0x4251
je 0x7395
cmpl $0x4270, %r8d           # imm = 0x4270
je 0x737d
cmpl $0x4280, %r8d           # imm = 0x4280
je 0x7424
cmpl $0x4290, %r8d           # imm = 0x4290
je 0x73a1
cmpl $0x42a0, %r8d           # imm = 0x42A0
je 0x742d
cmpl $0x42a1, %r8d           # imm = 0x42A1
je 0x73cc
cmpl $0x42b0, %r8d           # imm = 0x42B0
je 0x7411
cmpl $0x42b1, %r8d           # imm = 0x42B1
je 0x73e6
cmpl $0x42c0, %r8d           # imm = 0x42C0
je 0x7389
cmpl $0x42c1, %r8d           # imm = 0x42C1
je 0x73c3
cmpl $0x42c2, %r8d           # imm = 0x42C2
je 0x73ad
movl $0x0, %edx
cmpl $0x4200, %r8d           # imm = 0x4200
jne 0x7451
callq 0x6519
jmp 0x7451
leaq 0x49cd(%rip), %r8       # 0xbb8c
movslq (%r8,%rdx,4), %r9
addq %r8, %r9
xorl %edx, %edx
jmpq *%r9
leaq 0xb9ae(%rip), %rax      # 0x12b80
jmp 0x72d0
leaq 0x495a(%rip), %rdx      # 0xbb38
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
xorl %edx, %edx
jmpq *%rcx
movq %rsi, %rdi
callq 0x638a
jmp 0x7451
leaq 0x497f(%rip), %rax      # 0xbb7c
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
leaq 0xb7b3(%rip), %rax      # 0x129c0
jmp 0x7446
xorl %edi, %edi
callq 0x5137
leaq 0xb540(%rip), %rdx      # 0x12760
jmp 0x7451
movzbl %cl, %edx
callq 0x6eca
jmp 0x7451
leaq 0xba07(%rip), %rax      # 0x12c40
jmp 0x7291
movq %rsi, %rdi
callq 0x6926
jmp 0x745b
leaq 0xb9d1(%rip), %rax      # 0x12c20
jmp 0x72d0
movq %rsi, %rdi
callq 0x6b32
jmp 0x7451
movq %rsi, %rdi
callq 0x6bd2
jmp 0x7451
movq %rsi, %rdi
callq 0x6953
jmp 0x7451
leaq 0xb921(%rip), %rax      # 0x12ba0
jmp 0x72d0
leaq 0xb958(%rip), %rax      # 0x12be0
jmp 0x72d0
leaq 0xb98f(%rip), %rax      # 0x12c20
movq %rsi, %rdi
movq %rax, %rsi
callq 0x67ae
jmp 0x7451
leaq 0xb918(%rip), %rax      # 0x12bc0
jmp 0x72d0
leaq 0xb94f(%rip), %rax      # 0x12c00
jmp 0x72d0
movq %rsi, %rdi
callq 0x69e9
jmp 0x7451
leaq 0xb979(%rip), %rax      # 0x12c40
jmp 0x72d0
leaq 0xb390(%rip), %rax      # 0x12660
movq %rsi, %rdi
movq %rax, %rsi
callq 0x6740
jmp 0x7451
leaq 0xb639(%rip), %rax      # 0x12920
jmp 0x7446
leaq 0xb66d(%rip), %rax      # 0x12960
jmp 0x7446
leaq 0xb521(%rip), %rax      # 0x12820
jmp 0x7446
leaq 0xb555(%rip), %rax      # 0x12860
jmp 0x7446
leaq 0xb5c9(%rip), %rax      # 0x128e0
jmp 0x7446
leaq 0xb59d(%rip), %rax      # 0x128c0
jmp 0x7446
leaq 0xb551(%rip), %rax      # 0x12880
jmp 0x7446
leaq 0xb565(%rip), %rax      # 0x128a0
jmp 0x7446
leaq 0xb4f9(%rip), %rax      # 0x12840
jmp 0x7446
leaq 0xb5ad(%rip), %rax      # 0x12900
jmp 0x7446
leaq 0xb4a1(%rip), %rax      # 0x12800
jmp 0x7446
movq %rsi, %rdi
callq 0x6d55
jmp 0x7451
leaq 0xb5c8(%rip), %rax      # 0x12940
jmp 0x7446
leaq 0xb6bc(%rip), %rax      # 0x12a40
jmp 0x7446
leaq 0xb790(%rip), %rax      # 0x12b20
jmp 0x7446
leaq 0xb604(%rip), %rax      # 0x129a0
jmp 0x7446
leaq 0xb6d8(%rip), %rax      # 0x12a80
jmp 0x7446
leaq 0xb7ac(%rip), %rax      # 0x12b60
jmp 0x7446
callq 0x681c
jmp 0x7451
leaq 0xb776(%rip), %rax      # 0x12b40
jmp 0x7446
leaq 0xb6ed(%rip), %rax      # 0x12ac0
jmp 0x7446
movq %rsi, %rdi
callq 0x6ea0
jmp 0x7451
callq 0x6c7d
jmp 0x7451
leaq 0xb713(%rip), %rax      # 0x12b00
jmp 0x7446
leaq 0xb60a(%rip), %rax      # 0x12a00
jmp 0x7446
xorl %edi, %edi
callq 0x5137
leaq 0xb33a(%rip), %rdx      # 0x12740
jmp 0x7451
leaq 0xb571(%rip), %rax      # 0x12980
jmp 0x7446
leaq 0xb6c8(%rip), %rax      # 0x12ae0
jmp 0x7446
movq %rsi, %rdi
callq 0x6d1d
jmp 0x7451
leaq 0xb635(%rip), %rax      # 0x12a60
jmp 0x7446
leaq 0xb66c(%rip), %rax      # 0x12aa0
jmp 0x7446
leaq 0xb5e3(%rip), %rax      # 0x12a20
jmp 0x7446
leaq 0xb59a(%rip), %rax      # 0x129e0
movq %rsi, %rdi
movq %rax, %rsi
callq 0x6629
popq %rcx
retq
movq %rsi, %rdi
callq 0x6cfa
leaq 0xb8f6(%rip), %rax      # 0x12d58
jmp 0x7451