// File: /workspace/github_c_makefile_star2_O1/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 %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
leaq 0x9a6f(%rip), %r12      # 0x10480
movq (%r12), %r13
leaq 0x5b5a(%rip), %rdi      # 0xc576
callq 0x5244
testb %al, %al
je 0x6adb
movq 0x8(%r13), %rax
movq %rax, (%r12)
testq %r13, %r13
je 0x6adb
movq (%r12), %rdi
movl (%rdi), %eax
leal -0xa(%rax), %ecx
cmpl $0x6, %ecx
jb 0x6a5f
cmpl $0x17, %eax
ja 0x6c43
movl $0xe30000, %ecx         # imm = 0xE30000
btl %eax, %ecx
jae 0x6c43
callq 0x6eba
movq %rax, %r14
leaq 0x5b1b(%rip), %rdi      # 0xc589
callq 0x5c3c
leaq 0x589c(%rip), %rdi      # 0xc316
callq 0x5244
movb $0x1, %bpl
testb %al, %al
je 0x6a99
movq (%r12), %rax
movq 0x8(%rax), %rcx
movq %rcx, (%r12)
testq %rax, %rax
sete %bpl
testb %bpl, %bpl
je 0x6ad2
callq 0x69ff
movq %rax, %r15
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x24, (%rax)
movq %r13, 0x8(%rax)
movq %r15, 0x18(%rax)
movq %r15, %rdi
callq 0xa308
movq %r14, 0x10(%rbx)
testb %bpl, %bpl
jne 0x6d6c
movq %r13, (%r12)
leaq 0x5e05(%rip), %rdi      # 0xc8eb
callq 0x5244
testb %al, %al
je 0x6b09
movq 0x8(%r13), %rax
movq %rax, (%r12)
testq %r13, %r13
je 0x6b09
callq 0x69ff
movq %rax, %rbx
jmp 0x6d64
leaq 0x6689(%rip), %rdi      # 0xd199
callq 0x5244
testb %al, %al
je 0x6b27
movq (%r12), %r13
movq 0x8(%r13), %rax
movq %rax, (%r12)
jmp 0x6b2a
xorl %r13d, %r13d
testq %r13, %r13
je 0x6b8f
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %r14
movl $0x22, (%rax)
movq %r13, 0x8(%rax)
movq $0x0, 0x80(%rax)
callq 0x69ff
movq %rax, %r15
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x3, (%rax)
movq %r13, 0x8(%rax)
movq %r14, 0x18(%rax)
movq %r15, 0x20(%rax)
movq %rax, %rdi
callq 0xa308
jmp 0x6d64
leaq 0x5d1b(%rip), %rdi      # 0xc8b1
callq 0x5244
testb %al, %al
je 0x6bad
movq (%r12), %r15
movq 0x8(%r15), %rax
movq %rax, (%r12)
jmp 0x6bb0
xorl %r15d, %r15d
testq %r15, %r15
je 0x6bda
callq 0x69ff
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x1e, (%rax)
jmp 0x6d5c
leaq 0x6206(%rip), %rdi      # 0xcde7
callq 0x5244
testb %al, %al
je 0x6bf8
movq (%r12), %r15
movq 0x8(%r15), %rax
movq %rax, (%r12)
jmp 0x6bfb
xorl %r15d, %r15d
testq %r15, %r15
je 0x6c25
callq 0x69ff
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x1f, (%rax)
jmp 0x6d5c
leaq 0x5cbe(%rip), %rdi      # 0xc8ea
callq 0x5244
testb %al, %al
je 0x6c56
movq (%r12), %r15
movq 0x8(%r15), %rax
movq %rax, (%r12)
jmp 0x6c59
callq 0x5ac1
testq %rax, %rax
jne 0x6a5f
jmp 0x6adb
xorl %r15d, %r15d
testq %r15, %r15
je 0x6c83
callq 0x69ff
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x28, (%rax)
jmp 0x6d5c
leaq 0x650e(%rip), %rdi      # 0xd198
callq 0x5244
testb %al, %al
je 0x6ca1
movq (%r12), %r15
movq 0x8(%r15), %rax
movq %rax, (%r12)
jmp 0x6ca4
xorl %r15d, %r15d
testq %r15, %r15
je 0x6cce
callq 0x69ff
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x29, (%rax)
jmp 0x6d5c
leaq 0x5c18(%rip), %rdi      # 0xc8ed
callq 0x5244
testb %al, %al
je 0x6cec
movq (%r12), %r15
movq 0x8(%r15), %rax
movq %rax, (%r12)
jmp 0x6cef
xorl %r15d, %r15d
testq %r15, %r15
je 0x6d16
callq 0x69ff
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x14, (%rax)
jmp 0x6d5c
leaq 0x5bd2(%rip), %rdi      # 0xc8ef
callq 0x5244
testb %al, %al
je 0x6d34
movq (%r12), %r15
movq 0x8(%r15), %rax
movq %rax, (%r12)
jmp 0x6d37
xorl %r15d, %r15d
testq %r15, %r15
je 0x6d7e
callq 0x69ff
movq %rax, %r14
movl $0x1, %edi
movl $0xc8, %esi
callq 0x2100
movq %rax, %rbx
movl $0x15, (%rax)
movq %r15, 0x8(%rax)
movq %r14, 0x18(%rax)
movq %rbx, %rdi
callq 0xa308
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq (%r12), %r14
cmpl $0x13, (%r14)
jne 0x6d92
movq 0x8(%r14), %rax
movq %rax, (%r12)
jmp 0x6d95
xorl %r14d, %r14d
testq %r14, %r14
je 0x6de3
leaq 0x57d5(%rip), %rdi      # 0xc576
callq 0x5c3c
callq 0x6eba
movq %rax, %rbx
leaq 0x57d4(%rip), %rdi      # 0xc589
callq 0x5c3c
movslq 0x8(%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 0x6d64
movq (%r12), %rax
cmpl $0x12, (%rax)
jne 0x6e52
movq 0x8(%rax), %rbx
movq %rbx, (%r12)
leaq 0x577b(%rip), %rdi      # 0xc576
callq 0x5244
testb %al, %al
je 0x6e6d
movq 0x8(%rbx), %rax
movq %rax, (%r12)
testq %rbx, %rbx
je 0x6e6d
movq (%r12), %r14
movl (%r14), %eax
leal -0xa(%rax), %ecx
cmpl $0x6, %ecx
jb 0x6e2f
cmpl $0x17, %eax
ja 0x6e5c
movl $0xe30000, %ecx         # imm = 0xE30000
btl %eax, %ecx
jae 0x6e5c
callq 0x6eba
cmpb $0x1, 0xc(%rax)
je 0x6ea8
movq %rax, %rbx
leaq 0x5745(%rip), %rdi      # 0xc589
callq 0x5c3c
movslq 0x4(%rbx), %r15
jmp 0x6dbe
callq 0x7065
jmp 0x6b01
movq %r14, %rdi
callq 0x5ac1
testq %rax, %rax
jne 0x6e2f
movq %rbx, (%r12)
movq (%r12), %r14
callq 0x69ff
movq %rax, %rbx
movq %rax, %rdi
callq 0xa308
movq 0x10(%rbx), %rax
cmpb $0x1, 0xc(%rax)
je 0x6e9b
movq %rbx, %rdi
callq 0xa300
movslq %eax, %r15
jmp 0x6dbe
movq 0x18(%r14), %rdi
leaq 0x5a6c(%rip), %rsi      # 0xc912
jmp 0x6eb3
movq 0x18(%r14), %rdi
leaq 0x5a3e(%rip), %rsi      # 0xc8f1
xorl %eax, %eax
callq 0x487c