summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/sim/id.cc2
-rw-r--r--src/sim/instrDTO.cc2
-rw-r--r--src/sim/stage.cc2
-rw-r--r--src/sim/wb.cc4
4 files changed, 6 insertions, 4 deletions
diff --git a/src/sim/id.cc b/src/sim/id.cc
index deb69fb..0b75b64 100644
--- a/src/sim/id.cc
+++ b/src/sim/id.cc
@@ -50,7 +50,7 @@ void ID::advance_helper()
// it may be good to ensure we are not doing
// work that has already been done
- if (this->curr_instr) {
+ if (this->curr_instr && this->curr_instr->get_mnemonic() == NONE) {
s1 = curr_instr->get_instr_bits();
get_instr_fields(s1, s2, s3, m ,t);
if (this->status == OK) {
diff --git a/src/sim/instrDTO.cc b/src/sim/instrDTO.cc
index 28364b7..b33c26b 100644
--- a/src/sim/instrDTO.cc
+++ b/src/sim/instrDTO.cc
@@ -7,7 +7,7 @@ InstrDTO::InstrDTO()
this->s1 = 0;
this->s2 = 0;
this->s3 = 0;
- this->mnemonic = NOP;
+ this->mnemonic = NONE;
this->type = INV;
}
diff --git a/src/sim/stage.cc b/src/sim/stage.cc
index 26b6ee6..be69d77 100644
--- a/src/sim/stage.cc
+++ b/src/sim/stage.cc
@@ -80,7 +80,7 @@ bool Stage::is_checked_out(signed int r)
}
void Stage::squash(){
- this->curr_instr = nullptr;
+ this->curr_instr->set_mnemonic(NOP);
this->status = OK;
if(this->next){
this->next->squash();
diff --git a/src/sim/wb.cc b/src/sim/wb.cc
index 480af05..ac47f25 100644
--- a/src/sim/wb.cc
+++ b/src/sim/wb.cc
@@ -15,7 +15,9 @@ void WB::advance_helper() {
if(reg >= GPR_NUM){
// TODO: handle vector instructions
} else {
- this->gprs[reg] = this->curr_instr->get_s1();
+ if(this->curr_instr->get_mnemonic() != STORE && this->curr_instr->get_mnemonic() != STOREV){
+ this->gprs[reg] = this->curr_instr->get_s1();
+ }
}
}
} else if (this->curr_instr->get_type() == J) {