// File: SunriseFox[P]very-simple-c-compiler/./src/asm.cpp
// Function: handleFor(StatementNode*)
void handleFor(StatementNode* node) {
    TreeNode* st1 = node->child;
    TreeNode* st2 = st1->sibling;
    TreeNode* st3 = st2->sibling;
    TreeNode* st4 = st3->sibling;

    handleExprNode(st1);
    string LFor = getNextLabel();
    string LCondition = getNextLabel();
    of << "\tjmp\t" << LCondition << "\n";

    of << LFor << ":\n";
    handleCodeBlock(st4);
    handleExprNode(st3);

    of << LCondition << ":\n";
    string reg = handleExprNode(st2);
    of << "\ttestl\t" << reg << ", " << reg << "\n";
    of << "\tje\t" << LFor << "\n";
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x48(%rbp), %rdi
movq %rdi, -0xe0(%rbp)
callq 0x5fd0
movq -0xe0(%rbp), %rdi
callq 0x3180
leaq -0x68(%rbp), %rdi
callq 0x4db0
leaq -0x88(%rbp), %rdi
callq 0x4db0
jmp 0x7d66
leaq 0x19583(%rip), %rdi     # 0x212f0
leaq 0xf612(%rip), %rsi      # 0x17386
callq 0x3240
movq %rax, -0xe8(%rbp)
jmp 0x7d82
movq -0xe8(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3230
movq %rax, -0xf0(%rbp)
jmp 0x7d9e
movq -0xf0(%rbp), %rdi
leaq 0xf738(%rip), %rsi      # 0x174e4
callq 0x3240
jmp 0x7db3
leaq 0x19536(%rip), %rdi     # 0x212f0
leaq -0x68(%rbp), %rsi
callq 0x3230
movq %rax, -0xf8(%rbp)
jmp 0x7dcc
movq -0xf8(%rbp), %rdi
leaq 0xf5b2(%rip), %rsi      # 0x1738c
callq 0x3240
jmp 0x7de1
movq -0x28(%rbp), %rdi
callq 0x52f0
jmp 0x7dec
movq -0x20(%rbp), %rsi
leaq -0xb8(%rbp), %rdi
callq 0x5fd0
jmp 0x7dfe
leaq -0xb8(%rbp), %rdi
callq 0x3180
leaq 0x194df(%rip), %rdi     # 0x212f0
leaq -0x88(%rbp), %rsi
callq 0x3230
movq %rax, -0x100(%rbp)
jmp 0x7e26
movq -0x100(%rbp), %rdi
leaq 0xf558(%rip), %rsi      # 0x1738c
callq 0x3240
jmp 0x7e3b
movq -0x18(%rbp), %rsi
leaq -0xd8(%rbp), %rdi
callq 0x5fd0
jmp 0x7e4d
leaq 0x1949c(%rip), %rdi     # 0x212f0
leaq 0xf4fc(%rip), %rsi      # 0x17357
callq 0x3240
movq %rax, -0x108(%rbp)
jmp 0x7e69
movq -0x108(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x3230
movq %rax, -0x110(%rbp)
jmp 0x7e85
movq -0x110(%rbp), %rdi
leaq 0xf504(%rip), %rsi      # 0x17397
callq 0x3240
movq %rax, -0x118(%rbp)
jmp 0x7ea1
movq -0x118(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x3230
movq %rax, -0x120(%rbp)
jmp 0x7ebd
movq -0x120(%rbp), %rdi
leaq 0xf619(%rip), %rsi      # 0x174e4
callq 0x3240
jmp 0x7ed2
leaq 0x19417(%rip), %rdi     # 0x212f0
leaq 0xf496(%rip), %rsi      # 0x17376
callq 0x3240
movq %rax, -0x128(%rbp)
jmp 0x7eee
movq -0x128(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x3230
movq %rax, -0x130(%rbp)
jmp 0x7f07
movq -0x130(%rbp), %rdi
leaq 0xf5cf(%rip), %rsi      # 0x174e4
callq 0x3240
jmp 0x7f1c
leaq -0xd8(%rbp), %rdi
callq 0x3180
leaq -0x88(%rbp), %rdi
callq 0x3180
leaq -0x68(%rbp), %rdi
callq 0x3180
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x7f98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0x7f8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x3180
leaq -0x88(%rbp), %rdi
callq 0x3180
leaq -0x68(%rbp), %rdi
callq 0x3180
movq -0x90(%rbp), %rdi
callq 0x3480
nopl (%rax)