// File: /workspace/github_cpp_makefile_star2_O1/gioannides[P]Language_Processors/src/../include/ast/ast_Expressions.cpp
// Function: AdditiveExpression::render_asm(std::basic_ofstream<char, std::char_traits<char>>&, Context&)
inline void AdditiveExpression::render_asm(std::ofstream& file,Context& contxt) {


			if(OPERATOR==NULL && MultiplicativeExpressioN != NULL){
				MultiplicativeExpressioN->render_asm(file,contxt);
				//postfix_ops(contxt, file);

			}
			if(contxt.LocalArray && contxt.reading && contxt.function){
				if(AdditiveExpressionPtr != NULL && MultiplicativeExpressioN != NULL){
					AdditiveExpressionPtr->render_asm(file,contxt);		
					MultiplicativeExpressioN->render_asm(file,contxt);					
					
				}
					if(contxt.ArraySize.size()>=2){
					if( OPERATOR != NULL && *OPERATOR == "+" ){
						
							int result = contxt.ArraySize[contxt.ArraySize.size()-1] +  contxt.ArraySize[contxt.ArraySize.size()-2];
							contxt.ArraySize.pop_back();
							contxt.ArraySize.pop_back();
							contxt.ArraySize.push_back(result);
						}
					
					else if( OPERATOR != NULL && *OPERATOR== "-") {
							int result = contxt.ArraySize[contxt.ArraySize.size()-2] -  contxt.ArraySize[contxt.ArraySize.size()-1];
							contxt.ArraySize.pop_back();
							contxt.ArraySize.pop_back();
							contxt.ArraySize.push_back(result);
					}
				}
			}
			else if(AdditiveExpressionPtr != NULL && !contxt.reading  && MultiplicativeExpressioN != NULL && OPERATOR != NULL) { 
				
				
				AdditiveExpressionPtr->render_asm(file,contxt);	
				contxt.Regs++;
				MultiplicativeExpressioN->render_asm(file,contxt);


				
				if(contxt.enum_constant){
					if( *OPERATOR == "+" ){
						if(contxt.EnumOperands.size()>=2){
							int result =  contxt.EnumOperands[contxt.EnumOperands.size()-1] + contxt.EnumOperands[contxt.EnumOperands.size()-2];
							contxt.EnumOperands.pop_back();
							contxt.EnumOperands.pop_back();
							contxt.EnumOperands.push_back(result);
						}
						
					}
					else if(*OPERATOR == "-"){
						if(contxt.EnumOperands.size()>=2){
							int result =  contxt.EnumOperands[contxt.EnumOperands.size()-2] - contxt.EnumOperands[contxt.EnumOperands.size()-1];
							contxt.EnumOperands.pop_back();
							contxt.EnumOperands.pop_back();
							contxt.EnumOperands.push_back(result);
						}
					}
				}
				if((!contxt.function  && !contxt.sizeof_ && !contxt.enum_constant)){
					//postfix_ops(contxt, file);
					if( *OPERATOR == "+" ){
						contxt.eval[contxt.Regs]+=contxt.eval[contxt.Regs+1];
						contxt.eval[contxt.Regs+1]=0;
						contxt.eval_f[contxt.Regs]+=contxt.eval_f[contxt.Regs+1];
						contxt.eval_f[contxt.Regs+1]=0;
						
					}
					else if(*OPERATOR == "-"){
						contxt.eval[contxt.Regs]-=contxt.eval[contxt.Regs+1];
						contxt.eval[contxt.Regs+1]=0;
						contxt.eval_f[contxt.Regs]-=contxt.eval_f[contxt.Regs+1];
						contxt.eval_f[contxt.Regs+1]=0;
					}
				}
				if (contxt.function  && !contxt.sizeof_ && !contxt.enum_constant){
					typePromotion(contxt.Regs,contxt.Regs+1,file,contxt);
					if( *OPERATOR == "+" ){

						if(contxt.regType[contxt.Regs]=='f' || contxt.regType[contxt.Regs+1]=='f'){
							if(contxt.lhs_of_assignment){ //TODO: NEW THING
								file << std::endl << "\tadd.s\t$f" << contxt.Regs+1 <<", $f" << contxt.Regs+2 << ", $f" << contxt.Regs + 1;
								contxt.regType[contxt.Regs+1]='f';
								contxt.regType[contxt.Regs+2]='f';
							}
							else{
								file << std::endl << "\tadd.s\t$f" << contxt.Regs << ",$f" << contxt.Regs << ",$f" << contxt.Regs+1;
								contxt.regType[contxt.Regs]='f';
								contxt.regType[contxt.Regs+1]='f';
							}
							
						}		

						else if(contxt.regType[contxt.Regs]=='u' || contxt.regType[contxt.Regs+1]=='u' ){
							if(contxt.lhs_of_assignment){ // TODO: NEW THING
								file << std::endl << "\taddu\t$" << contxt.Regs+1 <<", $" << contxt.Regs+2 << ", $" << contxt.Regs + 1;
								contxt.regType[contxt.Regs+1]='u';
								contxt.regType[contxt.Regs+2]='u';
							}
							else{
								file << std::endl << "\taddu\t$" << contxt.Regs <<", $" << contxt.Regs << ", $" << contxt.Regs + 1;
								contxt.regType[contxt.Regs]='u';
								contxt.regType[contxt.Regs+1]='u';
							}
							
						}
										
						else{
							if(contxt.lhs_of_assignment){ //TODO: NEW THING
								file << std::endl << "\tadd\t$" << contxt.Regs+1 <<", $" << contxt.Regs+2 << ", $" << contxt.Regs + 1;
								contxt.regType[contxt.Regs+2]='i';
								contxt.regType[contxt.Regs+1]='i';
							}
							else{
							file << std::endl << "\tadd\t$" << contxt.Regs <<", $" << contxt.Regs << ", $" << contxt.Regs + 1;
							contxt.regType[contxt.Regs]='i';
							contxt.regType[contxt.Regs+1]='i';
							}
							
						}
					}
					else if(  *OPERATOR == "-" ){
						if(contxt.regType[contxt.Regs]=='f' || contxt.regType[contxt.Regs+1]=='f'){
							if(contxt.lhs_of_assignment){ //TODO: NEW THING
								file << std::endl << "\tsub.s\t$" << contxt.Regs+1 <<", $" << contxt.Regs+2 << ", $" << contxt.Regs + 1;
								contxt.regType[contxt.Regs+2]='f';
								contxt.regType[contxt.Regs+1]='f';
							}
							else{
								file << std::endl << "\tsub.s\t$f" << contxt.Regs << ",$f" << contxt.Regs << ",$f" << contxt.Regs+1;
								contxt.regType[contxt.Regs]='f';
								contxt.regType[contxt.Regs+1]='f';
							}
							

						}
						else if(contxt.regType[contxt.Regs]=='u' || contxt.regType[contxt.Regs+1]=='u') {
							if(contxt.lhs_of_assignment){ //TODO: NEW THING
								file << std::endl << "\tsubu\t$" << contxt.Regs+1 <<", $" << contxt.Regs+2 << ", $" << contxt.Regs + 1;
								contxt.regType[contxt.Regs+2]='u';
								contxt.regType[contxt.Regs+1]='u';
							}
							else{
								file << std::endl << "\tsubu\t$" << contxt.Regs <<", $" << contxt.Regs << ", $" << contxt.Regs + 1;
								contxt.regType[contxt.Regs]='u';
								contxt.regType[contxt.Regs+1]='u';
							}
							
						}
						
						else{
							if(contxt.lhs_of_assignment){ //TODO: NEW THING
								file << std::endl << "\tsub\t$" << contxt.Regs+1 <<", $" << contxt.Regs+2 << ", $" << contxt.Regs + 1;
								contxt.regType[contxt.Regs+2]='i';
								contxt.regType[contxt.Regs+1]='i';	
							}
							else{
								file << std::endl << "\tsub\t$" << contxt.Regs <<", $" << contxt.Regs << ", $" << contxt.Regs + 1;
								contxt.regType[contxt.Regs]='i';
								contxt.regType[contxt.Regs+1]='i';
							}
							
						}
					}
					
				}
				contxt.Regs--;
			}

		}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
