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]