// File: /workspace/github_c_makefile_star2_O2/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 %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq (%rdi), %rdx
movslq 0x14(%rdi), %rax
movq %rax, %rsi
shlq $0x5, %rsi
movl (%rdx,%rsi), %ecx
cmpl $0x21, %ecx
je 0x9451
cmpl $0x2b, %ecx
je 0x93f2
cmpl $0x11d, %ecx            # imm = 0x11D
je 0x944a
cmpl $0x5e, %ecx
je 0x9443
cmpl $0x7e, %ecx
je 0x93dd
cmpl $0x100, %ecx            # imm = 0x100
je 0x93eb
cmpl $0x11c, %ecx            # imm = 0x11C
je 0x93e4
cmpl $0x2d, %ecx
jne 0x93f9
movl $0x42d3, %ebp           # imm = 0x42D3
jmp 0x9456
movl $0x42d1, %ebp           # imm = 0x42D1
jmp 0x9456
movl $0x42d6, %ebp           # imm = 0x42D6
jmp 0x9456
movl $0x42d7, %ebp           # imm = 0x42D7
jmp 0x9456
movl $0x42d2, %ebp           # imm = 0x42D2
jmp 0x9456
xorl %r14d, %r14d
leal -0x11e(%rcx), %edi
cmpl $0xb, %edi
ja 0x9499
leaq (%rdx,%rsi), %rcx
movq 0x8(%rdx,%rsi), %r15
leaq 0x32fd(%rip), %rdx      # 0xc718
movslq (%rdx,%rdi,4), %rsi
addq %rdx, %rsi
jmpq *%rsi
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rcx), %rdx
movq 0x18(%rcx), %rcx
movq %r15, %rdi
movl $0x5000, %esi           # imm = 0x5000
callq 0x23c5
jmp 0x9584
movl $0x42d4, %ebp           # imm = 0x42D4
jmp 0x9456
movl $0x42d5, %ebp           # imm = 0x42D5
jmp 0x9456
movl $0x42d0, %ebp           # imm = 0x42D0
incl %eax
movl %eax, 0x14(%rbx)
movq %rbx, %rdi
callq 0x937a
testq %rax, %rax
je 0x96ae
movq (%rbx), %rcx
movslq 0x14(%rbx), %rdx
shlq $0x5, %rdx
movq 0x8(%rcx,%rdx), %rdi
pushq $0x1
popq %rdx
movl %ebp, %esi
movq %rax, %rcx
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2458
cmpl $0x28, %ecx
je 0x96c3
cmpl $0x7b, %ecx
jne 0x96b1
leaq 0x23d(%rip), %rdx       # 0x96ef
pushq $0x7b
popq %rsi
pushq $0x7d
popq %rcx
xorl %r14d, %r14d
movq %rbx, %rdi
xorl %r8d, %r8d
callq 0x8e8b
testq %rax, %rax
je 0x96b1
movl $0x42f6, (%rax)         # imm = 0x42F6
movq %rax, %r14
jmp 0x9590
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rcx), %rdx
movq %r15, %rdi
xorl %esi, %esi
jmp 0x957f
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rcx), %rdx
movq %r15, %rdi
movl $0x1000, %esi           # imm = 0x1000
callq 0x238b
movq %rax, %r14
movl 0x14(%rbx), %ebp
movq %rbx, %rdi
callq 0x8cc9
testq %rax, %rax
je 0x96e0
pushq $0x2
popq %rdx
movq %r15, %rdi
movl $0x4000, %esi           # imm = 0x4000
movq %r14, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x2458
jmp 0x9584
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rcx), %rdx
movq %r15, %rdi
movl $0x2000, %esi           # imm = 0x2000
jmp 0x957f
incl %eax
movl %eax, 0x14(%rbx)
movsd 0x10(%rcx), %xmm0
movq %r15, %rdi
movl $0x3000, %esi           # imm = 0x3000
callq 0x242a
jmp 0x9584
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rcx), %rdx
pushq $0x1
jmp 0x957b
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rcx), %rdx
pushq $0x2
popq %rsi
movq %r15, %rdi
callq 0x2407
movq %rax, %r14
testq %r14, %r14
je 0x96ae
pushq $0x2
popq %r13
pushq $0x5d
popq %r12
pushq $0x1
popq %r15
movq (%rbx), %rcx
movslq 0x14(%rbx), %rax
movq %rax, %rdx
shlq $0x5, %rdx
movq 0x8(%rcx,%rdx), %rbp
movl (%rcx,%rdx), %ecx
cmpl $0x28, %ecx
je 0x962b
cmpl $0x2e, %ecx
je 0x9674
cmpl $0x5b, %ecx
je 0x95f1
cmpl $0x5e, %ecx
je 0x9652
cmpl $0x11d, %ecx            # imm = 0x11D
je 0x961c
cmpl $0x11c, %ecx            # imm = 0x11C
jne 0x96b1
incl %eax
movl %eax, 0x14(%rbx)
movq %rbp, %rdi
movl $0x42f4, %esi           # imm = 0x42F4
jmp 0x965f
movq %rbx, %rdi
pushq $0x5b
popq %rsi
leaq -0x70a(%rip), %rdx      # 0x8ef4
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x8e8b
testq %rax, %rax
je 0x96a6
movq %rbp, %rdi
movl $0x42f1, %esi           # imm = 0x42F1
jmp 0x968e
incl %eax
movl %eax, 0x14(%rbx)
movq %rbp, %rdi
movl $0x42f3, %esi           # imm = 0x42F3
jmp 0x965f
movq %rbx, %rdi
pushq $0x28
popq %rsi
leaq 0xb7(%rip), %rdx        # 0x96ef
pushq $0x29
popq %rcx
xorl %r8d, %r8d
callq 0x8e8b
testq %rax, %rax
je 0x96a6
movq %rbp, %rdi
movl $0x42f2, %esi           # imm = 0x42F2
jmp 0x968e
incl %eax
movl %eax, 0x14(%rbx)
movq %rbp, %rdi
movl $0x42f0, %esi           # imm = 0x42F0
movq %r15, %rdx
movq %r14, %rcx
xorl %eax, %eax
callq 0x2458
movq %rax, %r14
jmp 0x959c
incl %eax
movl %eax, 0x14(%rbx)
movq %rbx, %rdi
callq 0x9720
testq %rax, %rax
je 0x96a6
movq %rbp, %rdi
movl $0x42f5, %esi           # imm = 0x42F5
movq %r13, %rdx
movq %r14, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x2458
movq %rax, %r14
jmp 0x959c
movq %r14, %rdi
callq 0x25d9
xorl %r14d, %r14d
movq %r14, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq -0x7d6(%rip), %rdx      # 0x8ef4
pushq $0x28
popq %rsi
pushq $0x29
popq %rcx
movq %rbx, %rdi
xorl %r8d, %r8d
callq 0x8e8b
jmp 0x9584
xorl %edi, %edi
callq 0x25d9
movl %ebp, 0x14(%rbx)
jmp 0x9587