diff options
author | bd <bdunahu@operationnull.com> | 2025-03-31 23:49:13 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-03-31 23:49:13 -0400 |
commit | 2235e18ad81be4ed7097cd9cab93e35a990ec327 (patch) | |
tree | 08f0db7cdc05fc2447f90da2cb7bde92590ba0cb | |
parent | 723d582d1108975caf071a76c1556a01fb0553d1 (diff) |
Partial commit before merge
-rw-r--r-- | src/sim/ex.cc | 22 | ||||
-rw-r--r-- | src/sim/stage.cc | 5 |
2 files changed, 12 insertions, 15 deletions
diff --git a/src/sim/ex.cc b/src/sim/ex.cc index 95cce8d..83c72d5 100644 --- a/src/sim/ex.cc +++ b/src/sim/ex.cc @@ -342,17 +342,13 @@ void EX::advance_helper() signed int s1, s2, s3; Mnemonic m; - // it may be good to ensure we are not doing - // work that has already been done - if (this->curr_instr) { - m = this->curr_instr->get_mnemonic(); - s1 = this->curr_instr->get_s1(); - s2 = this->curr_instr->get_s2(); - s3 = this->curr_instr->get_s3(); - - this->instr_map[m](s1, s2, s3); - - this->curr_instr->set_s1(s1); - this->status = OK; - } + m = this->curr_instr->get_mnemonic(); + s1 = this->curr_instr->get_s1(); + s2 = this->curr_instr->get_s2(); + s3 = this->curr_instr->get_s3(); + + this->instr_map[m](s1, s2, s3); + + this->curr_instr->set_s1(s1); + this->status = OK; } diff --git a/src/sim/stage.cc b/src/sim/stage.cc index 5b81e4c..11eb822 100644 --- a/src/sim/stage.cc +++ b/src/sim/stage.cc @@ -34,8 +34,9 @@ InstrDTO *Stage::advance(Response p) InstrDTO *r = nullptr; Response n; - this->advance_helper(); - if (this->curr_instr != nullptr && p == OK) { + if (this->curr_instr && this->status != OK) + this->advance_helper(); + if (this->curr_instr && p == OK) { // mutual consent this->curr_instr->set_time_of(this->id, this->clock_cycle); r = new InstrDTO(*this->curr_instr); |