// File: /workspace/github_c_makefile_star2_O0/takoeight0821[P]hoc_nyan/src/ir.c
// Function: show_ir
char* show_ir(IR* ir) {
  switch (ir->op) {
  case IIMM:
    return format("%s = %d", show_ireg(ir->r0), ir->imm_int);
  case ILABEL:
    return format("%s = %s", show_ireg(ir->r0), ir->label);
  case IADD:
    return format("%s = %s + %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case ISUB:
    return format("%s = %s - %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case IMUL:
    return format("%s = %s * %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case IDIV:
    return format("%s = %s / %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case IMOD:
    return format("%s = %s %% %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case ILT:
    return format("%s = %s < %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case ILE:
    return format("%s = %s <= %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case IGT:
    return format("%s = %s > %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case IGE:
    return format("%s = %s >= %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case IEQ:
    return format("%s = %s == %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case INE:
    return format("%s = %s != %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case IAND:
    return format("%s = %s & %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case IOR:
    return format("%s = %s | %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case IXOR:
    return format("%s = %s ^ %s", show_ireg(ir->r0), show_ireg(ir->r1), show_ireg(ir->r2));
  case INOT:
    return format("%s = not %s", show_ireg(ir->r0), show_ireg(ir->r1));
  case IADDRESS: 
    return format("%s = address %d", show_ireg(ir->r0), ir->imm_int);
  case IALLOC:
    return format("alloc %d", ir->imm_int);
  case ILOAD:
    return format("%s = load %s", show_ireg(ir->r0), show_ireg(ir->r1));
  case ISTOREARG:
    return format("storearg %s <- %d(%zu)", show_ireg(ir->r1), ir->imm_int, ir->size);
  case ISTORE:
    return format("store %s <- %s", show_ireg(ir->r1), show_ireg(ir->r2));
  case IMOV:
    return format("mov %s <- %s", show_ireg(ir->r0), show_ireg(ir->r1));
  case ICALL:
    return format("%s = call %s %s", show_ireg(ir->r0), ir->func_name, show_args(ir->args));
  case IBR:
    return format("br %s %s %s", show_ireg(ir->r1), ir->then, ir->els);
  case IJMP:
    return format("jmp %s", ir->jump_to);
  case IRET:
    if (ir->r1) {
      return format("ret %s", show_ireg(ir->r1));
    } else {
      return format("ret");
    }
  }
  error("unreachable\n");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x18(%rbp)
subq $0x1a, %rax
ja 0x96e1
movq -0x18(%rbp), %rax
leaq 0xa06e(%rip), %rcx      # 0x12fac
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, %rsi
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq 0xa0c6(%rip), %rdi      # 0x1302b
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, %rsi
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdx
leaq 0xa09f(%rip), %rdi      # 0x13033
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0x28(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq %rax, %rcx
leaq 0xa056(%rip), %rdi      # 0x1303b
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq %rax, %rcx
leaq 0xa012(%rip), %rdi      # 0x13048
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq %rax, %rcx
leaq 0x9fce(%rip), %rdi      # 0x13055
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x58(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0x50(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0x58(%rbp), %rsi
movq -0x50(%rbp), %rdx
movq %rax, %rcx
leaq 0x9f8a(%rip), %rdi      # 0x13062
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x68(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rdx
movq %rax, %rcx
leaq 0x9f46(%rip), %rdi      # 0x1306f
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x78(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0x70(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0x78(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq %rax, %rcx
leaq 0x9f03(%rip), %rdi      # 0x1307d
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x88(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0x80(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0x88(%rbp), %rsi
movq -0x80(%rbp), %rdx
movq %rax, %rcx
leaq 0x9eb9(%rip), %rdi      # 0x1308a
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x98(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0x90(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0x98(%rbp), %rsi
movq -0x90(%rbp), %rdx
movq %rax, %rcx
leaq 0x9e6a(%rip), %rdi      # 0x13098
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0xa8(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0xa0(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
movq %rax, %rcx
leaq 0x9e1a(%rip), %rdi      # 0x130a5
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0xb8(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0xb0(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0xb8(%rbp), %rsi
movq -0xb0(%rbp), %rdx
movq %rax, %rcx
leaq 0x9dcb(%rip), %rdi      # 0x130b3
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0xc8(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0xc0(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0xc8(%rbp), %rsi
movq -0xc0(%rbp), %rdx
movq %rax, %rcx
leaq 0x9d7c(%rip), %rdi      # 0x130c1
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0xd8(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0xd0(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0xd8(%rbp), %rsi
movq -0xd0(%rbp), %rdx
movq %rax, %rcx
leaq 0x9d2d(%rip), %rdi      # 0x130cf
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0xe8(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0xe0(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0xe8(%rbp), %rsi
movq -0xe0(%rbp), %rdx
movq %rax, %rcx
leaq 0x9cdd(%rip), %rdi      # 0x130dc
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0xf8(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0xf0(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0xf8(%rbp), %rsi
movq -0xf0(%rbp), %rdx
movq %rax, %rcx
leaq 0x9c8d(%rip), %rdi      # 0x130e9
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x100(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq -0x100(%rbp), %rsi
movq %rax, %rdx
leaq 0x9c58(%rip), %rdi      # 0x130f6
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, %rsi
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
leaq 0x9c36(%rip), %rdi      # 0x13102
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movl 0x4(%rax), %esi
leaq 0x9c28(%rip), %rdi      # 0x13112
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x108(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq -0x108(%rbp), %rsi
movq %rax, %rdx
leaq 0x9bef(%rip), %rdi      # 0x1311b
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, %rsi
movq -0x10(%rbp), %rax
movl 0x4(%rax), %edx
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
leaq 0x9bc6(%rip), %rdi      # 0x13128
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, -0x110(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x8ec0
movq -0x110(%rbp), %rsi
movq %rax, %rdx
leaq 0x9b9b(%rip), %rdi      # 0x1313f
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x118(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq -0x118(%rbp), %rsi
movq %rax, %rdx
leaq 0x9b68(%rip), %rdi      # 0x1314e
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x8ec0
movq %rax, -0x128(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq %rax, -0x120(%rbp)
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rdi
callq 0x9700
movq -0x128(%rbp), %rsi
movq -0x120(%rbp), %rdx
movq %rax, %rcx
leaq 0x9b1d(%rip), %rdi      # 0x1315b
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, %rsi
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rdx
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rcx
leaq 0x9af6(%rip), %rdi      # 0x1316b
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rsi
leaq 0x8fcd(%rip), %rdi      # 0x1265e
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
movq -0x10(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x96cd
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x8ec0
movq %rax, %rsi
leaq 0x9ab7(%rip), %rdi      # 0x13177
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
leaq 0x8b4a(%rip), %rdi      # 0x1221e
movb $0x0, %al
callq 0xfa70
movq %rax, -0x8(%rbp)
jmp 0x96ef
leaq 0x9a96(%rip), %rdi      # 0x1317e
movb $0x0, %al
callq 0xfb50
movq -0x8(%rbp), %rax
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
nopl (%rax)