// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/irgen_c.c
// Function: ir_var
static void _ir_var(IRGeneratorCContext *ctx, ParserASTNode *node) {
	assert(ctx);
	assert(node);
	assert(node->type == FE_NODE_VAR);
	assert(node->nchilds > 0);

	int align = FE_VAR_AST_NODE_GET_ALIGN(node);

	for (int i = 0; i < node->nchilds; i++) {
		ParserASTNode *node_var_item = node->childs[i];
		assert(node_var_item->type == FE_NODE_VAR_ITEM);
		assert(node_var_item->nchilds == 2 || node_var_item->nchilds == 3);

		ParserASTNode *node_identifier = node_var_item->childs[0];
		assert(node_identifier->type == FE_NODE_IDENTIFIER);
		ParserASTNode *node_type = node_var_item->childs[1];

		ResizableString rstr_type;
		rstr_init(&rstr_type);

		if (node_var_item->nchilds == 2) {
			rstr_append_with_raw(&rstr_type, node_identifier->token->content, node_identifier->token->len);

			_ir_type(ctx, &rstr_type, node_type);

			if (align > 0) {
				rstr_prependf(&rstr_type, "__attribute__((aligned(%d)))", align);
			}

			_OUT_STR(ctx, rstr_type.buffer, rstr_type.len);
		} else {
			ParserASTNode *node_expr = node_var_item->childs[2];
			
			rstr_append_with_raw(&rstr_type, node_identifier->token->content, node_identifier->token->len);

			_ir_type(ctx, &rstr_type, node_type);

			if (align > 0) {
				rstr_prependf(&rstr_type, "__attribute__((aligned(%d)))", align);
			}

			_OUT_STR(ctx, rstr_type.buffer, rstr_type.len);

			_OUT_CSTR(ctx, " = ");

			ResizableString rstr_expr;
			rstr_init(&rstr_expr);
			_ir_expr_wrapper(ctx, &rstr_expr, node_expr);
			_OUT_STR(ctx, rstr_expr.buffer, rstr_expr.len);
			rstr_free(&rstr_expr);
		}

		rstr_free(&rstr_type);

		_OUT_CSTR(ctx, "; ");
	}
	_OUT_CSTR(ctx, "\n");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x20a5c
jmp 0x20a7b
leaq 0x5baf3(%rip), %rdi     # 0x7c556
leaq 0x5637e(%rip), %rsi     # 0x76de8
movl $0x4ba, %edx            # imm = 0x4BA
leaq 0x564d8(%rip), %rcx     # 0x76f4e
callq 0x30a0
cmpq $0x0, -0x10(%rbp)
je 0x20a84
jmp 0x20aa3
leaq 0x55548(%rip), %rdi     # 0x75fd3
leaq 0x56356(%rip), %rsi     # 0x76de8
movl $0x4bb, %edx            # imm = 0x4BB
leaq 0x564b0(%rip), %rcx     # 0x76f4e
callq 0x30a0
movq -0x10(%rbp), %rax
cmpl $0xc00, (%rax)          # imm = 0xC00
jne 0x20ab1
jmp 0x20ad0
leaq 0x5dd1e(%rip), %rdi     # 0x7e7d6
leaq 0x56329(%rip), %rsi     # 0x76de8
movl $0x4bc, %edx            # imm = 0x4BC
leaq 0x56483(%rip), %rcx     # 0x76f4e
callq 0x30a0
movq -0x10(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jle 0x20adc
jmp 0x20afb
leaq 0x53ad2(%rip), %rdi     # 0x745b5
leaq 0x562fe(%rip), %rsi     # 0x76de8
movl $0x4bd, %edx            # imm = 0x4BD
leaq 0x56458(%rip), %rcx     # 0x76f4e
callq 0x30a0
movq -0x10(%rbp), %rax
movl 0x70(%rax), %eax
movl %eax, -0x14(%rbp)
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
movq -0x10(%rbp), %rcx
cmpl 0x44(%rcx), %eax
jge 0x20de7
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movslq -0x18(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpl $0xc01, (%rax)          # imm = 0xC01
jne 0x20b3e
jmp 0x20b5d
leaq 0x53a82(%rip), %rdi     # 0x745c7
leaq 0x5629c(%rip), %rsi     # 0x76de8
movl $0x4c3, %edx            # imm = 0x4C3
leaq 0x563f6(%rip), %rcx     # 0x76f4e
callq 0x30a0
movq -0x20(%rbp), %rax
cmpl $0x2, 0x44(%rax)
je 0x20b71
movq -0x20(%rbp), %rax
cmpl $0x3, 0x44(%rax)
jne 0x20b73
jmp 0x20b92
leaq 0x53a75(%rip), %rdi     # 0x745ef
leaq 0x56267(%rip), %rsi     # 0x76de8
movl $0x4c4, %edx            # imm = 0x4C4
leaq 0x563c1(%rip), %rcx     # 0x76f4e
callq 0x30a0
movq -0x20(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x200, (%rax)          # imm = 0x200
jne 0x20baf
jmp 0x20bce
leaq 0x53a74(%rip), %rdi     # 0x7462a
leaq 0x5622b(%rip), %rsi     # 0x76de8
movl $0x4c7, %edx            # imm = 0x4C7
leaq 0x56385(%rip), %rcx     # 0x76f4e
callq 0x30a0
movq -0x20(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x8c90
movq -0x20(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x20c79
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rsi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movl 0x4(%rax), %edx
leaq -0x40(%rbp), %rdi
callq 0x8f90
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rdx
leaq -0x40(%rbp), %rsi
callq 0x216c0
cmpl $0x0, -0x14(%rbp)
jle 0x20c41
movl -0x14(%rbp), %edx
leaq -0x40(%rbp), %rdi
leaq 0x56349(%rip), %rsi     # 0x76f83
movb $0x0, %al
callq 0x9b70
movl $0x0, -0x44(%rbp)
movl -0x44(%rbp), %eax
cmpl -0x3c(%rbp), %eax
jge 0x20c74
movq -0x38(%rbp), %rax
movslq -0x44(%rbp), %rcx
movsbl (%rax,%rcx), %edi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x30d0
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x20c48
jmp 0x20d96
movq -0x20(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rsi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movl 0x4(%rax), %edx
leaq -0x40(%rbp), %rdi
callq 0x8f90
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rdx
leaq -0x40(%rbp), %rsi
callq 0x216c0
cmpl $0x0, -0x14(%rbp)
jle 0x20cd5
movl -0x14(%rbp), %edx
leaq -0x40(%rbp), %rdi
leaq 0x562b5(%rip), %rsi     # 0x76f83
movb $0x0, %al
callq 0x9b70
movl $0x0, -0x54(%rbp)
movl -0x54(%rbp), %eax
cmpl -0x3c(%rbp), %eax
jge 0x20d08
movq -0x38(%rbp), %rax
movslq -0x54(%rbp), %rcx
movsbl (%rax,%rcx), %edi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x30d0
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0x20cdc
movl $0x0, -0x58(%rbp)
movslq -0x58(%rbp), %rax
cmpq $0x3, %rax
jae 0x20d40
movslq -0x58(%rbp), %rcx
leaq 0x57e60(%rip), %rax     # 0x78b84
movsbl (%rax,%rcx), %edi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x30d0
movl -0x58(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x58(%rbp)
jmp 0x20d0f
leaq -0x68(%rbp), %rdi
callq 0x8c90
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rdx
leaq -0x68(%rbp), %rsi
callq 0x21d00
movl $0x0, -0x6c(%rbp)
movl -0x6c(%rbp), %eax
cmpl -0x64(%rbp), %eax
jge 0x20d8d
movq -0x60(%rbp), %rax
movslq -0x6c(%rbp), %rcx
movsbl (%rax,%rcx), %edi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x30d0
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x20d61
leaq -0x68(%rbp), %rdi
callq 0x9310
leaq -0x40(%rbp), %rdi
callq 0x9310
movl $0x0, -0x70(%rbp)
movslq -0x70(%rbp), %rax
cmpq $0x2, %rax
jae 0x20dd7
movslq -0x70(%rbp), %rcx
leaq 0x561e5(%rip), %rax     # 0x76fa0
movsbl (%rax,%rcx), %edi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x30d0
movl -0x70(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x70(%rbp)
jmp 0x20da6
jmp 0x20dd9
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x20b0c
movl $0x0, -0x74(%rbp)
movslq -0x74(%rbp), %rax
cmpq $0x1, %rax
jae 0x20e1f
movslq -0x74(%rbp), %rcx
leaq 0x552f3(%rip), %rax     # 0x760f6
movsbl (%rax,%rcx), %edi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x30d0
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x20dee
addq $0x80, %rsp
popq %rbp
retq
nopl (%rax,%rax)