summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-04-22 23:55:32 -0400
committerbd <bdunahu@operationnull.com>2025-04-22 23:55:32 -0400
commit263a5d86e0b1acde39523bdd9a49521752255c72 (patch)
tree9267d91cf1624a9fc092d5f2f5ddc05cc2716129
parent302bbdc7ac18cd355f9f081cae202f5434427262 (diff)
Remove 'type' field out of InstrDTO
-rw-r--r--inc/id.h2
-rw-r--r--inc/instr.h2
-rw-r--r--inc/instrDTO.h5
-rw-r--r--src/id.cc10
-rw-r--r--src/if.cc1
-rw-r--r--src/wb.cc21
6 files changed, 15 insertions, 26 deletions
diff --git a/inc/id.h b/inc/id.h
index dabf206..39485b6 100644
--- a/inc/id.h
+++ b/inc/id.h
@@ -78,7 +78,7 @@ class ID : public Stage
* @param the resulting third field, which varies per type.
* @param the resulting mnemonic.
*/
- void get_instr_fields(signed int &s1, signed int &s2, signed int &s3, Mnemonic &m, Type &t);
+ void get_instr_fields(signed int &s1, signed int &s2, signed int &s3, Mnemonic &m);
void decode_R_type(signed int &s1, signed int &s2, signed int &s3, Mnemonic &m);
void decode_I_type(signed int &s1, signed int &s2, signed int &s3, Mnemonic &m);
void decode_J_type(signed int &s1, signed int &s2, signed int &s3, Mnemonic &m);
diff --git a/inc/instr.h b/inc/instr.h
index 62af09a..85eae5b 100644
--- a/inc/instr.h
+++ b/inc/instr.h
@@ -62,8 +62,6 @@ enum Mnemonic {
NOP,
};
-enum Type { R, I, J, INV };
-
namespace instr
{
// clang-format off
diff --git a/inc/instrDTO.h b/inc/instrDTO.h
index 7775b20..6ab14b2 100644
--- a/inc/instrDTO.h
+++ b/inc/instrDTO.h
@@ -48,11 +48,6 @@ struct InstrDTO {
* The mnemonic of the instruction.
*/
Mnemonic mnemonic;
- // TODO delete me
- /**
- * Type of the instruction
- */
- Type type;
/**
* The register this instruction checks out.
*/
diff --git a/src/id.cc b/src/id.cc
index 14fe595..0135c21 100644
--- a/src/id.cc
+++ b/src/id.cc
@@ -66,44 +66,38 @@ void ID::advance_helper()
{
signed int s1, s2, s3;
Mnemonic m;
- Type t;
if (curr_instr->mnemonic == NOP)
this->status = OK;
else {
s1 = curr_instr->slot_A;
- get_instr_fields(s1, s2, s3, m, t);
+ get_instr_fields(s1, s2, s3, m);
if (this->status == OK) {
curr_instr->operands.integer.slot_one = s1;
curr_instr->operands.integer.slot_two = s2;
curr_instr->operands.integer.slot_three = s3;
curr_instr->mnemonic = m;
- curr_instr->type = t;
}
}
}
void ID::get_instr_fields(
- signed int &s1, signed int &s2, signed int &s3, Mnemonic &m, Type &t)
+ signed int &s1, signed int &s2, signed int &s3, Mnemonic &m)
{
unsigned int type;
this->split_instr(s1, type, m);
switch (type) {
case 0b00:
- t = R;
this->decode_R_type(s1, s2, s3, m);
break;
case 0b01:
- t = I;
this->decode_I_type(s1, s2, s3, m);
break;
case 0b10:
- t = J;
this->decode_J_type(s1, s2, s3, m);
break;
case 0b11:
- t = INV;
this->status = OK;
}
}
diff --git a/src/if.cc b/src/if.cc
index fd795c7..62a105c 100644
--- a/src/if.cc
+++ b/src/if.cc
@@ -59,7 +59,6 @@ void IF::advance_helper()
this->curr_instr = new InstrDTO();
this->curr_instr->slot_A = bits;
this->curr_instr->slot_B = this->pc;
- this->curr_instr->type = INV;
this->curr_instr->is_squashed = 0;
this->curr_instr->checked_out = -1;
this->curr_instr->mnemonic = ADD;
diff --git a/src/wb.cc b/src/wb.cc
index 08d512b..cd24c6a 100644
--- a/src/wb.cc
+++ b/src/wb.cc
@@ -19,13 +19,12 @@
#include "instrDTO.h"
#include "response.h"
#include "stage.h"
-#include <array>
#include <algorithm>
+#include <array>
void WB::advance_helper()
{
- if (this->curr_instr->mnemonic != NOP &&
- this->curr_instr->type != INV) {
+ if (this->curr_instr->mnemonic != NOP) {
if (this->curr_instr->checked_out > 0)
this->write_handler();
else if (this->should_jump())
@@ -46,30 +45,34 @@ void WB::write_handler()
// POP performs a second register write
reg = this->checked_out.front();
this->checked_out.pop_front();
- this->store_register(reg, this->curr_instr->operands.integer.slot_three);
+ this->store_register(
+ reg, this->curr_instr->operands.integer.slot_three);
}
this->checked_out.pop_front();
reg = this->curr_instr->checked_out;
this->store_register(reg, this->curr_instr->operands.integer.slot_one);
-
}
void WB::jump_handler()
{
if (this->curr_instr->operands.integer.slot_one > 0) {
if (this->curr_instr->mnemonic == JAL)
- this->gprs[1] = this->curr_instr->slot_B + 1;;
+ this->gprs[1] = this->curr_instr->slot_B + 1;
+ ;
this->pc = this->curr_instr->operands.integer.slot_one;
this->checked_out = {};
this->next->squash();
}
}
+// TODO clean this up...
bool WB::should_jump()
{
- Type t;
+ vector<Mnemonic> Js = {JMP, JRL, JAL, BEQ, BGT, BUF, BOF, PUSH, POP, RET};
- t = this->curr_instr->type;
- return t == J;
+ if (find(Js.begin(), Js.end(), this->curr_instr->mnemonic) != Js.end())
+ return true;
+ else
+ return false;
}