// File: /workspace/github_cpp_makefile_star2_O3/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 0x53fce(%rip), %rdi     # 0xb9fd8
leaq 0x2d4fe(%rip), %r14     # 0x9350f
movq %r14, %rsi
xorl %edx, %edx
callq 0x52e0
leaq 0x130(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2b7fa(%rip), %rsi     # 0x91828
leaq 0x2b7fa(%rip), %rdx     # 0x9182f
leaq 0x120(%rsp), %rdi
callq 0x253d0
leaq 0x90(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x80(%rsp), %rdi
movq %r14, %rsi
movq %r14, %rdx
callq 0x253d0
leaq 0x5553f(%rip), %rdi     # 0xbb5a8
leaq 0x120(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x75a1c
movq 0x80(%rsp), %rdi
cmpq %r12, %rdi
je 0x6609b
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x120(%rsp), %rdi
cmpq %r15, %rdi
je 0x660b8
movq 0x130(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0x110(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2b802(%rip), %rsi     # 0x918cd
leaq 0x2b804(%rip), %rdx     # 0x918d6
leaq 0x100(%rsp), %rdi
callq 0x253d0
leaq 0x70(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2c841(%rip), %rsi     # 0x92930
leaq 0x2c83f(%rip), %rdx     # 0x92935
leaq 0x60(%rsp), %rdi
callq 0x253d0
leaq 0x554a1(%rip), %rdi     # 0xbb5a8
leaq 0x100(%rsp), %rsi
leaq 0x60(%rsp), %rdx
callq 0x75a1c
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x66130
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x100(%rsp), %rdi
cmpq %r15, %rdi
je 0x6614d
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0x8(%rbx), %rdi
callq 0x66453
leaq 0xf0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2c7cd(%rip), %rsi     # 0x92936
leaq 0x2c7ca(%rip), %rdx     # 0x9293a
leaq 0xe0(%rsp), %rdi
callq 0x253d0
movl $0x48, %edi
callq 0x5250
movq %rax, %r14
leaq 0x50(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x2af74(%rip), %rsi     # 0x9110f
leaq 0x2af74(%rip), %rdx     # 0x91116
leaq 0x40(%rsp), %rdi
callq 0x253d0
movb $0x1, %r13b
leaq 0x40(%rsp), %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x75d42
xorl %r13d, %r13d
leaq 0x553e0(%rip), %rdi     # 0xbb5a8
leaq 0xe0(%rsp), %rsi
movq %r14, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x75c2c
movq 0x40(%rsp), %rdi
cmpq %r12, %rdi
je 0x661f4
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xe0(%rsp), %rdi
cmpq %r15, %rdi
je 0x66211
movq 0xf0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xd0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2c717(%rip), %rsi     # 0x9293b
leaq 0x2c717(%rip), %rdx     # 0x92942
leaq 0xc0(%rsp), %rdi
callq 0x253d0
leaq 0x30(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2c6e8(%rip), %rsi     # 0x92930
leaq 0x2c6e6(%rip), %rdx     # 0x92935
leaq 0x20(%rsp), %rdi
callq 0x253d0
leaq 0x55348(%rip), %rdi     # 0xbb5a8
leaq 0xc0(%rsp), %rsi
leaq 0x20(%rsp), %rdx
callq 0x75a1c
movq 0x20(%rsp), %rdi
cmpq %r14, %rdi
je 0x66289
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xc0(%rsp), %rdi
cmpq %r15, %rdi
je 0x662a6
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x5260
leaq 0xb0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2c68a(%rip), %rsi     # 0x92943
leaq 0x2c68d(%rip), %rdx     # 0x9294d
leaq 0xa0(%rsp), %rdi
callq 0x253d0
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2d232(%rip), %rdx     # 0x9350f
movq %rsp, %rdi
movq %rdx, %rsi
callq 0x253d0
leaq 0x552b9(%rip), %rdi     # 0xbb5a8
leaq 0xa0(%rsp), %rsi
movq %rsp, %rdx
callq 0x75a1c
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x66315
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
movq 0xa0(%rsp), %rdi
cmpq %r15, %rdi
je 0x66332
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x5260
movb 0x55378(%rip), %al      # 0xbb6b0
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 0x66369
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x66369
movq %rax, %rbx
movq 0xa0(%rsp), %rdi
jmp 0x6643b
movq %rax, %rbx
movq 0x20(%rsp), %rdi
cmpq %r14, %rdi
je 0x66395
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x66395
movq %rax, %rbx
movq 0xc0(%rsp), %rdi
jmp 0x6643b
movq %rax, %rbx
jmp 0x66426
movq %rax, %rbx
jmp 0x66433
movq %rax, %rbx
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x663ce
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x663ce
movq %rax, %rbx
movq 0x100(%rsp), %rdi
jmp 0x6643b
movq %rax, %rbx
movq 0x80(%rsp), %rdi
cmpq %r12, %rdi
je 0x663fd
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x5260
jmp 0x663fd
movq %rax, %rbx
movq 0x120(%rsp), %rdi
jmp 0x6643b
movq %rax, %rbx
movq 0x40(%rsp), %rdi
cmpq %r12, %rdi
je 0x66421
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x5260
testb %r13b, %r13b
je 0x66433
movl $0x48, %esi
movq %r14, %rdi
callq 0x5260
movq 0xe0(%rsp), %rdi
cmpq %r15, %rdi
je 0x6644b
movq (%r15), %rsi
incq %rsi
callq 0x5260
movq %rbx, %rdi
callq 0x53d0