// File: /workspace/github_c_makefile_star2_O1/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 0x7aa4
cmpl $0x421f, %r8d           # imm = 0x421F
jle 0x7b30
cmpl $0x424f, %r8d           # imm = 0x424F
jg 0x7b80
leal -0x4220(%r8), %ecx
cmpl $0x10, %ecx
ja 0x7db7
leaq 0x60ac(%rip), %rdx      # 0xdb38
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
xorl %edx, %edx
jmpq *%rcx
movq %rsi, %rdi
callq 0x6c0c
jmp 0x7f09
cmpl $0x42c1, %r8d           # imm = 0x42C1
jle 0x7ade
movl %edx, %ecx
leal -0x42d0(%r8), %edx
cmpl $0x26, %edx
ja 0x7ce8
leaq 0x60c6(%rip), %r8       # 0xdb8c
movslq (%r8,%rdx,4), %r9
addq %r8, %r9
xorl %edx, %edx
jmpq *%r9
leaq 0xc0a7(%rip), %rax      # 0x13b80
jmp 0x7e70
cmpl $0x42a0, %r8d           # imm = 0x42A0
jle 0x7bac
cmpl $0x42b0, %r8d           # imm = 0x42B0
jle 0x7c6b
cmpl $0x42b1, %r8d           # imm = 0x42B1
je 0x7d74
cmpl $0x42c0, %r8d           # imm = 0x42C0
je 0x7d68
movl $0x0, %edx
cmpl $0x42c1, %r8d           # imm = 0x42C1
jne 0x7f09
leaq 0xc015(%rip), %rax      # 0x13b40
jmp 0x7efe
cmpl $0x1fff, %r8d           # imm = 0x1FFF
jle 0x7be4
cmpl $0x3fff, %r8d           # imm = 0x3FFF
jle 0x7cbc
cmpl $0x4000, %r8d           # imm = 0x4000
je 0x7daa
cmpl $0x4200, %r8d           # imm = 0x4200
je 0x7da0
movl $0x0, %edx
cmpl $0x4210, %r8d           # imm = 0x4210
jne 0x7f09
callq 0x715f
jmp 0x7f09
leal -0x4260(%r8), %ecx
cmpl $0x3, %ecx
ja 0x7c15
leaq 0x5fe5(%rip), %rax      # 0xdb7c
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
leaq 0xbe19(%rip), %rax      # 0x139c0
jmp 0x7efe
cmpl $0x428f, %r8d           # imm = 0x428F
jg 0x7c40
cmpl $0x4270, %r8d           # imm = 0x4270
je 0x7d44
movl $0x0, %edx
cmpl $0x4280, %r8d           # imm = 0x4280
jne 0x7f09
leaq 0xbe81(%rip), %rax      # 0x13a60
jmp 0x7efe
cmpl $0x1, %r8d
jg 0x7c96
testl %r8d, %r8d
je 0x7c02
movl $0x0, %edx
cmpl $0x1, %r8d
jne 0x7f09
xorl %edi, %edi
callq 0x57c4
leaq 0xbb50(%rip), %rdx      # 0x13760
jmp 0x7f09
cmpl $0x4250, %r8d           # imm = 0x4250
je 0x7d20
movl $0x0, %edx
cmpl $0x4251, %r8d           # imm = 0x4251
jne 0x7f09
leaq 0xbd65(%rip), %rax      # 0x139a0
jmp 0x7efe
cmpl $0x4290, %r8d           # imm = 0x4290
je 0x7d50
movl $0x0, %edx
cmpl $0x42a0, %r8d           # imm = 0x42A0
jne 0x7f09
leaq 0xbe3a(%rip), %rax      # 0x13aa0
jmp 0x7efe
cmpl $0x42a1, %r8d           # imm = 0x42A1
je 0x7d5c
movl $0x0, %edx
cmpl $0x42b0, %r8d           # imm = 0x42B0
jne 0x7f09
leaq 0xbe4f(%rip), %rax      # 0x13ae0
jmp 0x7efe
cmpl $0x2, %r8d
je 0x7d80
movl $0x0, %edx
cmpl $0x1000, %r8d           # imm = 0x1000
jne 0x7f09
callq 0x7674
jmp 0x7f09
cmpl $0x2000, %r8d           # imm = 0x2000
je 0x7d93
movl $0x0, %edx
cmpl $0x3000, %r8d           # imm = 0x3000
jne 0x7f09
movq %rsi, %rdi
callq 0x7716
jmp 0x7f09
cmpl $0x42c2, %r8d           # imm = 0x42C2
je 0x7ef7
movl $0x0, %edx
cmpl $0x5000, %r8d           # imm = 0x5000
jne 0x7f09
movq %rsi, %rdi
callq 0x774e
jmp 0x7f09
leaq 0xbce5(%rip), %rax      # 0x13a00
jmp 0x7efe
leaq 0xbc59(%rip), %rax      # 0x13980
jmp 0x7efe
leaq 0xbced(%rip), %rax      # 0x13a20
jmp 0x7efe
leaq 0xbca1(%rip), %rax      # 0x139e0
jmp 0x7efe
leaq 0xbcf5(%rip), %rax      # 0x13a40
jmp 0x7efe
leaq 0xbd29(%rip), %rax      # 0x13a80
jmp 0x7efe
leaq 0xbd5d(%rip), %rax      # 0x13ac0
jmp 0x7efe
leaq 0xbdb1(%rip), %rax      # 0x13b20
jmp 0x7efe
leaq 0xbd85(%rip), %rax      # 0x13b00
jmp 0x7efe
xorl %edi, %edi
callq 0x57c4
leaq 0xb9b2(%rip), %rdx      # 0x13740
jmp 0x7f09
movq %rsi, %rdi
callq 0x76f3
jmp 0x7e46
callq 0x6dd7
jmp 0x7f09
movq %rsi, %rdi
callq 0x7899
jmp 0x7f09
movl $0x0, %edx
cmpl $0x4240, %r8d           # imm = 0x4240
jne 0x7f09
leaq 0xbb70(%rip), %rax      # 0x13940
jmp 0x7efe
movq %rsi, %rdi
callq 0x75af
jmp 0x7f09
leaq 0xbe37(%rip), %rax      # 0x13c20
jmp 0x7e70
leaq 0xbe2b(%rip), %rax      # 0x13c20
jmp 0x7e59
movq %rsi, %rdi
callq 0x74f3
jmp 0x7f09
leaq 0xbdf5(%rip), %rax      # 0x13c00
jmp 0x7e70
leaq 0xbdcc(%rip), %rax      # 0x13be0
jmp 0x7e70
leaq 0xbda3(%rip), %rax      # 0x13bc0
jmp 0x7e70
movq %rsi, %rdi
callq 0x72ce
jmp 0x7f09
leaq 0xb82d(%rip), %rax      # 0x13660
jmp 0x7e70
leaq 0xbd64(%rip), %rax      # 0x13ba0
jmp 0x7e70
movq %rsi, %rdi
callq 0x729f
leaq 0xbf0b(%rip), %rax      # 0x13d58
jmp 0x7f09
leaq 0xbde7(%rip), %rax      # 0x13c40
movq %rsi, %rdi
movq %rax, %rsi
callq 0x70d9
jmp 0x7f09
leaq 0xbdd0(%rip), %rax      # 0x13c40
movq %rsi, %rdi
movq %rax, %rsi
callq 0x7053
jmp 0x7f09
movq %rsi, %rdi
callq 0x7368
jmp 0x7f09
movzbl %cl, %edx
callq 0x78c3
jmp 0x7f09
leaq 0xba45(%rip), %rax      # 0x138e0
jmp 0x7efe
leaq 0xba5c(%rip), %rax      # 0x13900
jmp 0x7efe
leaq 0xba13(%rip), %rax      # 0x138c0
jmp 0x7efe
leaq 0xb94a(%rip), %rax      # 0x13800
jmp 0x7efe
leaq 0xb981(%rip), %rax      # 0x13840
jmp 0x7efe
leaq 0xb998(%rip), %rax      # 0x13860
jmp 0x7efe
leaq 0xb9af(%rip), %rax      # 0x13880
jmp 0x7efe
leaq 0xb946(%rip), %rax      # 0x13820
jmp 0x7efe
leaq 0xba7d(%rip), %rax      # 0x13960
jmp 0x7efe
leaq 0xba34(%rip), %rax      # 0x13920
jmp 0x7efe
leaq 0xb9ab(%rip), %rax      # 0x138a0
jmp 0x7efe
leaq 0xbc62(%rip), %rax      # 0x13b60
movq %rsi, %rdi
movq %rax, %rsi
callq 0x6f18
popq %rcx
retq