cmpq $0x0, 0x10(%rdi)
jne 0x166f6
movq 0x8(%r15), %rdi
testq %rdi, %rdi
je 0x166f6
movq %r14, %rsi
movq %rbx, %rdx
callq 0x16f32
cmpb $0x1, 0x74(%rbx)
jne 0x167ad
cmpb $0x1, 0x21b(%rbx)
jne 0x167ad
cmpb $0x1, 0x218(%rbx)
jne 0x167ad
movq 0x18(%r15), %rdi
testq %rdi, %rdi
je 0x16744
cmpq $0x0, 0x8(%r15)
je 0x16744
movq %r14, %rsi
movq %rbx, %rdx
callq 0x166c6
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x16f32
movq 0x80(%rbx), %rax
subq 0x78(%rbx), %rax
cmpq $0x5, %rax
jb 0x16d25
leaq 0x78(%rbx), %r14
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x1677a
leaq 0x2144c(%rip), %rsi     # 0x37bb9
callq 0x70c0
testl %eax, %eax
je 0x168ac
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x16d25
leaq 0x211d4(%rip), %rsi     # 0x37962
callq 0x70c0
testl %eax, %eax
jne 0x16d25
movq 0x80(%rbx), %rax
movl -0x8(%rax), %ecx
subl -0x4(%rax), %ecx
jmp 0x168b9
movq 0x18(%r15), %rdi
testq %rdi, %rdi
je 0x16d25
cmpb $0x0, 0x21b(%rbx)
jne 0x16d25
cmpq $0x0, 0x8(%r15)
je 0x16d25
cmpq $0x0, 0x10(%r15)
je 0x16d25
movq %r14, %rsi
movq %rbx, %rdx
callq 0x166c6
incl 0x310(%rbx)
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x16f32
cmpb $0x1, 0x14d(%rbx)
jne 0x16907
movq 0x10(%r15), %rdi
leaq 0x213a4(%rip), %rsi     # 0x37bb9
callq 0x70c0
testl %eax, %eax
je 0x1685e
movq 0x10(%r15), %rdi
leaq 0x21139(%rip), %rsi     # 0x37962
callq 0x70c0
testl %eax, %eax
jne 0x16907
movq 0x150(%rbx), %rcx
movq 0x158(%rbx), %rax
movq %rax, %rsi
subq %rcx, %rsi
cmpq $0x5, %rsi
jb 0x16907
movl -0x8(%rcx,%rsi), %edx
subl -0x4(%rcx,%rsi), %edx
jmp 0x16884
movq 0x150(%rbx), %rcx
movq 0x158(%rbx), %rax
movq %rax, %rsi
subq %rcx, %rsi
cmpq $0x5, %rsi
jb 0x16907
movl -0x8(%rcx,%rsi), %edx
addl -0x4(%rcx,%rsi), %edx
movl %edx, 0xc(%rsp)
leaq -0x8(%rax), %rsi
movq %rsi, 0x158(%rbx)
cmpq 0x160(%rbx), %rsi
je 0x168f6
movl %edx, -0x8(%rax)
addq $-0x4, %rax
movq %rax, 0x158(%rbx)
jmp 0x16907
movq 0x80(%rbx), %rax
movl -0x8(%rax), %ecx
addl -0x4(%rax), %ecx
movl %ecx, 0xc(%rsp)
leaq -0x8(%rax), %rsi
movq %rsi, 0x80(%rbx)
cmpq 0x88(%rbx), %rsi
je 0x168e4
movl %ecx, -0x8(%rax)
addq $-0x4, %rax
movq %rax, 0x80(%rbx)
jmp 0x16d25
leaq 0xc(%rsp), %rdx
movq %r14, %rdi
callq 0x20a34
jmp 0x16d25
leaq 0x150(%rbx), %rdi
leaq 0xc(%rsp), %rdx
callq 0x20a34
cmpb $0x0, 0x218(%rbx)
jne 0x169e9
cmpb $0x0, 0x1f8(%rbx)
jne 0x169e9
cmpb $0x0, 0x14d(%rbx)
jne 0x169e9
movq 0x10(%r15), %rdi
leaq 0x21280(%rip), %rsi     # 0x37bb9
callq 0x70c0
testl %eax, %eax
je 0x1699d
movq 0x10(%r15), %rdi
leaq 0x21015(%rip), %rsi     # 0x37962
callq 0x70c0
testl %eax, %eax
jne 0x169e9
movslq 0x310(%rbx), %rax
movl 0x5fc(%rbx,%rax,4), %ecx
subl %ecx, 0x5f8(%rbx,%rax,4)
movslq 0x310(%rbx), %rax
movl $0x0, 0x5fc(%rbx,%rax,4)
movslq 0x310(%rbx), %rax
leaq (%rbx,%rax,4), %rax
addq $0xa23c, %rax           # imm = 0xA23C
movss -0x4(%rax), %xmm0
subss (%rax), %xmm0
jmp 0x169de
movslq 0x310(%rbx), %rax
movl 0x5fc(%rbx,%rax,4), %ecx
addl %ecx, 0x5f8(%rbx,%rax,4)
movslq 0x310(%rbx), %rax
movl $0x0, 0x5fc(%rbx,%rax,4)
movslq 0x310(%rbx), %rax
leaq (%rbx,%rax,4), %rax
addq $0xa23c, %rax           # imm = 0xA23C
movss (%rax), %xmm0
addss -0x4(%rax), %xmm0
movss %xmm0, -0x4(%rax)
movl $0x0, (%rax)
cmpb $0x1, 0x218(%rbx)
jne 0x16d1f
cmpb $0x0, 0x1f8(%rbx)
jne 0x16d1f
cmpb $0x0, 0x14d(%rbx)
jne 0x16d1f
movl 0x310(%rbx), %edi
leal 0x1(%rdi), %esi
movq %r14, %rdx
movq %rbx, %rcx
callq 0x138f3
movq 0x10(%r15), %rdi
leaq 0x2118a(%rip), %rsi     # 0x37bb9
callq 0x70c0
testl %eax, %eax
je 0x16b12
movq 0x10(%r15), %rdi
leaq 0x20f1b(%rip), %rsi     # 0x37962
callq 0x70c0
testl %eax, %eax
jne 0x16d1f
movslq 0x310(%rbx), %rcx
movb 0x341(%rbx,%rcx), %al
cmpb $0x66, %al
je 0x16a76
movb 0x342(%rbx,%rcx), %cl
cmpb $0x66, %cl
jne 0x16d32
movb 0x1d2(%rbx), %bpl
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
cmpb $0x1, %bpl
jne 0x16c89
leaq 0x20db3(%rip), %rsi     # 0x3784c
movl $0x8, %edx
movq %r14, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
leaq 0x20cd1(%rip), %r15     # 0x37791
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
addl $0x2, %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r14, %rdi
callq 0x75c0
movl 0x310(%rbx), %eax
addl $0x2, %eax
jmp 0x16cfc
movslq 0x310(%rbx), %rcx
movb 0x341(%rbx,%rcx), %al
cmpb $0x66, %al
je 0x16b34
movb 0x342(%rbx,%rcx), %cl
cmpb $0x66, %cl
jne 0x16bd4
movb 0x1d2(%rbx), %bpl
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
leaq 0x20ce1(%rip), %rsi     # 0x3782e
movl $0x9, %edx
movq %rax, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
cmpb $0x1, %bpl
jne 0x16ca3
incl %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
leaq 0x20cba(%rip), %r15     # 0x37838
movl $0x4, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
addl $0x2, %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
movl $0x4, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r14, %rdi
callq 0x75c0
movl 0x310(%rbx), %eax
incl %eax
movl $0x2, %ecx
jmp 0x16d01
cmpb $0x75, %al
setne %r15b
cmpb $0x75, %cl
setne %r12b
movb 0x1d2(%rbx), %bpl
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
testb %r12b, %r15b
jne 0x16ddc
leaq 0x20c3a(%rip), %rsi     # 0x3783d
movl $0x7, %edx
movq %r14, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
testb %bpl, %bpl
je 0x16de5
incl %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
leaq 0x20b5e(%rip), %r15     # 0x37791
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
addl $0x2, %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r14, %rdi
callq 0x75c0
movl 0x310(%rbx), %eax
incl %eax
movl $0x2, %ecx
jmp 0x16e43
leaq 0x20bc5(%rip), %rsi     # 0x37855
movl $0x9, %edx
movq %r14, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
leaq 0x20ac0(%rip), %r15     # 0x37775
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r14, %rdi
callq 0x75c0
movl 0x310(%rbx), %eax
movl $0x1, %ecx
movb $0x66, %dl
cltq
movb %dl, 0x341(%rbx,%rax)
movslq 0x310(%rbx), %rax
movl %ecx, %ecx
addq %rax, %rcx
movb %dl, 0x341(%rbx,%rcx)
decl 0x310(%rbx)
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
cmpb $0x75, %al
setne %r15b
cmpb $0x75, %cl
setne %r12b
movb 0x1d2(%rbx), %bpl
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
testb %r12b, %r15b
jne 0x16e4a
leaq 0x20afe(%rip), %rsi     # 0x3785f
movl $0x7, %edx
movq %r14, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
testb %bpl, %bpl
je 0x16de5
incl %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
leaq 0x20a04(%rip), %r15     # 0x37791
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
addl $0x2, %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r14, %rdi
callq 0x75c0
movl 0x310(%rbx), %eax
addl $0x2, %eax
jmp 0x16e3e
leaq 0x20a62(%rip), %rsi     # 0x37845
jmp 0x16e51
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
leaq 0x2099a(%rip), %r15     # 0x37791
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r14, %rdi
callq 0x75c0
movl 0x310(%rbx), %eax
movl $0x1, %ecx
movb $0x75, %dl
jmp 0x16d03
leaq 0x20a16(%rip), %rsi     # 0x37867
movl $0x6, %edx
movq %r14, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
testb %bpl, %bpl
je 0x16ecc
incl %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
leaq 0x20914(%rip), %r15     # 0x37791
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
addl $0x2, %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r14, %rdi
callq 0x75c0
movl 0x310(%rbx), %eax
addl $0x2, %eax
jmp 0x16f25
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
leaq 0x208b3(%rip), %r15     # 0x37791
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
movl $0x3, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r14, %rdi
callq 0x75c0
movl 0x310(%rbx), %eax
movl $0x1, %ecx
movb $0x69, %dl
jmp 0x16d03
nop