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

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

			}

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


				if(contxt.enum_constant){
					if( OPERATOR != NULL && *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 != NULL && *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 != NULL && *OPERATOR == "<<" ){
						contxt.eval[contxt.Regs] = contxt.eval[contxt.Regs] << contxt.eval[contxt.Regs+1];
						contxt.eval[contxt.Regs+1]=0;
					}
					else if(OPERATOR != NULL && *OPERATOR == ">>"){
						contxt.eval[contxt.Regs] = contxt.eval[contxt.Regs] >> contxt.eval[contxt.Regs+1];
						contxt.eval[contxt.Regs+1]=0;
					}
				}
				if (contxt.function  && !contxt.sizeof_ && !contxt.enum_constant){
					
					typePromotion(contxt.Regs,contxt.Regs+1,file,contxt);
					if( OPERATOR != NULL && *OPERATOR == "<<" ){
						file << std::endl << "\tsllv\t$" << contxt.Regs << ", $" << contxt.Regs << ", $" << contxt.Regs+1;
						contxt.regType[contxt.Regs]='i';
						contxt.regType[contxt.Regs+1]='i';
					}
					else if(  OPERATOR != NULL && *OPERATOR == ">>" ){
	
						if(contxt.regType[contxt.Regs] == 'u' || contxt.regType[contxt.Regs+1] == 'u'){
							file << std::endl << "\tsrlv\t$" << contxt.Regs << ", $" << contxt.Regs << ", $" << contxt.Regs+1;
							contxt.regType[contxt.Regs]='u';
							contxt.regType[contxt.Regs+1]='u';
						}
						else{
							file << std::endl << "\tsrav\t$" << contxt.Regs << ", $" << contxt.Regs << ", $" << contxt.Regs+1;
							contxt.regType[contxt.Regs]='i';
							contxt.regType[contxt.Regs+1]='i';
						}
					}
					
				}
				contxt.Regs--;
			}
	}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
