summaryrefslogtreecommitdiff
path: root/src/sim/mm.cc
blob: cd8505638d2ada7ac0c7fb149b857a5c8c30e603 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "mm.h"
#include "accessor.h"
#include "instrDTO.h"
#include "response.h"
#include "stage.h"

MM::MM(Stage *stage) : Stage(stage) { this->id = MEM; } 

void MM::advance_helper() {
	Response r;
	signed int data;
	if(this->curr_instr){
		if (this->curr_instr->get_mnemonic() == LOAD) {
			r = this->storage->read_word(this->id, this->curr_instr->get_s1(), data);
			if(r == OK){
				this->status = OK;
				this->curr_instr->set_s2(data);
			}
		} else if (this->curr_instr->get_mnemonic() == STORE) {
			r = this->storage->write_word(this->id, this->curr_instr->get_s2(), this->curr_instr->get_s1());
			if(r == OK){
				this->status = OK;
			}
		} else {
			// Mem has no work so just forward the instruction to WB
			this->status = OK;
		}
	} 
}