// File: /workspace/github_c_makefile_star2_O0/anuwu[P]ERPLAG-Compiler/codegen.c
// Function: exprAssign
void exprAssign (astNode *node, moduleST *lst, int singleAssign)
{
	if (!singleAssign)
		codePrint ("\t\tPOP AX\n") ;

	if(node->child == NULL)
	{
		varST *searchedVar = searchVar (lst, node->tok->lexeme) ;
		if (node->next->id == TK_MINUS && node->next->child->next == NULL)
			codePrint ("\t\tNEG AX\n") ;

		codePrint ("\t\tMOV [RBP%s], AX", getOffsetStr (searchedVar->offset)) ;
	}
	else
	{
		varST* vst ;
		vst = searchVar (lst,node->tok->lexeme);

		if (isVarStaticArr(vst) && node->child->id == TK_NUM)
		{
			if (node->next->id == TK_MINUS && node->next->child->next == NULL)
				codePrint ("\t\tNEG AX\n") ;

			codePrint ("\t\tMOV [RBP%s], AX" , getOffsetStr(getStaticOffset(vst,node,2))) ;
		}
		else
		{
			if (node->next->id == TK_MINUS && node->next->child->next == NULL)
				codePrint ("\t\tNEG AX\n") ;

			arrBoundCheck (node, lst, vst) ;
			codePrint ("\t\tMOV [RDI + RBX], AX") ;
		}
	}
	codeComment (10, "store variable") ;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
cmpl $0x0, -0x14(%rbp)
jne 0x1ef1
leaq 0x1b448(%rip), %rax     # 0x1d328
movq (%rax), %rdi
leaq 0x1359f(%rip), %rsi     # 0x15489
movb $0x0, %al
callq 0x10d0
movq -0x8(%rbp), %rax
cmpq $0x0, 0x30(%rax)
jne 0x1f85
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rsi
callq 0x10ba0
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
cmpl $0x58, (%rax)
jne 0x1f51
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x30(%rax), %rax
cmpq $0x0, 0x38(%rax)
jne 0x1f51
leaq 0x1b3e8(%rip), %rax     # 0x1d328
movq (%rax), %rdi
leaq 0x13549(%rip), %rsi     # 0x15493
movb $0x0, %al
callq 0x10d0
leaq 0x1b3d0(%rip), %rax     # 0x1d328
movq (%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movl 0x1c(%rax), %edi
callq 0x1730
movq -0x30(%rbp), %rdi
movq %rax, %rdx
leaq 0x13524(%rip), %rsi     # 0x1549d
movb $0x0, %al
callq 0x10d0
jmp 0x2096
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rsi
callq 0x10ba0
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
callq 0x13fc0
cmpl $0x0, %eax
je 0x2033
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
cmpl $0x71, (%rax)
jne 0x2033
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
cmpl $0x58, (%rax)
jne 0x1ff5
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x30(%rax), %rax
cmpq $0x0, 0x38(%rax)
jne 0x1ff5
leaq 0x1b344(%rip), %rax     # 0x1d328
movq (%rax), %rdi
leaq 0x134a5(%rip), %rsi     # 0x15493
movb $0x0, %al
callq 0x10d0
leaq 0x1b32c(%rip), %rax     # 0x1d328
movq (%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rdi
movq -0x8(%rbp), %rsi
movl $0x2, %edx
callq 0x19f0
movl %eax, %edi
callq 0x1730
movq -0x38(%rbp), %rdi
movq %rax, %rdx
leaq 0x13473(%rip), %rsi     # 0x1549d
movb $0x0, %al
callq 0x10d0
jmp 0x2094
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
cmpl $0x58, (%rax)
jne 0x206b
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x30(%rax), %rax
cmpq $0x0, 0x38(%rax)
jne 0x206b
leaq 0x1b2ce(%rip), %rax     # 0x1d328
movq (%rax), %rdi
leaq 0x1342f(%rip), %rsi     # 0x15493
movb $0x0, %al
callq 0x10d0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0x1a60
leaq 0x1b2a5(%rip), %rax     # 0x1d328
movq (%rax), %rdi
leaq 0x13422(%rip), %rsi     # 0x154af
movb $0x0, %al
callq 0x10d0
jmp 0x2096
movl $0xa, %edi
leaq 0x13423(%rip), %rsi     # 0x154c5
callq 0x16c0
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)