cmpq $0x0, 0x10(%rdi)
jne 0x1623f
movq 0x8(%r15), %rdi
testq %rdi, %rdi
je 0x1623f
movq %r14, %rsi
movq %rbx, %rdx
callq 0x166c6
cmpb $0x1, 0x74(%rbx)
jne 0x162f8
cmpb $0x1, 0x21b(%rbx)
jne 0x162f8
cmpb $0x1, 0x218(%rbx)
jne 0x162f8
movq 0x18(%r15), %rdi
testq %rdi, %rdi
je 0x1628d
cmpq $0x0, 0x8(%r15)
je 0x1628d
movq %r14, %rsi
movq %rbx, %rdx
callq 0x16212
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x166c6
movq 0x80(%rbx), %rax
subq 0x78(%rbx), %rax
cmpq $0x5, %rax
jb 0x166a5
leaq 0x78(%rbx), %r14
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x162c3
leaq 0x2155a(%rip), %rsi     # 0x37810
callq 0x70c0
testl %eax, %eax
je 0x16409
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x166a5
leaq 0x2153c(%rip), %rsi     # 0x37813
callq 0x70c0
testl %eax, %eax
jne 0x166a5
movq 0x80(%rbx), %rax
movl -0x8(%rax), %edx
movb -0x4(%rax), %cl
sarl %cl, %edx
jmp 0x16418
movq 0x18(%r15), %rdi
testq %rdi, %rdi
je 0x166a5
cmpb $0x0, 0x21b(%rbx)
jne 0x166a5
cmpq $0x0, 0x8(%r15)
je 0x166a5
cmpq $0x0, 0x10(%r15)
je 0x166a5
movq %r14, %rsi
movq %rbx, %rdx
callq 0x16212
incl 0x310(%rbx)
movq 0x8(%r15), %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x166c6
cmpb $0x1, 0x14d(%rbx)
jne 0x16466
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x1636e
leaq 0x214ab(%rip), %rsi     # 0x37810
callq 0x70c0
testl %eax, %eax
je 0x163b9
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x16466
leaq 0x21491(%rip), %rsi     # 0x37813
callq 0x70c0
testl %eax, %eax
jne 0x16466
movq 0x150(%rbx), %rcx
movq 0x158(%rbx), %rax
movq %rax, %rsi
subq %rcx, %rsi
cmpq $0x5, %rsi
jb 0x16466
movl -0x8(%rcx,%rsi), %edx
movb -0x4(%rcx,%rsi), %cl
sarl %cl, %edx
jmp 0x163e1
movq 0x150(%rbx), %rcx
movq 0x158(%rbx), %rax
movq %rax, %rsi
subq %rcx, %rsi
cmpq $0x5, %rsi
jb 0x16466
movl -0x4(%rcx,%rsi), %edx
movb -0x8(%rcx,%rsi), %cl
shll %cl, %edx
movl %edx, 0xc(%rsp)
leaq -0x8(%rax), %rsi
movq %rsi, 0x158(%rbx)
cmpq 0x160(%rbx), %rsi
je 0x16455
movl %edx, -0x8(%rax)
addq $-0x4, %rax
movq %rax, 0x158(%rbx)
jmp 0x16466
movq 0x80(%rbx), %rax
movl -0x4(%rax), %edx
movb -0x8(%rax), %cl
shll %cl, %edx
movl %edx, 0xc(%rsp)
leaq -0x8(%rax), %rsi
movq %rsi, 0x80(%rbx)
cmpq 0x88(%rbx), %rsi
je 0x16443
movl %edx, -0x8(%rax)
addq $-0x4, %rax
movq %rax, 0x80(%rbx)
jmp 0x166a5
leaq 0xc(%rsp), %rdx
movq %r14, %rdi
callq 0x20a34
jmp 0x166a5
leaq 0x150(%rbx), %rdi
leaq 0xc(%rsp), %rdx
callq 0x20a34
cmpb $0x0, 0x218(%rbx)
jne 0x164f5
cmpb $0x0, 0x1f8(%rbx)
jne 0x164f5
cmpb $0x0, 0x14d(%rbx)
jne 0x164f5
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x1649e
leaq 0x2137b(%rip), %rsi     # 0x37810
callq 0x70c0
testl %eax, %eax
je 0x164ce
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x164f5
leaq 0x21365(%rip), %rsi     # 0x37813
callq 0x70c0
testl %eax, %eax
jne 0x164f5
movslq 0x310(%rbx), %rax
movb 0x5fc(%rbx,%rax,4), %cl
sarl %cl, 0x5f8(%rbx,%rax,4)
jmp 0x164e3
movslq 0x310(%rbx), %rax
movb 0x5fc(%rbx,%rax,4), %cl
shll %cl, 0x5f8(%rbx,%rax,4)
movslq 0x310(%rbx), %rax
movl $0x0, 0x5fc(%rbx,%rax,4)
cmpb $0x1, 0x218(%rbx)
jne 0x1669f
cmpb $0x0, 0x1f8(%rbx)
jne 0x1669f
cmpb $0x0, 0x14d(%rbx)
jne 0x1669f
movl 0x310(%rbx), %edi
leal 0x1(%rdi), %esi
movq %r14, %rdx
movq %rbx, %rcx
callq 0x138f3
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x1654d
leaq 0x212d0(%rip), %rsi     # 0x37810
callq 0x70c0
testl %eax, %eax
je 0x16609
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x1669f
leaq 0x212b2(%rip), %rsi     # 0x37813
callq 0x70c0
testl %eax, %eax
jne 0x1669f
movslq 0x310(%rbx), %rax
cmpb $0x75, 0x341(%rbx,%rax)
je 0x1658d
cmpb $0x75, 0x342(%rbx,%rax)
jne 0x166af
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
leaq 0x2127f(%rip), %rsi     # 0x3781e
movl $0x7, %edx
movq %rax, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
leaq 0x211cd(%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
movb $0x75, %al
jmp 0x16683
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
leaq 0x211fb(%rip), %rsi     # 0x37816
movl $0x7, %edx
movq %rax, %rdi
callq 0x73a0
movl 0x310(%rbx), %esi
movq %r14, %rdi
callq 0x75c0
movq %rax, %r14
leaq 0x21151(%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
movb $0x69, %al
movslq 0x310(%rbx), %rcx
movb %al, 0x341(%rbx,%rcx)
movslq 0x310(%rbx), %rcx
movb %al, 0x342(%rcx,%rbx)
decl 0x310(%rbx)
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %r14, %rdi
callq 0x7180
movq %rax, %r14
leaq 0x21165(%rip), %rsi     # 0x37826
jmp 0x1661b