// File: /workspace/github_c_makefile_star2_O3/pocari[P]compilerbook-9cc/parser.c
// Function: cast
static Node *cast() {
  Token *tk = token;
  if (consume("(")) {
    if (is_type(token)) {
      Type *ty = type_name();
      expect(")");
      if (!consume("{")) {
        // "{" が来た場合は、キャストではなくcompound-literaruの"(" typename ")" になるので、
        // この節はスキップして、token=tmpでもとに戻した上で、postfix側で処理する
        Node *node = new_unary_node(ND_CAST, cast(), tk);
        add_type(node->lhs);
        node->ty = ty;
        return node;
      }
    }
  }
  token = tk;
  Node *node = unary();
  add_type(node);

  return node;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
leaq 0x9bda(%rip), %rbx      # 0x10480
movq (%rbx), %r12
leaq 0x5cc6(%rip), %rdi      # 0xc576
callq 0x51eb
testb %al, %al
je 0x690a
movq 0x8(%r12), %rdi
movq %rdi, (%rbx)
movl (%rdi), %eax
leal -0xa(%rax), %ecx
cmpl $0x6, %ecx
jb 0x68e2
cmpl $0x17, %eax
ja 0x6a93
movl $0xe30000, %ecx         # imm = 0xE30000
btl %eax, %ecx
jae 0x6a93
callq 0x6cdd
movq %rax, %r14
leaq 0x5c98(%rip), %rdi      # 0xc589
callq 0x5b5c
leaq 0x5a19(%rip), %rdi      # 0xc316
callq 0x51eb
testb %al, %al
je 0x69a3
movq %r12, (%rbx)
leaq 0x601f(%rip), %rdi      # 0xc933
callq 0x51eb
testb %al, %al
je 0x6932
movq 0x8(%r12), %rax
movq %rax, (%rbx)
callq 0x6897
movq %rax, %rbx
jmp 0x6b5a
leaq 0x6890(%rip), %rdi      # 0xd1c9
callq 0x51eb
testb %al, %al
je 0x69dc
movq 0x8(%r12), %rax
movq %rax, (%rbx)
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %r14
movl $0x22, (%rax)
movq %r12, 0x8(%rax)
callq 0x6897
movq %rax, %r15
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x3, (%rax)
movq %r12, 0x8(%rax)
movq %r14, 0x18(%rax)
movq %r15, 0x20(%rax)
movq %rax, %rdi
callq 0x9eef
jmp 0x6b5a
callq 0x6897
movq %rax, %r15
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x24, (%rax)
movq %r12, 0x8(%rax)
movq %r15, 0x18(%rax)
movq %r15, %rdi
callq 0x9eef
movq %r14, 0x10(%rbx)
jmp 0x6b62
leaq 0x5f16(%rip), %rdi      # 0xc8f9
callq 0x51eb
testb %al, %al
je 0x6a19
movq 0x8(%r12), %rax
movq %rax, (%rbx)
callq 0x6897
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x1e, (%rax)
jmp 0x6b52
leaq 0x63f7(%rip), %rdi      # 0xce17
callq 0x51eb
testb %al, %al
je 0x6a56
movq 0x8(%r12), %rax
movq %rax, (%rbx)
callq 0x6897
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x1f, (%rax)
jmp 0x6b52
leaq 0x5ed5(%rip), %rdi      # 0xc932
callq 0x51eb
testb %al, %al
je 0x6aa6
movq 0x8(%r12), %rax
movq %rax, (%rbx)
callq 0x6897
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x28, (%rax)
jmp 0x6b52
callq 0x59dc
testq %rax, %rax
jne 0x68e2
jmp 0x690a
leaq 0x671b(%rip), %rdi      # 0xd1c8
callq 0x51eb
testb %al, %al
je 0x6ae0
movq 0x8(%r12), %rax
movq %rax, (%rbx)
callq 0x6897
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x29, (%rax)
jmp 0x6b52
leaq 0x5e4e(%rip), %rdi      # 0xc935
callq 0x51eb
testb %al, %al
je 0x6b1a
movq 0x8(%r12), %rax
movq %rax, (%rbx)
callq 0x6897
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x14, (%rax)
jmp 0x6b52
leaq 0x5e16(%rip), %rdi      # 0xc937
callq 0x51eb
testb %al, %al
je 0x6b71
movq 0x8(%r12), %rax
movq %rax, (%rbx)
callq 0x6897
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x15, (%rax)
movq %r12, 0x8(%rax)
movq %r14, 0x18(%rax)
movq %rbx, %rdi
callq 0x9eef
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movl (%r12), %eax
cmpl $0x12, %eax
je 0x6bd0
cmpl $0x13, %eax
jne 0x6c57
movq 0x8(%r12), %rax
movq %rax, (%rbx)
leaq 0x59e4(%rip), %rdi      # 0xc576
callq 0x5b5c
callq 0x6cdd
movq %rax, %rbx
leaq 0x59e3(%rip), %rdi      # 0xc589
callq 0x5b5c
movslq 0x8(%rbx), %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x22, (%rax)
movq %r12, 0x8(%rax)
jmp 0x6cb2
movq 0x8(%r12), %r15
movq %r15, (%rbx)
leaq 0x5997(%rip), %rdi      # 0xc576
callq 0x51eb
testb %al, %al
je 0x6c71
movq 0x8(%r15), %r14
movq %r14, (%rbx)
movl (%r14), %eax
leal -0xa(%rax), %ecx
cmpl $0x6, %ecx
jb 0x6c0d
cmpl $0x17, %eax
ja 0x6c61
movl $0xe30000, %ecx         # imm = 0xE30000
btl %eax, %ecx
jae 0x6c61
callq 0x6cdd
cmpb $0x1, 0xc(%rax)
je 0x6ccb
movq %rax, %rbx
leaq 0x5963(%rip), %rdi      # 0xc589
callq 0x5b5c
movslq 0x4(%rbx), %r15
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x22, (%rax)
movq %r14, 0x8(%rax)
movq %r15, 0x80(%rax)
jmp 0x6b5a
callq 0x6e72
jmp 0x692a
movq %r14, %rdi
callq 0x59dc
testq %rax, %rax
jne 0x6c0d
movq %r15, (%rbx)
callq 0x6897
movq %rax, %rbx
movq %rax, %rdi
callq 0x9eef
movq 0x10(%rbx), %rax
cmpb $0x1, 0xc(%rax)
je 0x6cbe
movq %rbx, %rdi
callq 0x9ee7
movslq %eax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x22, (%rax)
movq %r15, 0x8(%rax)
movq %r14, 0x80(%rax)
jmp 0x6b5a
movq 0x18(%r15), %rdi
leaq 0x5c91(%rip), %rsi      # 0xc95a
jmp 0x6cd6
movq 0x18(%r14), %rdi
leaq 0x5c63(%rip), %rsi      # 0xc939
xorl %eax, %eax
callq 0x487c