// File: /workspace/github_cpp_makefile_star2_O1/sighingnow[P]compile-pascal/pl0_tac_gen.cpp
// Function: pl0_tac_stmt(pl0_ast_stmt const*)
void pl0_tac_stmt(pl0_ast_stmt const *stmt) {
    cout << __func__;
    if (stmt == nullptr) { return; } // check if null pointer.
    switch (stmt->t) {
        case pl0_ast_stmt::type_t::ASSIGN_STMT: pl0_tac_assign_stmt(dynamic_cast<pl0_ast_assign_stmt const *>(stmt)); break;
        case pl0_ast_stmt::type_t::COND_STMT: pl0_tac_cond_stmt(dynamic_cast<pl0_ast_cond_stmt const *>(stmt)); break;
        case pl0_ast_stmt::type_t::CASE_STMT: pl0_tac_case_stmt(dynamic_cast<pl0_ast_case_stmt const *>(stmt)); break;
        case pl0_ast_stmt::type_t::CALL_PROC: pl0_tac_call_proc(dynamic_cast<pl0_ast_call_proc const *>(stmt)); break;
        case pl0_ast_stmt::type_t::COMPOUND_STMT: pl0_tac_compound_stmt(dynamic_cast<pl0_ast_compound_stmt const *>(stmt)); break;
        case pl0_ast_stmt::type_t::WRITE_STMT: pl0_tac_write_stmt(dynamic_cast<pl0_ast_write_stmt const *>(stmt)); break;
        case pl0_ast_stmt::type_t::READ_STMT: pl0_tac_read_stmt(dynamic_cast<pl0_ast_read_stmt const *>(stmt)); break;
        case pl0_ast_stmt::type_t::FOR_STMT: pl0_tac_for_stmt(dynamic_cast<pl0_ast_for_stmt const *>(stmt)); break;
        case pl0_ast_stmt::type_t::NULL_STMT: pl0_tac_null_stmt(dynamic_cast<pl0_ast_null_stmt const *>(stmt)); break;
        default: cout << "UNIMPLEMENT STMT TYPE" << endl;
    }
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x5008e(%rip), %r14     # 0xbffd8
leaq 0x295be(%rip), %rsi     # 0x9950f
movq %r14, %rdi
xorl %edx, %edx
callq 0x52e0
testq %rbx, %rbx
je 0x6ffa5
movl 0x10(%rbx), %eax
decl %eax
cmpl $0x8, %eax
ja 0x700da
leaq 0x28973(%rip), %rcx     # 0x988e8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x4f21b(%rip), %rsi     # 0xbf1a0
leaq 0x4f27c(%rip), %rdx     # 0xbf208
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x52d0
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x7011c
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x4f1ec(%rip), %rsi     # 0xbf1a0
leaq 0x4f365(%rip), %rdx     # 0xbf320
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x52d0
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x6f113
leaq 0x4f1c5(%rip), %rsi     # 0xbf1a0
leaq 0x4f296(%rip), %rdx     # 0xbf278
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x52d0
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x7279a
leaq 0x4f19e(%rip), %rsi     # 0xbf1a0
leaq 0x4f2df(%rip), %rdx     # 0xbf2e8
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x52d0
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x73821
leaq 0x4f177(%rip), %rsi     # 0xbf1a0
leaq 0x4f280(%rip), %rdx     # 0xbf2b0
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x52d0
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x752a4
leaq 0x4f150(%rip), %rsi     # 0xbf1a0
leaq 0x4f1e9(%rip), %rdx     # 0xbf240
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x52d0
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x71146
leaq 0x4f129(%rip), %rsi     # 0xbf1a0
leaq 0x4f312(%rip), %rdx     # 0xbf390
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x52d0
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x74200
leaq 0x4f102(%rip), %rsi     # 0xbf1a0
leaq 0x4f2b3(%rip), %rdx     # 0xbf358
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x52d0
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x748d1
movq 0x4ff13(%rip), %rdi     # 0xbffd8
leaq 0x29443(%rip), %rsi     # 0x9950f
xorl %edx, %edx
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x52e0
leaq 0x28900(%rip), %rsi     # 0x989e1
movl $0x15, %edx
movq %r14, %rdi
callq 0x52e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x5240
movsbl %al, %esi
movq %r14, %rdi
callq 0x5030
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x5190