// File: /workspace/github_cpp_makefile_star2_O3/iamlouk[P]asbi/src/ast.cc
// Function: ast::For::to_vmops(asbi::Context*, std::vector<asbi::OpCode, std::allocator<asbi::OpCode>>&) const
void For::to_vmops(Context* ctx, std::vector<OpCode> &ops) const {
	if (init) {
		init->to_vmops(ctx, ops);
		ops.push_back(OpCode::POP);
	}

	auto pos1 = ops.size();
	cond->to_vmops(ctx, ops);
	ops.push_back(OpCode::IF_FALSE_GOTO);
	ops.push_back(OpCode::NOOP);
	auto pos2 = ops.size() - 1;

	ops.push_back(OpCode::ENTER_SCOPE);
	body->to_vmops(ctx, ops);
	ops.push_back(OpCode::LEAVE_SCOPE);
	ops.push_back(OpCode::POP);

	if (inc) {
		inc->to_vmops(ctx, ops);
		ops.push_back(OpCode::POP);
	}

	ops.push_back(OpCode::GOTO);
	ops.push_back(static_cast<OpCode>(pos1));
	*(ops.data() + pos2) = static_cast<OpCode>(ops.size());
	ops.push_back(OpCode::PUSH_NIL);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq 0x8(%rdi), %rdi
testq %rdi, %rdi
je 0xe4b6
movq (%rdi), %rax
movq %r14, %rsi
movq %rbx, %rdx
callq *0x18(%rax)
movq $0x9, 0x8(%rsp)
movq 0x8(%rbx), %rsi
cmpq 0x10(%rbx), %rsi
je 0xe4a9
movq $0x9, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rbx)
jmp 0xe4b6
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0xed48
movq 0x8(%rbx), %r12
subq (%rbx), %r12
movq 0x10(%r15), %rdi
movq (%rdi), %rax
movq %r14, %rsi
movq %rbx, %rdx
callq *0x18(%rax)
movq $0x22, 0x8(%rsp)
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rax
cmpq %rax, %rsi
je 0xe4f4
movq $0x22, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rbx)
jmp 0xe509
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0xed48
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rax
movq $0x23, 0x8(%rsp)
cmpq %rax, %rsi
je 0xe528
movq $0x23, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rbx)
jmp 0xe53d
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0xed48
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rax
movq %rsi, %r13
subq (%rbx), %r13
movq $0xa, 0x8(%rsp)
cmpq %rax, %rsi
je 0xe562
movq $0xa, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rbx)
jmp 0xe56f
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0xed48
movq 0x20(%r15), %rdi
movq (%rdi), %rax
movq %r14, %rsi
movq %rbx, %rdx
callq *0x18(%rax)
movq $0xb, 0x8(%rsp)
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rax
cmpq %rax, %rsi
je 0xe5a6
movq $0xb, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rbx)
jmp 0xe5bb
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0xed48
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rax
movq $0x9, 0x8(%rsp)
cmpq %rax, %rsi
je 0xe5da
movq $0x9, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rbx)
jmp 0xe5e7
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0xed48
movq 0x18(%r15), %rdi
testq %rdi, %rdi
je 0xe62d
movq (%rdi), %rax
movq %r14, %rsi
movq %rbx, %rdx
callq *0x18(%rax)
movq $0x9, 0x8(%rsp)
movq 0x8(%rbx), %rsi
cmpq 0x10(%rbx), %rsi
je 0xe620
movq $0x9, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rbx)
jmp 0xe62d
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0xed48
sarq $0x3, %r12
movq $0x20, 0x8(%rsp)
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rax
cmpq %rax, %rsi
je 0xe658
movq $0x20, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rbx)
jmp 0xe66d
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0xed48
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rax
movq %r12, 0x8(%rsp)
cmpq %rax, %rsi
je 0xe684
movq %r12, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rbx)
jmp 0xe699
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0xed48
movq 0x8(%rbx), %rsi
movq 0x10(%rbx), %rax
movq (%rbx), %rcx
movq %rsi, %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
movq %rdx, -0x8(%rcx,%r13)
movq $0x4, 0x8(%rsp)
cmpq %rax, %rsi
je 0xe6ca
movq $0x4, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rbx)
jmp 0xe6d7
leaq 0x8(%rsp), %rdx
movq %rbx, %rdi
callq 0xed48
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
nop