diff options
author | Siddarth Suresh <155843085+SiddarthSuresh98@users.noreply.github.com> | 2025-04-27 09:12:50 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-27 09:12:50 -0400 |
commit | 5653b2a033e7a4173d2f178b5ce52384666d3d7b (patch) | |
tree | 5c8fc7282ad1ce0c215786a70b35296645df2a1b /src/sim/wb.cc | |
parent | 3d0133c2f793e82d7519d8e2c5023114cd0f0eab (diff) | |
parent | a4dd1f00a5d0108058fb3bfbd5f399a507792859 (diff) |
Merge pull request #68 from bdunahu/bdunahu
[WIP] Pipeline cleanup and revisited GUI storage display
Diffstat (limited to 'src/sim/wb.cc')
-rw-r--r-- | src/sim/wb.cc | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/src/sim/wb.cc b/src/sim/wb.cc deleted file mode 100644 index 0348b51..0000000 --- a/src/sim/wb.cc +++ /dev/null @@ -1,78 +0,0 @@ -// Simulator for the RISC-V[ECTOR] mini-ISA -// Copyright (C) 2025 Siddarth Suresh -// Copyright (C) 2025 bdunahu - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <https://www.gnu.org/licenses/>. - -#include "wb.h" -#include "accessor.h" -#include "instrDTO.h" -#include "response.h" -#include "stage.h" -#include <array> -#include <algorithm> - -WB::WB(Stage *stage) : Stage(stage) { this->id = WRITE; } - -void WB::advance_helper() -{ - if (this->curr_instr->get_mnemonic() != NOP && - this->curr_instr->get_type() != INV) { - if (this->curr_instr->get_checked_out() > 0) - this->write_handler(); - else if (this->should_jump()) - this->jump_handler(); - } - this->status = OK; -} - -void WB::write_handler() -{ - signed int reg; - - if (this->checked_out.size() < 1) - 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() -{ - if (this->curr_instr->get_s1() > 0) { - if (this->curr_instr->get_mnemonic() == JAL) - this->gprs[1] = this->curr_instr->get_pc() + 1;; - this->pc = this->curr_instr->get_s1(); - this->checked_out = {}; - this->next->squash(); - } -} - -bool WB::should_jump() -{ - Type t; - - t = this->curr_instr->get_type(); - return t == J; -} |