// File: saeefahmad[P]MIPS-pipeline-simulator/memaccess.cpp
// Function: MemaccessStage::process()
void MemaccessStage::process() {
	Instruction instr;
	instr = this->ins;
	if(!instr.isNop() && !this->isStalled()){
		if(instr.isMemory()){
			if(instr.isLoad()){
				instr.setLoadMemData(this->getData(instr.getAluOut()));
			} else if(instr.isStore()){
				this->setData(instr.getAluOut(), instr.getB());
				this->incStatistics((StatisticsType) 2);
			}
		} else if(instr.isBranch()){
			if(instr.getCond()){
				this->setPc(instr.getAluOut());
			}
			this->incStatistics((StatisticsType) 2);
		}

	}
	this->nextStage->setInstruction(instr);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x88(%rbp)
leaq -0x64(%rbp), %rdi
movq %rdi, -0x80(%rbp)
callq 0x8480
movq -0x88(%rbp), %rsi
movq -0x80(%rbp), %rdi
addq $0x8, %rsi
callq 0x86a0
jmp 0x7d7d
leaq -0x64(%rbp), %rdi
callq 0x7510
movb %al, -0x89(%rbp)
jmp 0x7d8e
movb -0x89(%rbp), %al
testb $0x1, %al
jne 0x7f73
jmp 0x7d9e
movq -0x88(%rbp), %rdi
callq 0x74f0
movb %al, -0x8a(%rbp)
jmp 0x7db2
movb -0x8a(%rbp), %al
testb $0x1, %al
jne 0x7f73
jmp 0x7dc2
leaq -0x64(%rbp), %rdi
callq 0x7570
movb %al, -0x8b(%rbp)
jmp 0x7dd3
movb -0x8b(%rbp), %al
testb $0x1, %al
jne 0x7de2
jmp 0x7eeb
leaq -0x64(%rbp), %rdi
callq 0x66c0
movb %al, -0x8c(%rbp)
jmp 0x7df3
movb -0x8c(%rbp), %al
testb $0x1, %al
jne 0x7dff
jmp 0x7e68
leaq 0x597a(%rip), %rax      # 0xd780
movq (%rax), %rax
movq %rax, -0x98(%rbp)
leaq -0x64(%rbp), %rdi
callq 0x8020
movl %eax, -0x90(%rbp)
jmp 0x7e21
movq -0x98(%rbp), %rax
movl -0x90(%rbp), %edi
callq *%rax
movl %eax, -0x9c(%rbp)
jmp 0x7e38
movl -0x9c(%rbp), %esi
leaq -0x64(%rbp), %rdi
callq 0x8000
jmp 0x7e49
jmp 0x7ee6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x64(%rbp), %rdi
callq 0x87e0
jmp 0x7f9b
leaq -0x64(%rbp), %rdi
callq 0x66e0
movb %al, -0x9d(%rbp)
jmp 0x7e79
movb -0x9d(%rbp), %al
testb $0x1, %al
jne 0x7e85
jmp 0x7ee4
leaq 0x58fc(%rip), %rax      # 0xd788
movq (%rax), %rax
movq %rax, -0xb0(%rbp)
leaq -0x64(%rbp), %rdi
callq 0x8020
movl %eax, -0xa4(%rbp)
jmp 0x7ea7
leaq -0x64(%rbp), %rdi
callq 0x7c40
movl %eax, -0xb4(%rbp)
jmp 0x7eb8
movq -0xb0(%rbp), %rax
movl -0xb4(%rbp), %esi
movl -0xa4(%rbp), %edi
callq *%rax
jmp 0x7ecf
leaq 0x58ca(%rip), %rax      # 0xd7a0
movq (%rax), %rax
movl $0x2, %edi
callq *%rax
jmp 0x7ee2
jmp 0x7ee4
jmp 0x7ee6
jmp 0x7f71
leaq -0x64(%rbp), %rdi
callq 0x66a0
movb %al, -0xb5(%rbp)
jmp 0x7efc
movb -0xb5(%rbp), %al
testb $0x1, %al
jne 0x7f08
jmp 0x7f6f
leaq -0x64(%rbp), %rdi
callq 0x8040
movb %al, -0xb6(%rbp)
jmp 0x7f19
movb -0xb6(%rbp), %al
testb $0x1, %al
jne 0x7f25
jmp 0x7f5a
leaq 0x5814(%rip), %rax      # 0xd740
movq (%rax), %rax
movq %rax, -0xc8(%rbp)
leaq -0x64(%rbp), %rdi
callq 0x8020
movl %eax, -0xbc(%rbp)
jmp 0x7f47
movq -0xc8(%rbp), %rax
movl -0xbc(%rbp), %edi
callq *%rax
jmp 0x7f58
jmp 0x7f5a
leaq 0x583f(%rip), %rax      # 0xd7a0
movq (%rax), %rax
movl $0x2, %edi
callq *%rax
jmp 0x7f6d
jmp 0x7f6f
jmp 0x7f71
jmp 0x7f73
movq -0x88(%rbp), %rax
movq 0x78(%rax), %rdi
leaq -0x64(%rbp), %rsi
callq 0x6d40
jmp 0x7f89
leaq -0x64(%rbp), %rdi
callq 0x87e0
addq $0xd0, %rsp
popq %rbp
retq
movq -0x70(%rbp), %rdi
callq 0x2200
nopw %cs:(%rax,%rax)