// File: /workspace/github_cpp_makefile_star2_O2/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 %rbx
subq $0x150, %rsp            # imm = 0x150
movq %rdi, %rbx
movq 0x4d4c4(%rip), %rdi     # 0x8afd8
leaq 0x1da24(%rip), %rsi     # 0x5b53f
callq 0x5250
leaq 0x1bd01(%rip), %rsi     # 0x59828
leaq 0x130(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
leaq 0x1d9ff(%rip), %rsi     # 0x5b53f
leaq 0x110(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0xfa26
leaq 0x4ea77(%rip), %rdi     # 0x8c5d0
leaq 0x130(%rsp), %rsi
leaq 0x110(%rsp), %rdx
callq 0x4691c
leaq 0x110(%rsp), %rdi
callq 0x5120
leaq 0x130(%rsp), %rdi
callq 0x5120
leaq 0x1bd59(%rip), %rsi     # 0x598e8
leaq 0xf0(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
leaq 0x1cda8(%rip), %rsi     # 0x5a950
leaq 0xd0(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0xfa26
leaq 0x4ea0f(%rip), %rdi     # 0x8c5d0
leaq 0xf0(%rsp), %rsi
leaq 0xd0(%rsp), %rdx
callq 0x4691c
leaq 0xd0(%rsp), %rdi
callq 0x5120
leaq 0xf0(%rsp), %rdi
callq 0x5120
movq 0x8(%rbx), %rdi
callq 0x3de04
leaq 0x1cd56(%rip), %rsi     # 0x5a956
leaq 0xb0(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
pushq $0x48
popq %rdi
callq 0x5260
movq %rax, %r14
leaq 0x1b4eb(%rip), %rsi     # 0x5910f
leaq 0x90(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0xfa26
movb $0x1, %r15b
leaq 0x90(%rsp), %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x46ac6
xorl %r15d, %r15d
leaq 0x4e97b(%rip), %rdi     # 0x8c5d0
leaq 0xb0(%rsp), %rsi
movq %r14, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x46a38
leaq 0x90(%rsp), %rdi
callq 0x5120
leaq 0xb0(%rsp), %rdi
callq 0x5120
leaq 0x1ccd0(%rip), %rsi     # 0x5a95b
leaq 0x70(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
leaq 0x1ccaf(%rip), %rsi     # 0x5a950
leaq 0x50(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0xfa26
leaq 0x4e919(%rip), %rdi     # 0x8c5d0
leaq 0x70(%rsp), %rsi
leaq 0x50(%rsp), %rdx
callq 0x4691c
leaq 0x50(%rsp), %rdi
callq 0x5120
leaq 0x70(%rsp), %rdi
callq 0x5120
leaq 0x1cc82(%rip), %rsi     # 0x5a963
leaq 0x30(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0xfa26
leaq 0x1d848(%rip), %rsi     # 0x5b53f
leaq 0x10(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0xfa26
leaq 0x4e8c3(%rip), %rdi     # 0x8c5d0
leaq 0x30(%rsp), %rsi
leaq 0x10(%rsp), %rdx
callq 0x4691c
leaq 0x10(%rsp), %rdi
callq 0x5120
leaq 0x30(%rsp), %rdi
callq 0x5120
movb 0x4e9a2(%rip), %al      # 0x8c6d8
xorb $0x1, %al
addq $0x150, %rsp            # imm = 0x150
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x5120
jmp 0x3dd57
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
jmp 0x3ddf7
jmp 0x3ddca
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x5120
jmp 0x3dd75
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
jmp 0x3ddf7
jmp 0x3ddca
movq %rax, %rbx
jmp 0x3dde4
movq %rax, %rbx
jmp 0x3ddef
jmp 0x3ddca
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
callq 0x5120
jmp 0x3dd9f
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
jmp 0x3ddf7
jmp 0x3ddca
movq %rax, %rbx
leaq 0x110(%rsp), %rdi
callq 0x5120
jmp 0x3ddc0
movq %rax, %rbx
leaq 0x130(%rsp), %rdi
jmp 0x3ddf7
movq %rax, %rbx
jmp 0x3ddfc
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x5120
testb %r15b, %r15b
je 0x3ddef
pushq $0x48
popq %rsi
movq %r14, %rdi
callq 0x5270
leaq 0xb0(%rsp), %rdi
callq 0x5120
movq %rbx, %rdi
callq 0x53f0