[sim] added writeback tracing
authorAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>
Tue, 12 Oct 2010 00:16:00 +0000 (17:16 -0700)
committerAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>
Tue, 12 Oct 2010 00:16:00 +0000 (17:16 -0700)
riscv/decode.h

index 9a0632a80eb0e0082dab83548e1c5fab99f58114..56157d3e4eb2a2018b2c726f8b64cfbe29b50ea4 100644 (file)
@@ -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]