// File: CobaltXII[P]cxcc/./compiler/compiler.hpp
// Function: compiler_t::aligned_offset_statement(statement_t*, symbol_table_t&, long&)
void aligned_offset_statement(statement_t* statement, symbol_table_t& symbols, long& lowest_offset) {
		if (statement->type == st_compound) {
			compound_statement_t stmt = statement->compound_stmt;
			symbol_table_t new_symbols(&symbols);
			for (int i = 0; i < stmt.statements.size(); i++) {
				aligned_offset_statement(stmt.statements[i], new_symbols, lowest_offset);
			}
		} else if (statement->type == st_conditional) {
			conditional_statement_t stmt = statement->conditional_stmt;
			symbol_table_t new_symbols(&symbols);
			aligned_offset_statement(stmt.body, new_symbols, lowest_offset);
		} else if (statement->type == st_while) {
			while_statement_t stmt = statement->while_stmt;
			symbol_table_t new_symbols(&symbols);
			aligned_offset_statement(stmt.body, new_symbols, lowest_offset);
		} else if (statement->type == st_variable_declaration) {
			variable_declaration_statement_t stmt = statement->variable_declaration_stmt;
			symbols.add_symbol(symbol_t(stmt.type, stmt.identifier, symbols.offset -= 8));
			if (symbols.offset < lowest_offset) {
				lowest_offset = symbols.offset;
			}
		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x200, %rsp            # imm = 0x200
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x1e0(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x24fef
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
leaq -0x38(%rbp), %rdi
callq 0x1d5f0
movq -0x18(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0x191a0
jmp 0x24f33
movl $0x0, -0x88(%rbp)
movslq -0x88(%rbp), %rax
movq %rax, -0x1e8(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x10c30
movq %rax, %rcx
movq -0x1e8(%rbp), %rax
cmpq %rcx, %rax
jae 0x24fca
movslq -0x88(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x1c130
movq -0x1e0(%rbp), %rdi
movq (%rax), %rsi
movq -0x20(%rbp), %rcx
leaq -0x78(%rbp), %rdx
callq 0x24ee0
jmp 0x24f8c
jmp 0x24f8e
movl -0x88(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x88(%rbp)
jmp 0x24f3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x24fe1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x19c10
jmp 0x24fe1
leaq -0x78(%rbp), %rdi
callq 0x19c10
leaq -0x38(%rbp), %rdi
callq 0x110f0
jmp 0x25226
leaq -0x38(%rbp), %rdi
callq 0x110f0
jmp 0x2522f
movq -0x10(%rbp), %rax
cmpl $0x1, (%rax)
jne 0x2506f
movq -0x10(%rbp), %rax
movups 0x20(%rax), %xmm0
movaps %xmm0, -0xa0(%rbp)
movq -0x18(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
movq %rdi, -0x1f0(%rbp)
callq 0x191a0
movq -0x1e0(%rbp), %rdi
movq -0x1f0(%rbp), %rdx
movq -0x98(%rbp), %rsi
movq -0x20(%rbp), %rcx
callq 0x24ee0
jmp 0x2503e
leaq -0xe0(%rbp), %rdi
callq 0x19c10
jmp 0x25224
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x19c10
jmp 0x2522f
movq -0x10(%rbp), %rax
cmpl $0x2, (%rax)
jne 0x250ef
movq -0x10(%rbp), %rax
movups 0x30(%rax), %xmm0
movaps %xmm0, -0xf0(%rbp)
movq -0x18(%rbp), %rsi
leaq -0x130(%rbp), %rdi
movq %rdi, -0x1f8(%rbp)
callq 0x191a0
movq -0x1e0(%rbp), %rdi
movq -0x1f8(%rbp), %rdx
movq -0xe8(%rbp), %rsi
movq -0x20(%rbp), %rcx
callq 0x24ee0
jmp 0x250be
leaq -0x130(%rbp), %rdi
callq 0x19c10
jmp 0x25222
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x19c10
jmp 0x2522f
movq -0x10(%rbp), %rax
cmpl $0x4, (%rax)
jne 0x25220
movq -0x10(%rbp), %rsi
addq $0x48, %rsi
leaq -0x160(%rbp), %rdi
callq 0x209e0
movq -0x18(%rbp), %rax
movq %rax, -0x200(%rbp)
movq -0x160(%rbp), %rax
movq %rax, -0x1b8(%rbp)
leaq -0x158(%rbp), %rsi
leaq -0x1d8(%rbp), %rdi
callq 0x3130
jmp 0x2513e
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rcx
addq $-0x8, %rcx
movq %rcx, 0x28(%rax)
movq -0x1b8(%rbp), %rsi
leaq -0x1b0(%rbp), %rdi
leaq -0x1d8(%rbp), %rdx
callq 0x24810
jmp 0x2516a
movq -0x200(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x19230
jmp 0x2517f
leaq -0x1b0(%rbp), %rdi
callq 0x193b0
leaq -0x1d8(%rbp), %rdi
callq 0x31c0
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq (%rcx), %rax
jge 0x25204
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
jmp 0x25204
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x25212
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x251f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x193b0
leaq -0x1d8(%rbp), %rdi
callq 0x31c0
jmp 0x25212
leaq -0x160(%rbp), %rdi
callq 0x112c0
jmp 0x25220
leaq -0x160(%rbp), %rdi
callq 0x112c0
jmp 0x2522f
jmp 0x25222
jmp 0x25224
jmp 0x25226
addq $0x200, %rsp            # imm = 0x200
popq %rbp
retq
movq -0x80(%rbp), %rdi
callq 0x34c0
nopl (%rax,%rax)