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

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

			if(contxt.LocalArray && contxt.reading && contxt.function){
				if(EqualityExpressionPtr != NULL && RElationalExpression != NULL){
					EqualityExpressionPtr->render_asm(file,contxt);
					RElationalExpression->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()-1] !=  contxt.ArraySize[contxt.ArraySize.size()-2];
								contxt.ArraySize.pop_back();
								contxt.ArraySize.pop_back();
								contxt.ArraySize.push_back(result);
						}
					}
			}
			else if(EqualityExpressionPtr != NULL && !contxt.reading && RElationalExpression != NULL && OPERATOR != NULL){ 
				EqualityExpressionPtr->render_asm(file,contxt);
				contxt.Regs++;	
				RElationalExpression->render_asm(file,contxt);

					
					
					if(*OPERATOR == "==" && contxt.enum_constant)
					{
						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 == "!="  && contxt.enum_constant)
					{
					
						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);
						}
					}
					
				
				if (contxt.function  && !contxt.sizeof_ && !contxt.enum_constant){
					//postfix_ops(contxt, file);
					typePromotion(contxt.Regs,contxt.Regs+1,file,contxt);	
					if( *OPERATOR == "==" ){
						if(contxt.regType[contxt.Regs]=='f' || contxt.regType[contxt.Regs+1]=='f'){
							std::string label_id = labelGen(contxt);
							std::string END = "$ENDEQ" + label_id;
							std::string NOT_EQ = "$NOT_EQ" + label_id;

							file << std::endl << "\tc.eq.s\t$f" << contxt.Regs << ",$f" << contxt.Regs+1;
							contxt.regType[contxt.Regs]='f';
							contxt.regType[contxt.Regs+1]='f';
							file << std::endl << "\tbc1f\t" << NOT_EQ;
							file << std::endl << "\tnop" << std::endl;
							
							file << std::endl << "\tli.s\t$f" << contxt.Regs << ",1";
							contxt.regType[contxt.Regs]='f';
							file << std::endl << "\tb\t" << END;
							file << std::endl << "\tnop\t";
							file << std::endl << NOT_EQ << ":";
							file << std::endl << "\tmtc1\t$0,$f" << contxt.Regs;
							contxt.regType[contxt.Regs]='f';
							file << std::endl << "\tnop" << std::endl;
							file << std::endl << END << ":";

						}
						else{
							file << std::endl << "\tseq\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'){
							std::string label_id = labelGen(contxt);
							std::string END = "$ENDEQ" + label_id;
							std::string _EQ = "$_EQ" + label_id;

							file << std::endl << "\tc.eq.s\t$f" << contxt.Regs << ",$f" << contxt.Regs+1;
							contxt.regType[contxt.Regs]='f';
							contxt.regType[contxt.Regs+1]='f';
							file << std::endl << "\tbc1t\t" << _EQ;
							file << std::endl << "\tnop" << std::endl;
						
							file << std::endl << "\tli.s\t$f" << contxt.Regs << ",1";
							contxt.regType[contxt.Regs]='f';
							file << std::endl << "\tb\t" << END;
							file << std::endl << "\tnop\t";
							file << std::endl << _EQ << ":";
							file << std::endl << "\tmtc1\t$0,$f" << contxt.Regs;
							contxt.regType[contxt.Regs]='f';
							file << std::endl << "\tnop" << std::endl;
							file << std::endl << END << ":";

						}
						else{
							file << std::endl << "\txor\t$" << contxt.Regs << ", $" << contxt.Regs << ", $" << contxt.Regs+1;						
							file << std::endl << "\tsltu\t$" << contxt.Regs << ", $0, $" << contxt.Regs;
							contxt.regType[contxt.Regs]='i';
							contxt.regType[contxt.Regs+1]='i';
						}
						
					}
					
				}
				else 
				{
					if(*OPERATOR == "=="  && ((!contxt.sizeof_ && !contxt.enum_constant)))
					{
						contxt.eval[contxt.Regs] = contxt.eval[contxt.Regs] == contxt.eval[contxt.Regs+1];
						contxt.eval_f[contxt.Regs] = contxt.eval_f[contxt.Regs] == contxt.eval_f[contxt.Regs+1];
					}
					else if(*OPERATOR == "!="  && ((!contxt.sizeof_ && !contxt.enum_constant)))
					{
						contxt.eval[contxt.Regs] = contxt.eval[contxt.Regs] != contxt.eval[contxt.Regs+1];
						contxt.eval_f[contxt.Regs] = contxt.eval_f[contxt.Regs] != contxt.eval_f[contxt.Regs+1]; 
					}
				}
				contxt.Regs--;
				
			}

		}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x60, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
