diff options
| author | bd <bdunahu@operationnull.com> | 2025-04-17 20:52:55 -0400 |
|---|---|---|
| committer | bd <bdunahu@operationnull.com> | 2025-04-17 20:52:55 -0400 |
| commit | 496a08fbfafb8399c9addaf2501262fee228ffd6 (patch) | |
| tree | 3e87aed03b50673c8e8c53dba98a45f32f979f48 /src/sim/wb.cc | |
| parent | 025cdd8e174fcf1a229355ecaf63861ac388fa63 (diff) | |
| parent | 984ce6eef2e439955ff991f90c2b654be7c6c3f3 (diff) | |
Merge remote-tracking branch 'origin/bdunahu' into dev-sid
Diffstat (limited to 'src/sim/wb.cc')
| -rw-r--r-- | src/sim/wb.cc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/sim/wb.cc b/src/sim/wb.cc index 4e6b2b0..c62468c 100644 --- a/src/sim/wb.cc +++ b/src/sim/wb.cc @@ -28,9 +28,17 @@ void WB::write_handler() throw std::runtime_error("instruction tried to pop a register out of " "an empty queue during writeback."); + if (this->curr_instr->get_mnemonic() == POP) { + // POP performs a second register write + reg = this->checked_out.front(); + this->checked_out.pop_front(); + this->store_register(reg, this->curr_instr->get_s3()); + } + this->checked_out.pop_front(); reg = this->curr_instr->get_checked_out(); this->store_register(reg, this->curr_instr->get_s1()); + } void WB::jump_handler() |
