aboutsummaryrefslogtreecommitdiff
path: root/riscv/decode.h
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2013-09-27 00:15:35 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2013-09-27 00:15:35 -0700
commitc8a8c07ec296ce36dc04f2448faf48fe1c502a2d (patch)
treea497ddda532182cc10aa2f82a555e0d3ab4d220c /riscv/decode.h
parent6554cdd3fb42bc3833a1888f87dfc67c9099500c (diff)
downloadspike-c8a8c07ec296ce36dc04f2448faf48fe1c502a2d.zip
spike-c8a8c07ec296ce36dc04f2448faf48fe1c502a2d.tar.gz
spike-c8a8c07ec296ce36dc04f2448faf48fe1c502a2d.tar.bz2
Use WRITE_RD/WRITE_FRD macros to write registers
Diffstat (limited to 'riscv/decode.h')
-rw-r--r--riscv/decode.h26
1 files changed, 4 insertions, 22 deletions
diff --git a/riscv/decode.h b/riscv/decode.h
index 3d20b62..bde921f 100644
--- a/riscv/decode.h
+++ b/riscv/decode.h
@@ -69,22 +69,6 @@ private:
reg_t imm_sign() { return int64_t(int32_t(b) >> 31); }
};
-template <class T>
-class write_port_t
-{
-public:
- write_port_t(T& _t) : t(_t) {}
- T& operator = (const T& rhs)
- {
- return t = rhs;
- }
- operator T()
- {
- return t;
- }
-private:
- T& t;
-};
template <class T, size_t N, bool zero_reg>
class regfile_t
{
@@ -93,11 +77,9 @@ public:
{
memset(data, 0, sizeof(data));
}
- write_port_t<T> write_port(size_t i)
+ void write(size_t i, T value)
{
- if (zero_reg)
- const_cast<T&>(data[0]) = 0;
- return write_port_t<T>(data[i]);
+ data[i] = value;
}
const T& operator [] (size_t i) const
{
@@ -113,11 +95,11 @@ private:
#define MMU (*p->get_mmu())
#define RS1 p->get_state()->XPR[insn.rs1()]
#define RS2 p->get_state()->XPR[insn.rs2()]
-#define RD p->get_state()->XPR.write_port(insn.rd())
+#define WRITE_RD(value) p->get_state()->XPR.write(insn.rd(), value)
#define FRS1 p->get_state()->FPR[insn.rs1()]
#define FRS2 p->get_state()->FPR[insn.rs2()]
#define FRS3 p->get_state()->FPR[insn.rs3()]
-#define FRD p->get_state()->FPR.write_port(insn.rd())
+#define WRITE_FRD(value) p->get_state()->FPR.write(insn.rd(), value)
#define SHAMT (insn.i_imm() & 0x3F)
#define BRANCH_TARGET (pc + insn.sb_imm())
#define JUMP_TARGET (pc + insn.uj_imm())