// File: sighingnow[P]compile-pascal/pl0_tac_gen.cpp
// Function: pl0_tac_const_stmt(pl0_ast_const_stmt const*)
void pl0_tac_const_stmt(pl0_ast_const_stmt const *stmts) {
    cout << __func__;
    if (!stmts) { return; }
    for (auto && def: stmts->stmt) {
        string id = def->id->id;
        // validate.
        if (!scope.empty() && id == scope.back()) {
            pl0_ast_error(def->id->loc, string("duplicate identifier ") + "\"" + id + "\"");
        }
        else if (valtb.find(id, false) || vartb.find(id, false)) {
            pl0_ast_error(def->id->loc, string("redefinition of ") + "\"" + id + "\"");
        }
        else {
            valtb.push(constant(id, def->val->val, (def->val->dt == pl0_ast_constv::INT ? "integer" : "char"))); // update symbol table.
        }
    }
    cout << __func__;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x240, %rsp            # imm = 0x240
movq %rdi, -0x8(%rbp)
movq 0xafee2(%rip), %rdi     # 0x15efd8
leaq 0x42b32(%rip), %rsi     # 0xf1c2f
callq 0x5330
cmpq $0x0, -0x8(%rbp)
jne 0xaf10e
jmp 0xaf693
movq -0x8(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x341d0
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
callq 0x34200
movq %rax, -0x20(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0xbe550
testb $0x1, %al
jne 0xaf14a
jmp 0xaf680
leaq -0x18(%rbp), %rdi
callq 0xbe590
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rsi
addq $0x8, %rsi
leaq -0x48(%rbp), %rdi
callq 0x5150
leaq 0xb158a(%rip), %rdi     # 0x160700
callq 0xbe5b0
testb $0x1, %al
jne 0xaf320
leaq 0xb1576(%rip), %rdi     # 0x160700
callq 0xbe5f0
movq %rax, %rsi
leaq -0x48(%rbp), %rdi
callq 0x19db0
testb $0x1, %al
jne 0xaf1a4
jmp 0xaf320
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
leaq -0xd1(%rbp), %rdi
movq %rdi, -0x210(%rbp)
callq 0x55d0
movq -0x210(%rbp), %rdx
leaq 0x41ead(%rip), %rsi     # 0xf1084
leaq -0xd0(%rbp), %rdi
callq 0x19840
jmp 0xaf1e5
leaq 0x4252f(%rip), %rdx     # 0xf171b
leaq -0xb0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x1a380
jmp 0xaf201
leaq -0x90(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
leaq -0x48(%rbp), %rdx
callq 0x1a4d0
jmp 0xaf21a
leaq 0x424fa(%rip), %rdx     # 0xf171b
leaq -0x70(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x1a380
jmp 0xaf233
movq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0xae910
jmp 0xaf242
leaq -0x70(%rbp), %rdi
callq 0x5200
leaq -0x90(%rbp), %rdi
callq 0x5200
leaq -0xb0(%rbp), %rdi
callq 0x5200
leaq -0xd0(%rbp), %rdi
callq 0x5200
leaq -0xd1(%rbp), %rdi
callq 0x53c0
jmp 0xaf65e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
jmp 0xaf30f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
jmp 0xaf303
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
jmp 0xaf2f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
jmp 0xaf2eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x5200
leaq -0x90(%rbp), %rdi
callq 0x5200
leaq -0xb0(%rbp), %rdi
callq 0x5200
leaq -0xd0(%rbp), %rdi
callq 0x5200
leaq -0xd1(%rbp), %rdi
callq 0x53c0
jmp 0xaf675
leaq 0xb1421(%rip), %rdi     # 0x160748
leaq -0x48(%rbp), %rsi
xorl %edx, %edx
callq 0xbe630
movb %al, -0x211(%rbp)
jmp 0xaf33a
movb -0x211(%rbp), %al
testb $0x1, %al
jne 0xaf36f
jmp 0xaf346
leaq 0xb13cb(%rip), %rdi     # 0x160718
leaq -0x48(%rbp), %rsi
xorl %edx, %edx
callq 0xbe7c0
movb %al, -0x212(%rbp)
jmp 0xaf360
movb -0x212(%rbp), %al
testb $0x1, %al
jne 0xaf36f
jmp 0xaf514
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
movq %rax, -0xf0(%rbp)
leaq -0x171(%rbp), %rdi
movq %rdi, -0x220(%rbp)
callq 0x55d0
movq -0x220(%rbp), %rdx
leaq 0x41cf5(%rip), %rsi     # 0xf109a
leaq -0x170(%rbp), %rdi
callq 0x19840
jmp 0xaf3b3
leaq 0x42361(%rip), %rdx     # 0xf171b
leaq -0x150(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x1a380
jmp 0xaf3cf
leaq -0x130(%rbp), %rdi
leaq -0x150(%rbp), %rsi
leaq -0x48(%rbp), %rdx
callq 0x1a4d0
jmp 0xaf3e8
leaq 0x4232c(%rip), %rdx     # 0xf171b
leaq -0x110(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x1a380
jmp 0xaf404
movq -0xf0(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0xae910
jmp 0xaf419
leaq -0x110(%rbp), %rdi
callq 0x5200
leaq -0x130(%rbp), %rdi
callq 0x5200
leaq -0x150(%rbp), %rdi
callq 0x5200
leaq -0x170(%rbp), %rdi
callq 0x5200
leaq -0x171(%rbp), %rdi
callq 0x53c0
jmp 0xaf65c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
jmp 0xaf675
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
jmp 0xaf503
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
jmp 0xaf4f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
jmp 0xaf4eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
jmp 0xaf4df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x5200
leaq -0x130(%rbp), %rdi
callq 0x5200
leaq -0x150(%rbp), %rdi
callq 0x5200
leaq -0x170(%rbp), %rdi
callq 0x5200
leaq -0x171(%rbp), %rdi
callq 0x53c0
jmp 0xaf675
leaq -0x1e0(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x5150
jmp 0xaf526
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
movl 0x8(%rax), %ecx
movl %ecx, -0x234(%rbp)
movl 0xc(%rax), %eax
testl %eax, %eax
leaq 0x3fd01(%rip), %rcx     # 0xef247
leaq 0x40a32(%rip), %rax     # 0xeff7f
cmoveq %rcx, %rax
movq %rax, -0x230(%rbp)
leaq -0x201(%rbp), %rdi
movq %rdi, -0x228(%rbp)
callq 0x55d0
movq -0x230(%rbp), %rsi
movq -0x228(%rbp), %rdx
leaq -0x200(%rbp), %rdi
callq 0x19840
jmp 0xaf587
movl -0x234(%rbp), %edx
leaq -0x1c0(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
leaq -0x200(%rbp), %rcx
callq 0xa05e0
jmp 0xaf5a9
leaq 0xb1198(%rip), %rdi     # 0x160748
leaq -0x1c0(%rbp), %rsi
callq 0xbe950
jmp 0xaf5be
leaq -0x1c0(%rbp), %rdi
callq 0xbe980
leaq -0x200(%rbp), %rdi
callq 0x5200
leaq -0x201(%rbp), %rdi
callq 0x53c0
leaq -0x1e0(%rbp), %rdi
callq 0x5200
jmp 0xaf65c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
jmp 0xaf642
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
jmp 0xaf636
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe0(%rbp)
movl %eax, -0xe4(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0xbe980
leaq -0x200(%rbp), %rdi
callq 0x5200
leaq -0x201(%rbp), %rdi
callq 0x53c0
leaq -0x1e0(%rbp), %rdi
callq 0x5200
jmp 0xaf675
jmp 0xaf65e
leaq -0x48(%rbp), %rdi
callq 0x5200
leaq -0x18(%rbp), %rdi
callq 0xbe9b0
jmp 0xaf134
leaq -0x48(%rbp), %rdi
callq 0x5200
jmp 0xaf69c
movq 0xaf951(%rip), %rdi     # 0x15efd8
leaq 0x425a1(%rip), %rsi     # 0xf1c2f
callq 0x5330
addq $0x240, %rsp            # imm = 0x240
popq %rbp
retq
movq -0xe0(%rbp), %rdi
callq 0x55b0
nopl (%rax,%rax)