summaryrefslogtreecommitdiff
path: root/src/sim/stage.cc
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-04-22 20:55:05 -0400
committerbd <bdunahu@operationnull.com>2025-04-22 20:55:05 -0400
commitbaacedcc858d8d4857282cc7fb1881a11048a5bc (patch)
treed095ff30b02c4f3f1e811c371cb4a83ce00d9533 /src/sim/stage.cc
parent95d09e12792cf5ececd32b8dc84f2cd090c496ef (diff)
Remove subfolders
Diffstat (limited to 'src/sim/stage.cc')
-rw-r--r--src/sim/stage.cc130
1 files changed, 0 insertions, 130 deletions
diff --git a/src/sim/stage.cc b/src/sim/stage.cc
deleted file mode 100644
index b7be595..0000000
--- a/src/sim/stage.cc
+++ /dev/null
@@ -1,130 +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 "stage.h"
-#include <array>
-#include <deque>
-
-Stage::Stage(Stage *next)
-{
- this->next = next;
- this->curr_instr = nullptr;
- this->status = WAIT;
-}
-
-Stage::~Stage() { delete this->next; };
-
-std::array<int, GPR_NUM> Stage::gprs;
-std::array<int, V_NUM> Stage::vrs;
-std::deque<signed int> Stage::checked_out;
-unsigned int Stage::pc;
-Storage *Stage::storage;
-bool Stage::is_pipelined;
-bool Stage::is_empty;
-int Stage::clock_cycle;
-
-bool Stage::get_condition(CC c) { return (this->gprs[3] >> c) & 1; }
-
-InstrDTO *Stage::advance(Response p)
-{
- InstrDTO *r = nullptr;
- InstrDTO *s = nullptr;
- Response n;
-
- if (this->curr_instr && this->curr_instr->is_squashed() == 1)
- this->status = OK;
- if (this->curr_instr && this->status != OK) {
- this->advance_helper();
- }
- if (this->status == OK && p == WAIT && this->curr_instr) {
- // mutual consent
- r = new InstrDTO(*this->curr_instr);
- delete curr_instr;
- curr_instr = nullptr;
- this->status = WAIT;
- }
-
- n = (p != WAIT || this->status != WAIT) ? STALLED : WAIT;
- s = this->next->advance(n);
- if (s)
- this->curr_instr = s;
- return r;
-}
-
-std::vector<int> Stage::stage_info()
-{
- std::vector<int> info;
- if (this->curr_instr) {
- info.push_back(this->curr_instr->get_mnemonic());
- info.push_back(this->curr_instr->is_squashed());
- info.push_back(this->curr_instr->get_s1());
- info.push_back(this->curr_instr->get_s2());
- info.push_back(this->curr_instr->get_s3());
- }
- return info;
-}
-
-void Stage::set_condition(CC c, bool v)
-{
- if (v)
- this->gprs[3] = this->gprs[3] | 1 << c;
- else
- this->gprs[3] = this->gprs[3] & ~(1 << c);
-}
-
-signed int Stage::dereference_register(signed int v)
-{
- signed int r;
-
- if (v < 0 || v >= GPR_NUM + V_NUM) {
- throw std::out_of_range(
- "instruction tried to access register which does not exist");
- }
-
- r = (v >= GPR_NUM) ? this->vrs[v % GPR_NUM] : this->gprs[v];
- return r;
-}
-
-void Stage::store_register(signed int v, signed int d)
-{
- if (v < 0 || v >= GPR_NUM + V_NUM) {
- throw std::out_of_range(
- "instruction tried to access register which does not exist");
- }
-
- if (v >= GPR_NUM)
- this->vrs[v % GPR_NUM] = d;
- else
- this->gprs[v] = d;
-}
-
-bool Stage::is_checked_out(signed int r)
-{
- return std::find(this->checked_out.begin(), this->checked_out.end(), r) !=
- this->checked_out.end();
-}
-
-void Stage::squash()
-{
- if (curr_instr) {
- this->curr_instr->squash();
- this->status = OK;
- }
- if (this->next) {
- this->next->squash();
- }
-}