// File: /workspace/github_cpp_makefile_star2_O1/sighingnow[P]compile-pascal/pl0_tac_gen.cpp
// Function: pl0_tac_program(pl0_ast_program const*)
bool pl0_tac_program(pl0_ast_program const *program) {
    cout << __func__;
    irb.emit("program", "");
    irb.emit("procedure", "_main");
    pl0_tac_prog(program->program);
    irb.emit("exit", new Value(0, "integer")); // main function: exit with 0.
    irb.emit("endproc", "_main");
    irb.emit("endprogram", "");
    return status;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x140, %rsp            # imm = 0x140
movq %rdi, %rbx
movq 0x54096(%rip), %rdi     # 0xbffd8
leaq 0x2d5c6(%rip), %r14     # 0x9950f
movq %r14, %rsi
xorl %edx, %edx
callq 0x52e0
leaq 0x130(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2b8c2(%rip), %rsi     # 0x97828
leaq 0x2b8c2(%rip), %rdx     # 0x9782f
leaq 0x120(%rsp), %rdi
callq 0x2670a
leaq 0x90(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x80(%rsp), %rdi
movq %r14, %rsi
movq %r14, %rdx
callq 0x2670a
leaq 0x55607(%rip), %rdi     # 0xc15a8
leaq 0x120(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x7b33e
movq 0x80(%rsp), %rdi
cmpq %r12, %rdi
je 0x6bfd3
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x120(%rsp), %rdi
cmpq %r15, %rdi
je 0x6bff0
movq 0x130(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x110(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2b8ca(%rip), %rsi     # 0x978cd
leaq 0x2b8cc(%rip), %rdx     # 0x978d6
leaq 0x100(%rsp), %rdi
callq 0x2670a
leaq 0x70(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2c909(%rip), %rsi     # 0x98930
leaq 0x2c907(%rip), %rdx     # 0x98935
leaq 0x60(%rsp), %rdi
callq 0x2670a
leaq 0x55569(%rip), %rdi     # 0xc15a8
leaq 0x100(%rsp), %rsi
leaq 0x60(%rsp), %rdx
callq 0x7b33e
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x6c068
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x100(%rsp), %rdi
cmpq %r15, %rdi
je 0x6c085
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x8(%rbx), %rdi
callq 0x6c38d
leaq 0xf0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2c895(%rip), %rsi     # 0x98936
leaq 0x2c892(%rip), %rdx     # 0x9893a
leaq 0xe0(%rsp), %rdi
callq 0x2670a
movl $0x48, %edi
callq 0x5250
movq %rax, %r14
leaq 0x50(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x2b03d(%rip), %rsi     # 0x9710f
leaq 0x2b03d(%rip), %rdx     # 0x97116
leaq 0x40(%rsp), %rdi
callq 0x2670a
movb $0x1, %r12b
leaq 0x40(%rsp), %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x7b654
xorl %r12d, %r12d
leaq 0x554a9(%rip), %rdi     # 0xc15a8
leaq 0xe0(%rsp), %rsi
movq %r14, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x7b53e
movq 0x40(%rsp), %rdi
cmpq %r13, %rdi
je 0x6c12b
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xe0(%rsp), %rdi
cmpq %r15, %rdi
je 0x6c148
movq 0xf0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xd0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2c7e0(%rip), %rsi     # 0x9893b
leaq 0x2c7e0(%rip), %rdx     # 0x98942
leaq 0xc0(%rsp), %rdi
callq 0x2670a
leaq 0x30(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2c7b1(%rip), %rsi     # 0x98930
leaq 0x2c7af(%rip), %rdx     # 0x98935
leaq 0x20(%rsp), %rdi
callq 0x2670a
leaq 0x55411(%rip), %rdi     # 0xc15a8
leaq 0xc0(%rsp), %rsi
leaq 0x20(%rsp), %rdx
callq 0x7b33e
movq 0x20(%rsp), %rdi
cmpq %r14, %rdi
je 0x6c1c0
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xc0(%rsp), %rdi
cmpq %r15, %rdi
je 0x6c1dd
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xb0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2c753(%rip), %rsi     # 0x98943
leaq 0x2c756(%rip), %rdx     # 0x9894d
leaq 0xa0(%rsp), %rdi
callq 0x2670a
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2d2fb(%rip), %rdx     # 0x9950f
movq %rsp, %rdi
movq %rdx, %rsi
callq 0x2670a
leaq 0x55382(%rip), %rdi     # 0xc15a8
leaq 0xa0(%rsp), %rsi
movq %rsp, %rdx
callq 0x7b33e
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x6c24c
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xa0(%rsp), %rdi
cmpq %r15, %rdi
je 0x6c269
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x5260
movb 0x55441(%rip), %al      # 0xc16b0
xorb $0x1, %al
addq $0x140, %rsp            # imm = 0x140
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x6c2a0
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x6c2a0
movq %rax, %rbx
movq 0xa0(%rsp), %rdi
jmp 0x6c375
movq %rax, %rbx
movq 0x20(%rsp), %rdi
cmpq %r14, %rdi
je 0x6c2cc
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x6c2cc
movq %rax, %rbx
movq 0xc0(%rsp), %rdi
jmp 0x6c375
movq %rax, %rbx
movb $0x1, %r12b
jmp 0x6c35b
movq %rax, %rbx
jmp 0x6c36d
movq %rax, %rbx
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x6c308
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x6c308
movq %rax, %rbx
movq 0x100(%rsp), %rdi
jmp 0x6c375
movq %rax, %rbx
movq 0x80(%rsp), %rdi
cmpq %r12, %rdi
je 0x6c337
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x6c337
movq %rax, %rbx
movq 0x120(%rsp), %rdi
jmp 0x6c375
movq %rax, %rbx
movq 0x40(%rsp), %rdi
cmpq %r13, %rdi
je 0x6c35b
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5260
testb %r12b, %r12b
je 0x6c36d
movl $0x48, %esi
movq %r14, %rdi
callq 0x5260
movq 0xe0(%rsp), %rdi
cmpq %r15, %rdi
je 0x6c385
movq (%r15), %rsi
incq %rsi
callq 0x5260
movq %rbx, %rdi
callq 0x53d0