aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>2010-10-11 17:16:00 -0700
committerAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>2010-10-11 17:16:00 -0700
commitd3cb781e165427412b299b6034289b8458472790 (patch)
tree6bca19f49dd7a894221e82a9eb7d8e5180ef72fb
parent9222fb8ab846e1c155546412662cb50a9da7c265 (diff)
downloadspike-d3cb781e165427412b299b6034289b8458472790.zip
spike-d3cb781e165427412b299b6034289b8458472790.tar.gz
spike-d3cb781e165427412b299b6034289b8458472790.tar.bz2
[sim] added writeback tracing
-rw-r--r--riscv/decode.h28
1 files changed, 26 insertions, 2 deletions
diff --git a/riscv/decode.h b/riscv/decode.h
index 9a0632a..56157d3 100644
--- a/riscv/decode.h
+++ b/riscv/decode.h
@@ -119,11 +119,35 @@ union insn_t
uint32_t bits;
};
+#if 0
+#include <stdio.h>
+class trace_writeback
+{
+public:
+ trace_writeback(reg_t* _rf, int _rd) : rf(_rf), rd(_rd) {}
+
+ reg_t operator = (reg_t rhs)
+ {
+ printf("R[%x] <= %llx\n",rd,(long long)rhs);
+ rf[rd] = rhs;
+ return rhs;
+ }
+
+private:
+ reg_t* rf;
+ int rd;
+};
+
+#define do_writeback(rf,rd) trace_writeback(rf,rd)
+#else
+#define do_writeback(rf,rd) rf[rd]
+#endif
+
// helpful macros, etc
#define RS1 R[insn.rtype.rs1]
#define RS2 R[insn.rtype.rs2]
-#define RDR R[insn.rtype.rdr]
-#define RDI R[insn.itype.rdi]
+#define RDR do_writeback(R,insn.rtype.rdr)
+#define RDI do_writeback(R,insn.itype.rdi)
#define FRS1 FR[insn.ftype.rs1]
#define FRS2 FR[insn.ftype.rs2]
#define FRS3 FR[insn.ftype.rs3]