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;
}
}
}
|