cmpq $0x0, 0x10(%rdi)
jne 0x104a3
movq 0x8(%r15), %rdi
testq %rdi, %rdi
je 0x104a3
movq %r14, %rsi
movq %rbx, %rdx
callq 0x10d94
cmpb $0x1, 0x74(%rbx)
jne 0x1053e
cmpb $0x1, 0x21b(%rbx)
jne 0x1053e
cmpb $0x1, 0x218(%rbx)
jne 0x1053e
movq 0x18(%r15), %rdi
testq %rdi, %rdi
je 0x104ed
cmpq $0x0, 0x8(%r15)
je 0x104ed
movq %r14, %rsi
movq %rbx, %rdx
callq 0x10476
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x10d94
movq 0x80(%rbx), %rax
subq 0x78(%rbx), %rax
cmpq $0x5, %rax
jb 0x10d52
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x10d52
leaq 0x78(%rbx), %r14
leaq 0x1d23f(%rip), %rsi     # 0x2d759
callq 0x820e
testb %al, %al
je 0x106fb
movq 0x80(%rbx), %rax
movl -0x4(%rax), %ecx
xorl %edx, %edx
cmpl -0x8(%rax), %ecx
sete %dl
jmp 0x1072e
movq 0x18(%r15), %rdi
testq %rdi, %rdi
je 0x10d52
cmpb $0x0, 0x21b(%rbx)
jne 0x10d52
cmpq $0x0, 0x8(%r15)
je 0x10d52
cmpq $0x0, 0x10(%r15)
je 0x10d52
movq %r14, %rsi
movq %rbx, %rdx
callq 0x10476
incl 0x310(%rbx)
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x10d94
movq 0x10(%r15), %rdi
leaq 0x1d1c0(%rip), %rsi     # 0x2d759
callq 0x820e
testb %al, %al
je 0x105dd
cmpb $0x1, 0x14d(%rbx)
jne 0x105dd
movq 0x150(%rbx), %rcx
movq 0x158(%rbx), %rax
movq %rax, %rdx
subq %rcx, %rdx
cmpq $0x5, %rdx
jb 0x10640
leaq 0x150(%rbx), %rdi
movl -0x4(%rcx,%rdx), %esi
xorl %r8d, %r8d
cmpl -0x8(%rcx,%rdx), %esi
sete %r8b
jmp 0x1062a
movq 0x10(%r15), %rdi
leaq 0x1d174(%rip), %rsi     # 0x2d75c
callq 0x820e
testb %al, %al
je 0x10640
cmpb $0x1, 0x14d(%rbx)
jne 0x10640
movq 0x150(%rbx), %rcx
movq 0x158(%rbx), %rax
movq %rax, %rdx
subq %rcx, %rdx
cmpq $0x5, %rdx
jb 0x10640
leaq 0x150(%rbx), %rdi
movl -0x4(%rcx,%rdx), %esi
xorl %r8d, %r8d
cmpl -0x8(%rcx,%rdx), %esi
setne %r8b
movq %rsp, %rsi
movl %r8d, (%rsi)
addq $-0x8, %rax
movq %rax, 0x158(%rbx)
callq 0xfa9e
cmpb $0x1, 0x218(%rbx)
jne 0x1065f
cmpb $0x0, 0x1f8(%rbx)
jne 0x1065f
cmpb $0x0, 0x14d(%rbx)
je 0x1074b
movq 0x10(%r15), %rdi
leaq 0x1d0ef(%rip), %rsi     # 0x2d759
callq 0x820e
testb %al, %al
je 0x10689
cmpb $0x0, 0x1f8(%rbx)
jne 0x10689
cmpb $0x0, 0x14d(%rbx)
je 0x1098f
movq 0x10(%r15), %rdi
leaq 0x1d0c8(%rip), %rsi     # 0x2d75c
callq 0x820e
testb %al, %al
je 0x10d4c
cmpb $0x0, 0x1f8(%rbx)
jne 0x10d4c
cmpb $0x0, 0x14d(%rbx)
jne 0x10d4c
movslq 0x310(%rbx), %rax
movl 0x5f8(%rbx,%rax,4), %ecx
xorl %edx, %edx
cmpl 0x5fc(%rbx,%rax,4), %ecx
setne %dl
movl %edx, 0x5f8(%rbx,%rax,4)
movslq 0x310(%rbx), %rax
movss 0xa23c(%rbx,%rax,4), %xmm0
cmpneqss 0xa238(%rbx,%rax,4), %xmm0
jmp 0x109ca
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x10d52
leaq 0x1d04d(%rip), %rsi     # 0x2d75c
callq 0x820e
testb %al, %al
je 0x10d52
movq 0x80(%rbx), %rax
movl -0x4(%rax), %ecx
xorl %edx, %edx
cmpl -0x8(%rax), %ecx
setne %dl
movq %rsp, %rsi
movl %edx, (%rsi)
addq $-0x8, %rax
movq %rax, 0x80(%rbx)
movq %r14, %rdi
callq 0xfa9e
jmp 0x10d52
movl 0x310(%rbx), %edi
leal 0x1(%rdi), %esi
movq %r14, %rdx
movq %rbx, %rcx
callq 0xfb3c
movq 0x10(%r15), %rdi
leaq 0x1cfef(%rip), %rsi     # 0x2d759
callq 0x820e
testb %al, %al
je 0x109e3
movslq 0x310(%rbx), %rax
cmpb $0x66, 0x341(%rbx,%rax)
je 0x10796
cmpb $0x66, 0x342(%rbx,%rax)
jne 0x10c2f
movq %rsp, %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0xda27
leaq 0x1cfb4(%rip), %rsi     # 0x2d75f
leaq 0x40(%rsp), %rdi
movq %r15, %rdx
callq 0xdaa7
leaq 0x1cfa7(%rip), %rsi     # 0x2d766
leaq 0x20(%rsp), %rdi
movq %rsp, %rdx
callq 0xdaa7
movq %r14, %rdi
callq 0x7190
leaq 0x1cee4(%rip), %rsi     # 0x2d6bf
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
leaq 0x1cf87(%rip), %rsi     # 0x2d77f
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
incl %esi
movq %rax, %rdi
callq 0x7590
movslq 0x310(%rbx), %rax
movb $0x66, %cl
movb %cl, 0x341(%rbx,%rax)
movslq 0x310(%rbx), %rax
movb %cl, 0x342(%rbx,%rax)
movq %r14, %rdi
callq 0x7190
leaq 0x1ce92(%rip), %rsi     # 0x2d6cf
movq %rax, %rdi
callq 0x7310
leaq 0x20(%rsp), %rsi
movq %rax, %rdi
callq 0x72d0
movq %r14, %rdi
callq 0x7190
leaq 0x1cd9b(%rip), %rsi     # 0x2d5fc
movq %rax, %rdi
callq 0x7310
movq %rax, %rdi
callq 0x7190
movq %r14, %rdi
callq 0x7190
leaq 0x1ceee(%rip), %rsi     # 0x2d76e
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
leaq 0x1ce43(%rip), %rsi     # 0x2d6e0
movq %rax, %rdi
callq 0x7310
movslq 0x310(%rbx), %rax
movb $0x66, 0x341(%rbx,%rax)
movq %r14, %rdi
callq 0x7190
leaq 0x1ce19(%rip), %rsi     # 0x2d6dc
movq %rax, %rdi
callq 0x7310
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x72d0
movq %r14, %rdi
callq 0x7190
leaq 0x1cdef(%rip), %rsi     # 0x2d6d6
movq %rax, %rdi
callq 0x7310
movq %r14, %rdi
callq 0x7190
leaq 0x20(%rsp), %rsi
movq %rax, %rdi
callq 0x72d0
leaq 0x1caeb(%rip), %rsi     # 0x2d3f6
movq %rax, %rdi
callq 0x7310
movq %r14, %rdi
callq 0x7190
leaq 0x1ce55(%rip), %rsi     # 0x2d777
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
movslq 0x310(%rbx), %rax
movb $0x66, 0x341(%rbx,%rax)
movq %r14, %rdi
callq 0x7190
leaq 0x1cca6(%rip), %rsi     # 0x2d5fc
movq %rax, %rdi
callq 0x7310
movq %rax, %rdi
callq 0x7190
movq %r14, %rdi
callq 0x7190
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x72d0
leaq 0x1ca74(%rip), %rsi     # 0x2d3f6
movq %rax, %rdi
callq 0x7310
jmp 0x10c0e
movslq 0x310(%rbx), %rax
movl 0x5f8(%rbx,%rax,4), %ecx
xorl %edx, %edx
cmpl 0x5fc(%rbx,%rax,4), %ecx
sete %dl
movl %edx, 0x5f8(%rbx,%rax,4)
movslq 0x310(%rbx), %rax
movss 0xa23c(%rbx,%rax,4), %xmm0
cmpeqss 0xa238(%rbx,%rax,4), %xmm0
movss 0x1c902(%rip), %xmm1    # 0x2d2d4
andps %xmm0, %xmm1
movss %xmm1, 0xa238(%rbx,%rax,4)
jmp 0x10d4c
movq 0x10(%r15), %rdi
leaq 0x1cd6e(%rip), %rsi     # 0x2d75c
callq 0x820e
testb %al, %al
je 0x10d4c
movslq 0x310(%rbx), %rax
cmpb $0x66, 0x341(%rbx,%rax)
je 0x10a1a
cmpb $0x66, 0x342(%rbx,%rax)
jne 0x10c8c
movq %rsp, %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0xda27
leaq 0x1cd30(%rip), %rsi     # 0x2d75f
leaq 0x40(%rsp), %rdi
movq %r15, %rdx
callq 0xdaa7
leaq 0x1cd47(%rip), %rsi     # 0x2d78a
leaq 0x20(%rsp), %rdi
movq %rsp, %rdx
callq 0xdaa7
movq %r14, %rdi
callq 0x7190
leaq 0x1cc60(%rip), %rsi     # 0x2d6bf
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
leaq 0x1cd03(%rip), %rsi     # 0x2d77f
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
incl %esi
movq %rax, %rdi
callq 0x7590
movslq 0x310(%rbx), %rax
movb $0x66, %cl
movb %cl, 0x341(%rbx,%rax)
movslq 0x310(%rbx), %rax
movb %cl, 0x342(%rbx,%rax)
movq %r14, %rdi
callq 0x7190
leaq 0x1cc2d(%rip), %rsi     # 0x2d6ee
movq %rax, %rdi
callq 0x7310
leaq 0x20(%rsp), %rsi
movq %rax, %rdi
callq 0x72d0
movq %r14, %rdi
callq 0x7190
leaq 0x1cb17(%rip), %rsi     # 0x2d5fc
movq %rax, %rdi
callq 0x7310
movq %rax, %rdi
callq 0x7190
movq %r14, %rdi
callq 0x7190
leaq 0x1cc6a(%rip), %rsi     # 0x2d76e
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
leaq 0x1cbbf(%rip), %rsi     # 0x2d6e0
movq %rax, %rdi
callq 0x7310
movslq 0x310(%rbx), %rax
movb $0x66, 0x341(%rbx,%rax)
movq %r14, %rdi
callq 0x7190
leaq 0x1cb95(%rip), %rsi     # 0x2d6dc
movq %rax, %rdi
callq 0x7310
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x72d0
movq %r14, %rdi
callq 0x7190
leaq 0x1cb6b(%rip), %rsi     # 0x2d6d6
movq %rax, %rdi
callq 0x7310
movq %r14, %rdi
callq 0x7190
leaq 0x20(%rsp), %rsi
movq %rax, %rdi
callq 0x72d0
leaq 0x1c867(%rip), %rsi     # 0x2d3f6
movq %rax, %rdi
callq 0x7310
movq %r14, %rdi
callq 0x7190
leaq 0x1cbd1(%rip), %rsi     # 0x2d777
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
movslq 0x310(%rbx), %rax
movb $0x66, 0x341(%rbx,%rax)
movq %r14, %rdi
callq 0x7190
leaq 0x1ca22(%rip), %rsi     # 0x2d5fc
movq %rax, %rdi
callq 0x7310
movq %rax, %rdi
callq 0x7190
movq %r14, %rdi
callq 0x7190
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x72d0
leaq 0x1c7f0(%rip), %rsi     # 0x2d3f6
movq %rax, %rdi
callq 0x7310
leaq 0x20(%rsp), %rdi
callq 0x7170
leaq 0x40(%rsp), %rdi
callq 0x7170
movq %rsp, %rdi
callq 0x7170
jmp 0x10d4c
movq %r14, %rdi
callq 0x7190
leaq 0x1cb45(%rip), %rsi     # 0x2d783
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
leaq 0x1cb40(%rip), %r14     # 0x2d79b
movq %rax, %rdi
movq %r14, %rsi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
movq %rax, %rdi
movq %r14, %rsi
callq 0x7310
movl 0x310(%rbx), %esi
incl %esi
jmp 0x10d26
movq %r14, %rdi
callq 0x7190
leaq 0x1cab0(%rip), %rsi     # 0x2d74b
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
leaq 0x1cae3(%rip), %r15     # 0x2d79b
movq %rax, %rdi
movq %r15, %rsi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
movq %rax, %rdi
movq %r15, %rsi
callq 0x7310
movl 0x310(%rbx), %esi
incl %esi
movq %rax, %rdi
callq 0x7590
movq %r14, %rdi
callq 0x7190
leaq 0x1ca94(%rip), %rsi     # 0x2d78f
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
leaq 0x1ca7f(%rip), %rsi     # 0x2d797
movq %rax, %rdi
callq 0x7310
movl 0x310(%rbx), %esi
movq %rax, %rdi
callq 0x7590
movslq 0x310(%rbx), %rax
movb $0x69, %cl
movb %cl, 0x341(%rbx,%rax)
movslq 0x310(%rbx), %rax
movb %cl, 0x342(%rbx,%rax)
decl 0x310(%rbx)
addq $0x60, %rsp
popq %rbx
popq %r14
popq %r15
retq
jmp 0x10d60
jmp 0x10d65
movq %rax, %rbx
jmp 0x10d79
movq %rax, %rbx
jmp 0x10d83
jmp 0x10d6c
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x7170
leaq 0x40(%rsp), %rdi
callq 0x7170
movq %rsp, %rdi
callq 0x7170
movq %rbx, %rdi
callq 0x75c0
nop