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

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

			}
			if(contxt.LocalArray && contxt.reading && contxt.function){
				if( MultiplicativeExpressionPtr != NULL && CaStExpression != NULL){
					MultiplicativeExpressionPtr->render_asm(file,contxt);
					CaStExpression->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( 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(MultiplicativeExpressionPtr != NULL && !contxt.reading && CaStExpression != NULL && OPERATOR != NULL){ 
				MultiplicativeExpressionPtr->render_asm(file,contxt);
				contxt.Regs++;			
				CaStExpression->render_asm(file,contxt);


				
				
				if(contxt.enum_constant){
					//postfix_ops(contxt, file);
					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);
						}
					}
					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]*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.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.eval[contxt.Regs] = contxt.eval[contxt.Regs]%contxt.eval[contxt.Regs+1];
						
					}
					
				}
				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'){
							file << std::endl << "\tmul.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' ){
							file << std::endl << "\tmultu\t$" << contxt.Regs << ", $" << contxt.Regs + 1;
							file << std::endl << "\tmflo\t$" << contxt.Regs;
							contxt.regType[contxt.Regs]='u';
							contxt.regType[contxt.Regs+1]='u';
						}
						else{
							file << std::endl << "\tmult\t$" << contxt.Regs << ", $" << contxt.Regs + 1;
							file << std::endl << "\tmflo\t$" << contxt.Regs;
							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'){
							file << std::endl << "\tdiv.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'){
							file << std::endl << "\tdivu\t$" << contxt.Regs << ", $" << contxt.Regs + 1;
							file << std::endl << "\tmflo\t$" << contxt.Regs;
							contxt.regType[contxt.Regs]='u';
							contxt.regType[contxt.Regs+1]='u';
						}
						else{
							file << std::endl << "\tdiv\t$" << contxt.Regs << ", $" << contxt.Regs + 1;
							file << std::endl << "\tmflo\t$" << contxt.Regs;
							contxt.regType[contxt.Regs]='i';
							contxt.regType[contxt.Regs+1]='i';
						}
						
					}
					else if(  *OPERATOR == "%" ){
						if(contxt.regType[contxt.Regs]=='u' || contxt.regType[contxt.Regs+1]=='u') {
							file << std::endl << "\tdivu\t$" << contxt.Regs << ", $" << contxt.Regs + 1;
							contxt.regType[contxt.Regs]='u';
							contxt.regType[contxt.Regs+1]='u';
						}
						else{
							file << std::endl << "\tdiv\t$" << contxt.Regs << ", $" << contxt.Regs + 1;
							contxt.regType[contxt.Regs]='i';
							contxt.regType[contxt.Regs+1]='u';
						}
						
						file << std::endl << "\tmfhi\t$" << contxt.Regs;
						
					}
					
				}
				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 0x16608
