// File: /workspace/github_c_makefile_star2_O3/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 (%rsi), %r8d
xorl %eax, %eax
cmpl $0x426f, %r8d           # imm = 0x426F
jg 0x7a51
cmpl $0x421f, %r8d           # imm = 0x421F
jle 0x7add
cmpl $0x424f, %r8d           # imm = 0x424F
jg 0x7b2d
leal -0x4220(%r8), %ecx
cmpl $0x10, %ecx
ja 0x7d64
leaq 0x60ff(%rip), %rdx      # 0xdb38
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
xorl %edx, %edx
jmpq *%rcx
movq %rsi, %rdi
callq 0x6bb0
jmp 0x7eb6
cmpl $0x42c1, %r8d           # imm = 0x42C1
jle 0x7a8b
movl %edx, %ecx
leal -0x42d0(%r8), %edx
cmpl $0x26, %edx
ja 0x7c95
leaq 0x6119(%rip), %r8       # 0xdb8c
movslq (%r8,%rdx,4), %r9
addq %r8, %r9
xorl %edx, %edx
jmpq *%r9
leaq 0xc0fa(%rip), %rax      # 0x13b80
jmp 0x7e1d
cmpl $0x42a0, %r8d           # imm = 0x42A0
jle 0x7b59
cmpl $0x42b0, %r8d           # imm = 0x42B0
jle 0x7c18
cmpl $0x42b1, %r8d           # imm = 0x42B1
je 0x7d21
cmpl $0x42c0, %r8d           # imm = 0x42C0
je 0x7d15
movl $0x0, %edx
cmpl $0x42c1, %r8d           # imm = 0x42C1
jne 0x7eb6
leaq 0xc068(%rip), %rax      # 0x13b40
jmp 0x7eab
cmpl $0x1fff, %r8d           # imm = 0x1FFF
jle 0x7b91
cmpl $0x3fff, %r8d           # imm = 0x3FFF
jle 0x7c69
cmpl $0x4000, %r8d           # imm = 0x4000
je 0x7d57
cmpl $0x4200, %r8d           # imm = 0x4200
je 0x7d4d
movl $0x0, %edx
cmpl $0x4210, %r8d           # imm = 0x4210
jne 0x7eb6
callq 0x7103
jmp 0x7eb6
leal -0x4260(%r8), %ecx
cmpl $0x3, %ecx
ja 0x7bc2
leaq 0x6038(%rip), %rax      # 0xdb7c
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
leaq 0xbe6c(%rip), %rax      # 0x139c0
jmp 0x7eab
cmpl $0x428f, %r8d           # imm = 0x428F
jg 0x7bed
cmpl $0x4270, %r8d           # imm = 0x4270
je 0x7cf1
movl $0x0, %edx
cmpl $0x4280, %r8d           # imm = 0x4280
jne 0x7eb6
leaq 0xbed4(%rip), %rax      # 0x13a60
jmp 0x7eab
cmpl $0x1, %r8d
jg 0x7c43
testl %r8d, %r8d
je 0x7baf
movl $0x0, %edx
cmpl $0x1, %r8d
jne 0x7eb6
xorl %edi, %edi
callq 0x578e
leaq 0xbba3(%rip), %rdx      # 0x13760
jmp 0x7eb6
cmpl $0x4250, %r8d           # imm = 0x4250
je 0x7ccd
movl $0x0, %edx
cmpl $0x4251, %r8d           # imm = 0x4251
jne 0x7eb6
leaq 0xbdb8(%rip), %rax      # 0x139a0
jmp 0x7eab
cmpl $0x4290, %r8d           # imm = 0x4290
je 0x7cfd
movl $0x0, %edx
cmpl $0x42a0, %r8d           # imm = 0x42A0
jne 0x7eb6
leaq 0xbe8d(%rip), %rax      # 0x13aa0
jmp 0x7eab
cmpl $0x42a1, %r8d           # imm = 0x42A1
je 0x7d09
movl $0x0, %edx
cmpl $0x42b0, %r8d           # imm = 0x42B0
jne 0x7eb6
leaq 0xbea2(%rip), %rax      # 0x13ae0
jmp 0x7eab
cmpl $0x2, %r8d
je 0x7d2d
movl $0x0, %edx
cmpl $0x1000, %r8d           # imm = 0x1000
jne 0x7eb6
callq 0x761c
jmp 0x7eb6
cmpl $0x2000, %r8d           # imm = 0x2000
je 0x7d40
movl $0x0, %edx
cmpl $0x3000, %r8d           # imm = 0x3000
jne 0x7eb6
movq %rsi, %rdi
callq 0x76be
jmp 0x7eb6
cmpl $0x42c2, %r8d           # imm = 0x42C2
je 0x7ea4
movl $0x0, %edx
cmpl $0x5000, %r8d           # imm = 0x5000
jne 0x7eb6
movq %rsi, %rdi
callq 0x76f6
jmp 0x7eb6
leaq 0xbd38(%rip), %rax      # 0x13a00
jmp 0x7eab
leaq 0xbcac(%rip), %rax      # 0x13980
jmp 0x7eab
leaq 0xbd40(%rip), %rax      # 0x13a20
jmp 0x7eab
leaq 0xbcf4(%rip), %rax      # 0x139e0
jmp 0x7eab
leaq 0xbd48(%rip), %rax      # 0x13a40
jmp 0x7eab
leaq 0xbd7c(%rip), %rax      # 0x13a80
jmp 0x7eab
leaq 0xbdb0(%rip), %rax      # 0x13ac0
jmp 0x7eab
leaq 0xbe04(%rip), %rax      # 0x13b20
jmp 0x7eab
leaq 0xbdd8(%rip), %rax      # 0x13b00
jmp 0x7eab
xorl %edi, %edi
callq 0x578e
leaq 0xba05(%rip), %rdx      # 0x13740
jmp 0x7eb6
movq %rsi, %rdi
callq 0x769b
jmp 0x7df3
callq 0x6d7b
jmp 0x7eb6
movq %rsi, %rdi
callq 0x7846
jmp 0x7eb6
movl $0x0, %edx
cmpl $0x4240, %r8d           # imm = 0x4240
jne 0x7eb6
leaq 0xbbc3(%rip), %rax      # 0x13940
jmp 0x7eab
movq %rsi, %rdi
callq 0x7557
jmp 0x7eb6
leaq 0xbe8a(%rip), %rax      # 0x13c20
jmp 0x7e1d
leaq 0xbe7e(%rip), %rax      # 0x13c20
jmp 0x7e06
movq %rsi, %rdi
callq 0x749b
jmp 0x7eb6
leaq 0xbe48(%rip), %rax      # 0x13c00
jmp 0x7e1d
leaq 0xbe1f(%rip), %rax      # 0x13be0
jmp 0x7e1d
leaq 0xbdf6(%rip), %rax      # 0x13bc0
jmp 0x7e1d
movq %rsi, %rdi
callq 0x7272
jmp 0x7eb6
leaq 0xb880(%rip), %rax      # 0x13660
jmp 0x7e1d
leaq 0xbdb7(%rip), %rax      # 0x13ba0
jmp 0x7e1d
movq %rsi, %rdi
callq 0x7243
leaq 0xbf5e(%rip), %rax      # 0x13d58
jmp 0x7eb6
leaq 0xbe3a(%rip), %rax      # 0x13c40
movq %rsi, %rdi
movq %rax, %rsi
callq 0x707d
jmp 0x7eb6
leaq 0xbe23(%rip), %rax      # 0x13c40
movq %rsi, %rdi
movq %rax, %rsi
callq 0x6ff7
jmp 0x7eb6
movq %rsi, %rdi
callq 0x730c
jmp 0x7eb6
movzbl %cl, %edx
callq 0x7870
jmp 0x7eb6
leaq 0xba98(%rip), %rax      # 0x138e0
jmp 0x7eab
leaq 0xbaaf(%rip), %rax      # 0x13900
jmp 0x7eab
leaq 0xba66(%rip), %rax      # 0x138c0
jmp 0x7eab
leaq 0xb99d(%rip), %rax      # 0x13800
jmp 0x7eab
leaq 0xb9d4(%rip), %rax      # 0x13840
jmp 0x7eab
leaq 0xb9eb(%rip), %rax      # 0x13860
jmp 0x7eab
leaq 0xba02(%rip), %rax      # 0x13880
jmp 0x7eab
leaq 0xb999(%rip), %rax      # 0x13820
jmp 0x7eab
leaq 0xbad0(%rip), %rax      # 0x13960
jmp 0x7eab
leaq 0xba87(%rip), %rax      # 0x13920
jmp 0x7eab
leaq 0xb9fe(%rip), %rax      # 0x138a0
jmp 0x7eab
leaq 0xbcb5(%rip), %rax      # 0x13b60
movq %rsi, %rdi
movq %rax, %rsi
callq 0x6ebc
popq %rcx
retq