// File: /workspace/github_c_makefile_star2_O1/ryvnf[P]czc/parse.c
// Function: parse_unary_expr
static struct ast *parse_unary_expr(struct parse *parse)
{
    struct loc *line = get_linenr(parse);
    enum ast_tag op = INVALID_AST_TAG;

    switch (peek_tok(parse)->type) {
        case '+':
            op = UPLUS_EXPR;
            break;

        case '-':
            op = NEG_EXPR;
            break;

        case '~':
            op = COMPL_EXPR;
            break;

        case '!':
            op = NOT_EXPR;
            break;

        case '^':
            op = REF_EXPR;
            break;

        case DEC_TOK:
            op = PRE_DEC_EXPR;
            break;

        case INC_TOK:
            op = PRE_INC_EXPR;
            break;

        case SIZEOF_TOK:
            op = SIZEOF_EXPR;
            break;

        default:
            return parse_postfix_expr(parse);
    }

    parse->pos++;
    struct ast *ast = parse_unary_expr(parse);
    if (ast == NULL)
        return NULL;

    return ast_new_ast(get_linenr(parse), op, 1, ast);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
movq (%rdi), %rcx
movslq 0x14(%rdi), %rax
movq %rax, %rsi
shlq $0x5, %rsi
movl (%rcx,%rsi), %edx
cmpl $0x7d, %edx
jg 0xa494
cmpl $0x2c, %edx
jg 0xa4b4
cmpl $0x21, %edx
je 0xa4dc
movl $0x42d2, %ebp           # imm = 0x42D2
cmpl $0x2b, %edx
je 0xa4f6
jmp 0xa535
cmpl $0x11b, %edx            # imm = 0x11B
jg 0xa4c5
cmpl $0x7e, %edx
je 0xa4e3
cmpl $0x100, %edx            # imm = 0x100
jne 0xa535
movl $0x42d7, %ebp           # imm = 0x42D7
jmp 0xa4f6
cmpl $0x2d, %edx
je 0xa4ea
cmpl $0x5e, %edx
jne 0xa535
movl $0x42d4, %ebp           # imm = 0x42D4
jmp 0xa4f6
cmpl $0x11c, %edx            # imm = 0x11C
je 0xa4f1
cmpl $0x11d, %edx            # imm = 0x11D
jne 0xa535
movl $0x42d5, %ebp           # imm = 0x42D5
jmp 0xa4f6
movl $0x42d0, %ebp           # imm = 0x42D0
jmp 0xa4f6
movl $0x42d1, %ebp           # imm = 0x42D1
jmp 0xa4f6
movl $0x42d3, %ebp           # imm = 0x42D3
jmp 0xa4f6
movl $0x42d6, %ebp           # imm = 0x42D6
incl %eax
movl %eax, 0x14(%rbx)
movq %rbx, %rdi
callq 0xa45a
testq %rax, %rax
je 0xa800
movq (%rbx), %rcx
movslq 0x14(%rbx), %rdx
shlq $0x5, %rdx
movq 0x8(%rcx,%rdx), %rdi
movl $0x1, %edx
movl %ebp, %esi
movq %rax, %rcx
xorl %eax, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x2532
xorl %r14d, %r14d
leal -0x11e(%rdx), %r8d
cmpl $0xb, %r8d
ja 0xa57d
leaq (%rcx,%rsi), %rdi
movq 0x8(%rcx,%rsi), %r15
leaq 0x41d3(%rip), %rcx      # 0xe728
movslq (%rcx,%r8,4), %rdx
addq %rcx, %rdx
jmpq *%rdx
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rdi), %rdx
movq 0x18(%rdi), %rcx
movq %r15, %rdi
movl $0x5000, %esi           # imm = 0x5000
callq 0x2499
jmp 0xa673
cmpl $0x28, %edx
je 0xa80f
cmpl $0x7b, %edx
jne 0xa676
leaq 0x2cd(%rip), %rdx       # 0xa863
xorl %r14d, %r14d
movq %rbx, %rdi
movl $0x7b, %esi
movl $0x7d, %ecx
xorl %r8d, %r8d
callq 0x9efe
testq %rax, %rax
je 0xa676
movl $0x42f6, (%rax)         # imm = 0x42F6
jmp 0xa673
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rdi), %rdx
movq %r15, %rdi
xorl %esi, %esi
jmp 0xa66e
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rdi), %rdx
movq %r15, %rdi
movl $0x1000, %esi           # imm = 0x1000
callq 0x245d
movq %rax, %r14
movl 0x14(%rbx), %ebp
movq %rbx, %rdi
callq 0x9d3a
testq %rax, %rax
je 0xa844
movl $0x2, %edx
movq %r15, %rdi
movl $0x4000, %esi           # imm = 0x4000
movq %r14, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x2532
jmp 0xa673
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rdi), %rdx
movq %r15, %rdi
movl $0x2000, %esi           # imm = 0x2000
jmp 0xa66e
incl %eax
movl %eax, 0x14(%rbx)
movsd 0x10(%rdi), %xmm0
movq %r15, %rdi
movl $0x3000, %esi           # imm = 0x3000
callq 0x2502
jmp 0xa673
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rdi), %rdx
movq %r15, %rdi
movl $0x1, %esi
jmp 0xa66e
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rdi), %rdx
movq %r15, %rdi
movl $0x2, %esi
callq 0x24dd
movq %rax, %r14
testq %r14, %r14
je 0xa800
leaq 0x1dd(%rip), %r15       # 0xa863
movq (%rbx), %rax
movslq 0x14(%rbx), %rcx
movq %rcx, %rdx
shlq $0x5, %rdx
movq 0x8(%rax,%rdx), %r12
movl (%rax,%rdx), %edx
movl $0x2, %eax
cmpl $0x5d, %edx
jg 0xa6f8
cmpl $0x28, %edx
je 0xa72a
cmpl $0x2e, %edx
je 0xa76f
cmpl $0x5b, %edx
jne 0xa7e1
leal 0x1(%rcx), %eax
movl %eax, 0x14(%rbx)
movq %rbx, %rdi
xorl %esi, %esi
callq 0xa102
testq %rax, %rax
je 0xa7b8
movq (%rbx), %rdx
movslq 0x14(%rbx), %rcx
movq %rcx, %rsi
shlq $0x5, %rsi
cmpl $0x5d, (%rdx,%rsi)
jne 0xa7b0
incl %ecx
movl %ecx, 0x14(%rbx)
jmp 0xa7ba
cmpl $0x5e, %edx
je 0xa75a
cmpl $0x11d, %edx            # imm = 0x11D
je 0xa791
cmpl $0x11c, %edx            # imm = 0x11C
jne 0xa7e1
leal 0x1(%rcx), %eax
movl %eax, 0x14(%rbx)
movl $0x1, %edx
movq %r12, %rdi
movl $0x42f4, %esi           # imm = 0x42F4
jmp 0xa7a4
movq %rbx, %rdi
movl $0x28, %esi
movq %r15, %rdx
movl $0x29, %ecx
xorl %r8d, %r8d
callq 0x9efe
testq %rax, %rax
je 0xa7ec
movl $0x2, %edx
movq %r12, %rdi
movl $0x42f2, %esi           # imm = 0x42F2
jmp 0xa7cc
leal 0x1(%rcx), %eax
movl %eax, 0x14(%rbx)
movl $0x1, %edx
movq %r12, %rdi
movl $0x42f0, %esi           # imm = 0x42F0
jmp 0xa7a4
leal 0x1(%rcx), %eax
movl %eax, 0x14(%rbx)
movq %rbx, %rdi
callq 0xa903
testq %rax, %rax
je 0xa7ec
movl $0x2, %edx
movq %r12, %rdi
movl $0x42f5, %esi           # imm = 0x42F5
jmp 0xa7cc
leal 0x1(%rcx), %eax
movl %eax, 0x14(%rbx)
movl $0x1, %edx
movq %r12, %rdi
movl $0x42f3, %esi           # imm = 0x42F3
movq %r14, %rcx
xorl %eax, %eax
callq 0x2532
jmp 0xa7d9
movq %rax, %rdi
callq 0x26cf
xorl %eax, %eax
testq %rax, %rax
je 0xa7ec
movl $0x2, %edx
movq %r12, %rdi
movl $0x42f1, %esi           # imm = 0x42F1
movq %r14, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x2532
movq %rax, %r14
movl $0x3, %eax
cmpl $0x3, %eax
je 0xa686
jmp 0xa7f3
movl $0x5, %eax
jmp 0xa7e1
cmpl $0x5, %eax
jne 0xa803
movq %r14, %rdi
callq 0x26cf
xorl %r14d, %r14d
movq %r14, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
incl %eax
movl %eax, 0x14(%rbx)
movq %rbx, %rdi
xorl %esi, %esi
callq 0xa102
testq %rax, %rax
je 0xa85b
movq %rax, %r14
movq (%rbx), %rcx
movslq 0x14(%rbx), %rax
movq %rax, %rdx
shlq $0x5, %rdx
cmpl $0x29, (%rcx,%rdx)
jne 0xa853
incl %eax
movl %eax, 0x14(%rbx)
jmp 0xa676
xorl %edi, %edi
callq 0x26cf
movl %ebp, 0x14(%rbx)
jmp 0xa676
movq %r14, %rdi
callq 0x26cf
xorl %r14d, %r14d
jmp 0xa676