// File: /workspace/github_c_makefile_star2_O3/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 0xa261
cmpl $0x2c, %edx
jg 0xa281
cmpl $0x21, %edx
je 0xa2a9
movl $0x42d2, %ebp           # imm = 0x42D2
cmpl $0x2b, %edx
je 0xa2c3
jmp 0xa302
cmpl $0x11b, %edx            # imm = 0x11B
jg 0xa292
cmpl $0x7e, %edx
je 0xa2b0
cmpl $0x100, %edx            # imm = 0x100
jne 0xa302
movl $0x42d7, %ebp           # imm = 0x42D7
jmp 0xa2c3
cmpl $0x2d, %edx
je 0xa2b7
cmpl $0x5e, %edx
jne 0xa302
movl $0x42d4, %ebp           # imm = 0x42D4
jmp 0xa2c3
cmpl $0x11c, %edx            # imm = 0x11C
je 0xa2be
cmpl $0x11d, %edx            # imm = 0x11D
jne 0xa302
movl $0x42d5, %ebp           # imm = 0x42D5
jmp 0xa2c3
movl $0x42d0, %ebp           # imm = 0x42D0
jmp 0xa2c3
movl $0x42d1, %ebp           # imm = 0x42D1
jmp 0xa2c3
movl $0x42d3, %ebp           # imm = 0x42D3
jmp 0xa2c3
movl $0x42d6, %ebp           # imm = 0x42D6
incl %eax
movl %eax, 0x14(%rbx)
movq %rbx, %rdi
callq 0xa227
testq %rax, %rax
je 0xa5ee
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 0x2552
xorl %r14d, %r14d
leal -0x11e(%rdx), %r8d
cmpl $0xb, %r8d
ja 0xa34a
leaq (%rcx,%rsi), %rdi
movq 0x8(%rcx,%rsi), %r15
leaq 0x43f6(%rip), %rcx      # 0xe718
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 0x24b9
jmp 0xa443
cmpl $0x28, %edx
je 0xa5b1
cmpl $0x7b, %edx
jne 0xa5f1
leaq 0x2a9(%rip), %rdx       # 0xa60c
xorl %r14d, %r14d
movq %rbx, %rdi
movl $0x7b, %esi
movl $0x7d, %ecx
xorl %r8d, %r8d
callq 0x9cd5
testq %rax, %rax
je 0xa5f1
movl $0x42f6, (%rax)         # imm = 0x42F6
movq %rax, %r14
jmp 0xa44f
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rdi), %rdx
movq %r15, %rdi
xorl %esi, %esi
jmp 0xa43e
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rdi), %rdx
movq %r15, %rdi
movl $0x1000, %esi           # imm = 0x1000
callq 0x247d
movq %rax, %r14
movl 0x14(%rbx), %ebp
movq %rbx, %rdi
callq 0x9b22
testq %rax, %rax
je 0xa5fd
movl $0x2, %edx
movq %r15, %rdi
movl $0x4000, %esi           # imm = 0x4000
movq %r14, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x2552
jmp 0xa443
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rdi), %rdx
movq %r15, %rdi
movl $0x2000, %esi           # imm = 0x2000
jmp 0xa43e
incl %eax
movl %eax, 0x14(%rbx)
movsd 0x10(%rdi), %xmm0
movq %r15, %rdi
movl $0x3000, %esi           # imm = 0x3000
callq 0x2522
jmp 0xa443
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rdi), %rdx
movq %r15, %rdi
movl $0x1, %esi
jmp 0xa43e
incl %eax
movl %eax, 0x14(%rbx)
movq 0x10(%rdi), %rdx
movq %r15, %rdi
movl $0x2, %esi
callq 0x24fd
movq %rax, %r14
testq %r14, %r14
je 0xa5ee
leaq 0x1b6(%rip), %r15       # 0xa60c
movq (%rbx), %rcx
movslq 0x14(%rbx), %rax
movq %rax, %rdx
shlq $0x5, %rdx
movq 0x8(%rcx,%rdx), %r12
movl (%rcx,%rdx), %ecx
cmpl $0x5d, %ecx
jg 0xa4d3
cmpl $0x28, %ecx
je 0xa507
cmpl $0x2e, %ecx
je 0xa54b
cmpl $0x5b, %ecx
jne 0xa5f1
incl %eax
movl %eax, 0x14(%rbx)
movq %rbx, %rdi
xorl %esi, %esi
callq 0x9ef1
testq %rax, %rax
je 0xa5e6
movq (%rbx), %rdx
movslq 0x14(%rbx), %rcx
movq %rcx, %rsi
shlq $0x5, %rsi
cmpl $0x5d, (%rdx,%rsi)
jne 0xa5a7
incl %ecx
movl %ecx, 0x14(%rbx)
movl $0x2, %edx
movq %r12, %rdi
movl $0x42f1, %esi           # imm = 0x42F1
jmp 0xa56e
cmpl $0x5e, %ecx
je 0xa537
cmpl $0x11d, %ecx            # imm = 0x11D
je 0xa583
cmpl $0x11c, %ecx            # imm = 0x11C
jne 0xa5f1
incl %eax
movl %eax, 0x14(%rbx)
movl $0x1, %edx
movq %r12, %rdi
movl $0x42f4, %esi           # imm = 0x42F4
jmp 0xa595
movq %rbx, %rdi
movl $0x28, %esi
movq %r15, %rdx
movl $0x29, %ecx
xorl %r8d, %r8d
callq 0x9cd5
testq %rax, %rax
je 0xa5e6
movl $0x2, %edx
movq %r12, %rdi
movl $0x42f2, %esi           # imm = 0x42F2
jmp 0xa56e
incl %eax
movl %eax, 0x14(%rbx)
movl $0x1, %edx
movq %r12, %rdi
movl $0x42f0, %esi           # imm = 0x42F0
jmp 0xa595
incl %eax
movl %eax, 0x14(%rbx)
movq %rbx, %rdi
callq 0xa6b9
testq %rax, %rax
je 0xa5e6
movl $0x2, %edx
movq %r12, %rdi
movl $0x42f5, %esi           # imm = 0x42F5
movq %r14, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x2552
movq %rax, %r14
jmp 0xa456
incl %eax
movl %eax, 0x14(%rbx)
movl $0x1, %edx
movq %r12, %rdi
movl $0x42f3, %esi           # imm = 0x42F3
movq %r14, %rcx
xorl %eax, %eax
callq 0x2552
movq %rax, %r14
jmp 0xa456
movq %rax, %rdi
callq 0x26ef
jmp 0xa5e6
incl %eax
movl %eax, 0x14(%rbx)
movq %rbx, %rdi
xorl %esi, %esi
callq 0x9ef1
testq %rax, %rax
je 0xa5ee
movq %rax, %r14
movq (%rbx), %rcx
movslq 0x14(%rbx), %rax
movq %rax, %rdx
shlq $0x5, %rdx
cmpl $0x29, (%rcx,%rdx)
jne 0xa5e6
incl %eax
movl %eax, 0x14(%rbx)
jmp 0xa44f
movq %r14, %rdi
callq 0x26ef
xorl %r14d, %r14d
movq %r14, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
xorl %edi, %edi
callq 0x26ef
movl %ebp, 0x14(%rbx)
jmp 0xa446