// File: sighingnow[P]compile-pascal/pl0_ast.cpp
// Function: TAC::str[abi:cxx11]() const
std::string TAC::str() const {
    if (op == "call") {
        std::string s = "call " + rd->sv + " (";
        for (auto && a: args) {
            s = s + a.first->str() + (a.second ? " ref, ": ", ");
        }
        s = s + ") " + (rt ? (" -> " + rt->sv) : "");
        return s;
    }
    else{
        return op + " " + (rd ? rd->str() : "") + " " + (rs ? rs->str() : "") + " " + (rt ? rt->str() : "");
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x290, %rsp            # imm = 0x290
movq %rdi, -0x260(%rbp)
movq %rdi, %rax
movq %rax, -0x258(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x250(%rbp)
leaq 0x50705(%rip), %rsi     # 0xf01ab
callq 0x2a580
testb $0x1, %al
jne 0x9fab4
jmp 0x9fddd
movq -0x250(%rbp), %rax
movb $0x0, -0x11(%rbp)
movq 0x20(%rax), %rdx
addq $0x8, %rdx
leaq 0x51dd0(%rip), %rsi     # 0xf189e
leaq -0x38(%rbp), %rdi
movq %rdi, -0x268(%rbp)
callq 0x19ef0
movq -0x260(%rbp), %rdi
movq -0x268(%rbp), %rsi
leaq 0x506bd(%rip), %rdx     # 0xf01b0
callq 0x1a380
jmp 0x9fafa
leaq -0x38(%rbp), %rdi
callq 0x5200
movq -0x250(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rdi
callq 0xa3a40
movq %rax, -0x58(%rbp)
movq -0x50(%rbp), %rdi
callq 0xa3a70
movq %rax, -0x60(%rbp)
leaq -0x58(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0xa3aa0
testb $0x1, %al
jne 0x9fb42
jmp 0x9fc58
leaq -0x58(%rbp), %rdi
callq 0xa3ae0
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
movq (%rax), %rsi
leaq -0xc8(%rbp), %rdi
callq 0x9f9b0
jmp 0x9fb64
movq -0x260(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
leaq -0xc8(%rbp), %rdx
callq 0xa3b00
jmp 0x9fb80
movq -0x68(%rbp), %rax
movb 0x8(%rax), %cl
leaq 0x50625(%rip), %rax     # 0xf01b3
leaq 0x51930(%rip), %rdx     # 0xf14c5
testb $0x1, %cl
cmovneq %rax, %rdx
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x1a380
jmp 0x9fbb1
movq -0x260(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x5420
leaq -0x88(%rbp), %rdi
callq 0x5200
leaq -0xa8(%rbp), %rdi
callq 0x5200
leaq -0xc8(%rbp), %rdi
callq 0x5200
leaq -0x58(%rbp), %rdi
callq 0xa3b80
jmp 0x9fb2c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x5200
jmp 0xa01d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9fdcc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9fc47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x5200
leaq -0xc8(%rbp), %rdi
callq 0x5200
jmp 0x9fdcc
movq -0x260(%rbp), %rsi
leaq 0x50554(%rip), %rdx     # 0xf01ba
leaq -0x108(%rbp), %rdi
callq 0x458c0
jmp 0x9fc74
movq -0x250(%rbp), %rax
movq 0x30(%rax), %rax
movb $0x0, -0x12a(%rbp)
cmpq $0x0, %rax
je 0x9fcb2
movq -0x250(%rbp), %rax
movq 0x30(%rax), %rdx
addq $0x8, %rdx
leaq 0x5051b(%rip), %rsi     # 0xf01bd
leaq -0x128(%rbp), %rdi
callq 0x19ef0
jmp 0x9fcb0
jmp 0x9fcea
leaq -0x129(%rbp), %rdi
movq %rdi, -0x270(%rbp)
callq 0x55d0
movq -0x270(%rbp), %rdx
movb $0x1, -0x12a(%rbp)
leaq 0x51f55(%rip), %rsi     # 0xf1c2f
leaq -0x128(%rbp), %rdi
callq 0x19840
jmp 0x9fce8
jmp 0x9fcea
leaq -0xe8(%rbp), %rdi
leaq -0x108(%rbp), %rsi
leaq -0x128(%rbp), %rdx
callq 0x1a3d0
jmp 0x9fd06
movq -0x260(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x5420
leaq -0xe8(%rbp), %rdi
callq 0x5200
leaq -0x128(%rbp), %rdi
callq 0x5200
testb $0x1, -0x12a(%rbp)
jne 0x9fd3c
jmp 0x9fd48
leaq -0x129(%rbp), %rdi
callq 0x53c0
leaq -0x108(%rbp), %rdi
callq 0x5200
movb $0x1, -0x11(%rbp)
testb $0x1, -0x11(%rbp)
jne 0x9fdc7
jmp 0x9fdbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9fdad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x9fd94
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x5200
testb $0x1, -0x12a(%rbp)
jne 0x9fd9f
jmp 0x9fdab
leaq -0x129(%rbp), %rdi
callq 0x53c0
jmp 0x9fdad
leaq -0x108(%rbp), %rdi
callq 0x5200
jmp 0x9fdcc
movq -0x260(%rbp), %rdi
callq 0x5200
jmp 0xa01c5
movq -0x260(%rbp), %rdi
callq 0x5200
jmp 0xa01d5
movq -0x250(%rbp), %rsi
leaq -0x1d0(%rbp), %rdi
leaq 0x51c3c(%rip), %rdx     # 0xf1a2e
callq 0x458c0
movq -0x250(%rbp), %rax
movq 0x20(%rax), %rax
movb $0x0, -0x1f2(%rbp)
cmpq $0x0, %rax
je 0x9fe2a
movq -0x250(%rbp), %rax
movq 0x20(%rax), %rsi
leaq -0x1f0(%rbp), %rdi
callq 0x9f9b0
jmp 0x9fe28
jmp 0x9fe62
leaq -0x1f1(%rbp), %rdi
movq %rdi, -0x278(%rbp)
callq 0x55d0
movq -0x278(%rbp), %rdx
movb $0x1, -0x1f2(%rbp)
leaq 0x51ddd(%rip), %rsi     # 0xf1c2f
leaq -0x1f0(%rbp), %rdi
callq 0x19840
jmp 0x9fe60
jmp 0x9fe62
leaq -0x1b0(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
leaq -0x1f0(%rbp), %rdx
callq 0x1a4d0
jmp 0x9fe7e
leaq 0x51ba9(%rip), %rdx     # 0xf1a2e
leaq -0x190(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x1a380
jmp 0x9fe9a
movq -0x250(%rbp), %rax
movq 0x28(%rax), %rax
movb $0x0, -0x21a(%rbp)
cmpq $0x0, %rax
je 0x9fecd
movq -0x250(%rbp), %rax
movq 0x28(%rax), %rsi
leaq -0x218(%rbp), %rdi
callq 0x9f9b0
jmp 0x9fecb
jmp 0x9ff05
leaq -0x219(%rbp), %rdi
movq %rdi, -0x280(%rbp)
callq 0x55d0
movq -0x280(%rbp), %rdx
movb $0x1, -0x21a(%rbp)
leaq 0x51d3a(%rip), %rsi     # 0xf1c2f
leaq -0x218(%rbp), %rdi
callq 0x19840
jmp 0x9ff03
jmp 0x9ff05
leaq -0x170(%rbp), %rdi
leaq -0x190(%rbp), %rsi
leaq -0x218(%rbp), %rdx
callq 0x1a4d0
jmp 0x9ff21
leaq 0x51b06(%rip), %rdx     # 0xf1a2e
leaq -0x150(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x1a380
jmp 0x9ff3d
movq -0x250(%rbp), %rax
movq 0x30(%rax), %rax
movb $0x0, -0x242(%rbp)
cmpq $0x0, %rax
je 0x9ff70
movq -0x250(%rbp), %rax
movq 0x30(%rax), %rsi
leaq -0x240(%rbp), %rdi
callq 0x9f9b0
jmp 0x9ff6e
jmp 0x9ffa8
leaq -0x241(%rbp), %rdi
movq %rdi, -0x288(%rbp)
callq 0x55d0
movq -0x288(%rbp), %rdx
movb $0x1, -0x242(%rbp)
leaq 0x51c97(%rip), %rsi     # 0xf1c2f
leaq -0x240(%rbp), %rdi
callq 0x19840
jmp 0x9ffa6
jmp 0x9ffa8
movq -0x260(%rbp), %rdi
leaq -0x150(%rbp), %rsi
leaq -0x240(%rbp), %rdx
callq 0x1a4d0
jmp 0x9ffc4
leaq -0x240(%rbp), %rdi
callq 0x5200
testb $0x1, -0x242(%rbp)
jne 0x9ffdb
jmp 0x9ffe7
leaq -0x241(%rbp), %rdi
callq 0x53c0
leaq -0x150(%rbp), %rdi
callq 0x5200
leaq -0x170(%rbp), %rdi
callq 0x5200
leaq -0x218(%rbp), %rdi
callq 0x5200
testb $0x1, -0x21a(%rbp)
jne 0xa0016
jmp 0xa0022
leaq -0x219(%rbp), %rdi
callq 0x53c0
leaq -0x190(%rbp), %rdi
callq 0x5200
leaq -0x1b0(%rbp), %rdi
callq 0x5200
leaq -0x1f0(%rbp), %rdi
callq 0x5200
testb $0x1, -0x1f2(%rbp)
jne 0xa0051
jmp 0xa005d
leaq -0x1f1(%rbp), %rdi
callq 0x53c0
leaq -0x1d0(%rbp), %rdi
callq 0x5200
jmp 0xa01c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa01b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa019e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa0192
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa0186
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa017a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa0161
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa0155
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa0149
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa013d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xa0124
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x5200
testb $0x1, -0x242(%rbp)
jne 0xa012f
jmp 0xa013b
leaq -0x241(%rbp), %rdi
callq 0x53c0
jmp 0xa013d
leaq -0x150(%rbp), %rdi
callq 0x5200
leaq -0x170(%rbp), %rdi
callq 0x5200
leaq -0x218(%rbp), %rdi
callq 0x5200
testb $0x1, -0x21a(%rbp)
jne 0xa016c
jmp 0xa0178
leaq -0x219(%rbp), %rdi
callq 0x53c0
jmp 0xa017a
leaq -0x190(%rbp), %rdi
callq 0x5200
leaq -0x1b0(%rbp), %rdi
callq 0x5200
leaq -0x1f0(%rbp), %rdi
callq 0x5200
testb $0x1, -0x1f2(%rbp)
jne 0xa01a9
jmp 0xa01b5
leaq -0x1f1(%rbp), %rdi
callq 0x53c0
jmp 0xa01b7
leaq -0x1d0(%rbp), %rdi
callq 0x5200
jmp 0xa01d5
movq -0x258(%rbp), %rax
addq $0x290, %rsp            # imm = 0x290
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x55b0
nop