// File: /workspace/github_c_makefile_star2_O0/been-jamming[P]MinimalCC/expression.c
// Function: operation_equals_func
void operation_equals_func(char *reg_a, char *reg_b, value *value_a, value *value_b, FILE *output_file, type *output_type){
	if(peek_type(&(value_a->data_type)) == type_function || peek_type(&(value_b->data_type)) == type_function){
		snprintf(error_message, sizeof(error_message), "Cannot compare function types");
		do_error(1);
	}
	if(peek_type(&(value_a->data_type)) == type_pointer){
		if(peek_type(&(value_b->data_type)) == type_pointer){
			pop_type(&(value_a->data_type));
			pop_type(&(value_b->data_type));
			if(!types_equal(&(value_a->data_type), &(value_b->data_type))){
				snprintf(warning_message, sizeof(warning_message), "Comparing incompatible data types");
				do_warning();
			}
			fileprint(output_file, "seq %s, %s, %s\n", reg_a, reg_a, reg_b);
			*output_type = INT_TYPE;
		} else {
			snprintf(warning_message, sizeof(warning_message), "Comparing pointer and non-pointer types");
			do_warning();
			fileprint(output_file, "seq %s, %s, %s\n", reg_a, reg_a, reg_b);
			*output_type = INT_TYPE;
		}
	} else {
		if(peek_type(&(value_b->data_type)) == type_pointer){
			snprintf(warning_message, sizeof(warning_message), "Comparing pointer and non-pointer types");
			do_warning();
		}
		fileprint(output_file, "seq %s, %s, %s\n", reg_a, reg_a, reg_b);
		*output_type = INT_TYPE;
	}
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq %rsi, 0x28(%rsp)
movq %rdx, 0x20(%rsp)
movq %rcx, 0x18(%rsp)
movq %r8, 0x10(%rsp)
movq %r9, 0x8(%rsp)
movq 0x20(%rsp), %rdi
addq $0x10, %rdi
callq 0xbdb0
cmpl $0x5, %eax
je 0x2798
movq 0x18(%rsp), %rdi
addq $0x10, %rdi
callq 0xbdb0
cmpl $0x5, %eax
jne 0x27bc
leaq 0xed91(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0xaea8(%rip), %rdx      # 0xd653
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
movq 0x20(%rsp), %rdi
addq $0x10, %rdi
callq 0xbdb0
cmpl $0x4, %eax
jne 0x28d7
movq 0x18(%rsp), %rdi
addq $0x10, %rdi
callq 0xbdb0
cmpl $0x4, %eax
jne 0x287c
movq 0x20(%rsp), %rdi
addq $0x10, %rdi
callq 0xbe20
movq 0x18(%rsp), %rdi
addq $0x10, %rdi
callq 0xbe20
movq 0x20(%rsp), %rdi
addq $0x10, %rdi
movq 0x18(%rsp), %rsi
addq $0x10, %rsi
callq 0xbec0
cmpb $0x0, %al
jne 0x2842
leaq 0xec08(%rip), %rdi      # 0x11430
movl $0x100, %esi            # imm = 0x100
leaq 0xae3d(%rip), %rdx      # 0xd671
movb $0x0, %al
callq 0x10b0
movb $0x0, %al
callq 0x8770
movq 0x10(%rsp), %rdi
movq 0x30(%rsp), %rdx
movq 0x30(%rsp), %rcx
movq 0x28(%rsp), %r8
leaq 0xae36(%rip), %rsi      # 0xd693
movb $0x0, %al
callq 0x16f0
movq 0x8(%rsp), %rdi
leaq 0xe958(%rip), %rsi      # 0x111c8
movl $0x40, %edx
callq 0x1120
jmp 0x28d5
leaq 0xebad(%rip), %rdi      # 0x11430
movl $0x100, %esi            # imm = 0x100
leaq 0xae14(%rip), %rdx      # 0xd6a3
movb $0x0, %al
callq 0x10b0
movb $0x0, %al
callq 0x8770
movq 0x10(%rsp), %rdi
movq 0x30(%rsp), %rdx
movq 0x30(%rsp), %rcx
movq 0x28(%rsp), %r8
leaq 0xaddb(%rip), %rsi      # 0xd693
movb $0x0, %al
callq 0x16f0
movq 0x8(%rsp), %rdi
leaq 0xe8fd(%rip), %rsi      # 0x111c8
movl $0x40, %edx
callq 0x1120
jmp 0x2943
movq 0x18(%rsp), %rdi
addq $0x10, %rdi
callq 0xbdb0
cmpl $0x4, %eax
jne 0x290b
leaq 0xeb3f(%rip), %rdi      # 0x11430
movl $0x100, %esi            # imm = 0x100
leaq 0xada6(%rip), %rdx      # 0xd6a3
movb $0x0, %al
callq 0x10b0
movb $0x0, %al
callq 0x8770
movq 0x10(%rsp), %rdi
movq 0x30(%rsp), %rdx
movq 0x30(%rsp), %rcx
movq 0x28(%rsp), %r8
leaq 0xad6d(%rip), %rsi      # 0xd693
movb $0x0, %al
callq 0x16f0
movq 0x8(%rsp), %rdi
leaq 0xe88f(%rip), %rsi      # 0x111c8
movl $0x40, %edx
callq 0x1120
addq $0x38, %rsp
retq
nopl (%rax,%rax)