movq 0x8(%r15), %rdi
testq %rdi, %rdi
je 0x16608
movq %r14, %rsi
movq %rbx, %rdx
callq 0x16e08
cmpb $0x1, 0x74(%rbx)
jne 0x16704
cmpb $0x1, 0x21b(%rbx)
jne 0x16704
cmpb $0x1, 0x218(%rbx)
jne 0x16704
movq 0x18(%r15), %rdi
testq %rdi, %rdi
je 0x16656
cmpq $0x0, 0x8(%r15)
je 0x16656
movq %r14, %rsi
movq %rbx, %rdx
callq 0x165d8
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x16e08
movq 0x80(%rbx), %rax
subq 0x78(%rbx), %rax
cmpq $0x5, %rax
jb 0x16bea
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x16bea
leaq 0x78(%rbx), %r14
leaq 0x21707(%rip), %rsi     # 0x37d8a
callq 0x70c0
testl %eax, %eax
je 0x16891
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x16bea
leaq 0x211ca(%rip), %rsi     # 0x3786e
callq 0x70c0
testl %eax, %eax
je 0x169a7
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x16bea
leaq 0x211ab(%rip), %rsi     # 0x37870
callq 0x70c0
testl %eax, %eax
jne 0x16bea
movq 0x80(%rbx), %rcx
movl -0x8(%rcx), %eax
cltd
idivl -0x4(%rcx)
movl %edx, 0xc(%rsp)
leaq -0x8(%rcx), %rsi
movq %rsi, 0x80(%rbx)
cmpq 0x88(%rbx), %rsi
je 0x169e0
movl %edx, -0x8(%rcx)
jmp 0x169d0
movq 0x18(%r15), %rdi
testq %rdi, %rdi
je 0x16bea
cmpb $0x0, 0x21b(%rbx)
jne 0x16bea
cmpq $0x0, 0x8(%r15)
je 0x16bea
cmpq $0x0, 0x10(%r15)
je 0x16bea
movq %r14, %rsi
movq %rbx, %rdx
callq 0x165d8
incl 0x310(%rbx)
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x16e08
cmpb $0x1, 0x14d(%rbx)
jne 0x168df
movq 0x10(%r15), %rdi
leaq 0x2161e(%rip), %rsi     # 0x37d8a
callq 0x70c0
testl %eax, %eax
je 0x167f0
movq 0x10(%r15), %rdi
leaq 0x210ee(%rip), %rsi     # 0x3786e
callq 0x70c0
testl %eax, %eax
je 0x16846
movq 0x10(%r15), %rdi
leaq 0x210d8(%rip), %rsi     # 0x37870
callq 0x70c0
testl %eax, %eax
jne 0x168df
movq 0x150(%rbx), %rsi
movq 0x158(%rbx), %rcx
movq %rcx, %rdi
subq %rsi, %rdi
cmpq $0x5, %rdi
jb 0x168df
movl -0x8(%rsi,%rdi), %eax
cltd
idivl -0x4(%rsi,%rdi)
movl %edx, 0xc(%rsp)
leaq -0x8(%rcx), %rsi
movq %rsi, 0x158(%rbx)
cmpq 0x160(%rbx), %rsi
je 0x168ce
movl %edx, -0x8(%rcx)
jmp 0x16884
movq 0x150(%rbx), %rcx
movq 0x158(%rbx), %rax
movq %rax, %rsi
subq %rcx, %rsi
cmpq $0x5, %rsi
jb 0x168df
movl -0x8(%rcx,%rsi), %edx
imull -0x4(%rcx,%rsi), %edx
movl %edx, 0xc(%rsp)
leaq -0x8(%rax), %rsi
movq %rsi, 0x158(%rbx)
cmpq 0x160(%rbx), %rsi
je 0x168ce
movl %edx, -0x8(%rax)
addq $-0x4, %rax
movq %rax, 0x158(%rbx)
jmp 0x168df
movq 0x150(%rbx), %rsi
movq 0x158(%rbx), %rcx
movq %rcx, %rdi
subq %rsi, %rdi
cmpq $0x5, %rdi
jb 0x168df
movl -0x8(%rsi,%rdi), %eax
cltd
idivl -0x4(%rsi,%rdi)
movl %eax, 0xc(%rsp)
leaq -0x8(%rcx), %rsi
movq %rsi, 0x158(%rbx)
cmpq 0x160(%rbx), %rsi
je 0x168ce
movl %eax, -0x8(%rcx)
addq $-0x4, %rcx
movq %rcx, 0x158(%rbx)
jmp 0x168df
movq 0x80(%rbx), %rax
movl -0x8(%rax), %ecx
imull -0x4(%rax), %ecx
movl %ecx, 0xc(%rsp)
leaq -0x8(%rax), %rsi
movq %rsi, 0x80(%rbx)
cmpq 0x88(%rbx), %rsi
je 0x169e0
movl %ecx, -0x8(%rax)
addq $-0x4, %rax
movq %rax, 0x80(%rbx)
jmp 0x16bea
leaq 0x150(%rbx), %rdi
leaq 0xc(%rsp), %rdx
callq 0x202ae
cmpb $0x0, 0x218(%rbx)
jne 0x16a31
cmpb $0x0, 0x1f8(%rbx)
jne 0x16a31
cmpb $0x0, 0x14d(%rbx)
jne 0x16a31
movq 0x10(%r15), %rdi
leaq 0x21479(%rip), %rsi     # 0x37d8a
callq 0x70c0
testl %eax, %eax
je 0x1696c
movq 0x10(%r15), %rdi
leaq 0x20f49(%rip), %rsi     # 0x3786e
callq 0x70c0
testl %eax, %eax
je 0x169f2
movq 0x10(%r15), %rdi
leaq 0x20f33(%rip), %rsi     # 0x37870
callq 0x70c0
testl %eax, %eax
jne 0x16a31
movslq 0x310(%rbx), %rcx
movl 0x5f8(%rbx,%rcx,4), %eax
cltd
idivl 0x5fc(%rbx,%rcx,4)
movl %edx, 0x5f8(%rbx,%rcx,4)
jmp 0x16a31
movslq 0x310(%rbx), %rax
movl 0x5fc(%rbx,%rax,4), %ecx
imull 0x5f8(%rbx,%rax,4), %ecx
movl %ecx, 0x5f8(%rbx,%rax,4)
movslq 0x310(%rbx), %rax
movss 0xa238(%rbx,%rax,4), %xmm0
mulss 0xa23c(%rbx,%rax,4), %xmm0
jmp 0x16a28
movq 0x80(%rbx), %rcx
movl -0x8(%rcx), %eax
cltd
idivl -0x4(%rcx)
movl %eax, 0xc(%rsp)
leaq -0x8(%rcx), %rsi
movq %rsi, 0x80(%rbx)
cmpq 0x88(%rbx), %rsi
je 0x169e0
movl %eax, -0x8(%rcx)
addq $-0x4, %rcx
movq %rcx, 0x80(%rbx)
jmp 0x16bea
leaq 0xc(%rsp), %rdx
movq %r14, %rdi
callq 0x202ae
jmp 0x16bea
movslq 0x310(%rbx), %rcx
movl 0x5f8(%rbx,%rcx,4), %eax
cltd
idivl 0x5fc(%rbx,%rcx,4)
movl %eax, 0x5f8(%rbx,%rcx,4)
movslq 0x310(%rbx), %rax
movss 0xa238(%rbx,%rax,4), %xmm0
divss 0xa23c(%rbx,%rax,4), %xmm0
movss %xmm0, 0xa238(%rbx,%rax,4)
cmpb $0x1, 0x218(%rbx)
jne 0x16be4
cmpb $0x0, 0x1f8(%rbx)
jne 0x16be4
cmpb $0x0, 0x14d(%rbx)
jne 0x16be4
movl 0x310(%rbx), %edi
leal 0x1(%rdi), %esi
movq %r14, %rdx
movq %rbx, %rcx
callq 0x12fe7
movq 0x10(%r15), %rdi
leaq 0x21313(%rip), %rsi     # 0x37d8a
callq 0x70c0
testl %eax, %eax
je 0x16af6
movq 0x10(%r15), %rdi
leaq 0x20de3(%rip), %rsi     # 0x3786e
callq 0x70c0
testl %eax, %eax
je 0x16b2c
movq 0x10(%r15), %rdi
leaq 0x20dcd(%rip), %rsi     # 0x37870
callq 0x70c0
testl %eax, %eax
jne 0x16be4
movslq 0x310(%rbx), %rax
cmpb $0x75, 0x341(%rbx,%rax)
je 0x16acf
cmpb $0x75, 0x342(%rbx,%rax)
jne 0x16cdc
movq %r14, %rdi
callq 0x7180
movq %rax, %r15
leaq 0x20dbe(%rip), %rsi     # 0x3789f
movl $0x7, %edx
movq %rax, %rdi
callq 0x73a0
movb $0x75, %bpl
jmp 0x16cfe
movslq 0x310(%rbx), %rcx
movb 0x341(%rbx,%rcx), %al
cmpb $0x66, %al
je 0x16b18
movb 0x342(%rbx,%rcx), %cl
cmpb $0x66, %cl
jne 0x16bf7
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
leaq 0x20d48(%rip), %rsi     # 0x37872
jmp 0x16b60
movslq 0x310(%rbx), %rcx
movb 0x341(%rbx,%rcx), %al
cmpb $0x66, %al
je 0x16b4e
movb 0x342(%rbx,%rcx), %cl
cmpb $0x66, %cl
jne 0x16c26
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
leaq 0x20d35(%rip), %rsi     # 0x37895
movl $0x9, %edx
movq %rax, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
leaq 0x20bf0(%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
movslq 0x310(%rbx), %rax
movb $0x66, %cl
movb %cl, 0x341(%rbx,%rax)
movslq 0x310(%rbx), %rax
movb %cl, 0x342(%rbx,%rax)
decl 0x310(%rbx)
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
cmpb $0x75, %al
setne %bpl
cmpb $0x75, %cl
setne %r12b
movq %r14, %rdi
callq 0x7180
movq %rax, %r15
testb %r12b, %bpl
jne 0x16ccb
leaq 0x20c5d(%rip), %rsi     # 0x3787c
movl $0x8, %edx
jmp 0x16c53
cmpb $0x75, %al
setne %bpl
cmpb $0x75, %cl
setne %r12b
movq %r14, %rdi
callq 0x7180
movq %rax, %r15
testb %r12b, %bpl
jne 0x16d83
leaq 0x20c51(%rip), %rsi     # 0x3789f
movl $0x7, %edx
movq %r15, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r15, %rdi
callq 0x75c0
movq %rax, %r15
leaq 0x20b1e(%rip), %rsi     # 0x37791
movl $0x3, %edx
movq %rax, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r15, %rdi
callq 0x75c0
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
leaq 0x20be3(%rip), %rsi     # 0x37885
movl $0x7, %edx
movq %rax, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r14, %rdi
callq 0x75c0
movslq 0x310(%rbx), %rax
movb $0x75, %cl
jmp 0x16bcf
leaq 0x20bbb(%rip), %rsi     # 0x3788d
movl $0x7, %edx
jmp 0x16d8f
movq %r14, %rdi
callq 0x7180
movq %rax, %r15
leaq 0x20bb9(%rip), %rsi     # 0x378a7
movl $0x6, %edx
movq %rax, %rdi
callq 0x73a0
movb $0x69, %bpl
movl 0x310(%rbx), %esi
movq %r15, %rdi
callq 0x75c0
movq %rax, %r15
leaq 0x20a7b(%rip), %rsi     # 0x37791
movl $0x3, %edx
movq %rax, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r15, %rdi
callq 0x75c0
movslq 0x310(%rbx), %rax
movb %bpl, 0x341(%rbx,%rax)
movslq 0x310(%rbx), %rax
movb $0x75, 0x342(%rbx,%rax)
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
leaq 0x20b4b(%rip), %rsi     # 0x378ae
movl $0x7, %edx
movq %rax, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r14, %rdi
callq 0x75c0
jmp 0x16be4
leaq 0x20b1d(%rip), %rsi     # 0x378a7
movl $0x6, %edx
movq %r15, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r15, %rdi
callq 0x75c0
movq %rax, %r15
leaq 0x209e2(%rip), %rsi     # 0x37791
movl $0x3, %edx
movq %rax, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
incl %esi
movq %r15, %rdi
callq 0x75c0
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
leaq 0x20aa7(%rip), %rsi     # 0x37885
movl $0x7, %edx
movq %rax, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r14, %rdi
callq 0x75c0
movslq 0x310(%rbx), %rax
movb $0x69, %cl
jmp 0x16bcf
nop