aboutsummaryrefslogtreecommitdiff
path: root/riscv/processor.cc
diff options
context:
space:
mode:
authorChristopher Celio <celio@eecs.berkeley.edu>2013-09-27 02:17:19 -0700
committerChristopher Celio <celio@eecs.berkeley.edu>2013-09-27 02:17:19 -0700
commitb9dc340b7567404c76b6a7e042c2fa3c59787515 (patch)
treec689b4e1194bd9fdeda6837f3cba8b2b3255b5e4 /riscv/processor.cc
parentc8a8c07ec296ce36dc04f2448faf48fe1c502a2d (diff)
downloadspike-b9dc340b7567404c76b6a7e042c2fa3c59787515.zip
spike-b9dc340b7567404c76b6a7e042c2fa3c59787515.tar.gz
spike-b9dc340b7567404c76b6a7e042c2fa3c59787515.tar.bz2
Added commit logging (--enable-commitlog). Also fixed disasm bug.
Diffstat (limited to 'riscv/processor.cc')
-rw-r--r--riscv/processor.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/riscv/processor.cc b/riscv/processor.cc
index 839c846..5c0d784 100644
--- a/riscv/processor.cc
+++ b/riscv/processor.cc
@@ -107,6 +107,22 @@ void processor_t::step(size_t n, bool noisy)
npc = fetch.func(this, fetch.insn.insn, npc); \
} while(0)
+
+ // special execute_insn for commit log dumping
+#ifdef RISCV_ENABLE_COMMITLOG
+ //static disassembler disasmblr;
+ #undef execute_insn
+ #define execute_insn(noisy) \
+ do { \
+ mmu_t::insn_fetch_t fetch = _mmu->load_insn(npc); \
+ if(noisy) disasm(fetch.insn.insn, npc); \
+ bool in_spvr = state.sr & SR_S; \
+ if (!in_spvr) fprintf(stderr, "\n0x%016" PRIx64 " (0x%08" PRIx32 ") ", npc, fetch.insn.insn.bits()); \
+ /*if (!in_spvr) fprintf(stderr, "\n0x%016" PRIx64 " (0x%08" PRIx32 ") %s ", npc, fetch.insn.insn.bits(), disasmblr.disassemble(fetch.insn.insn).c_str());*/ \
+ npc = fetch.func(this, fetch.insn.insn, npc); \
+ } while(0)
+#endif
+
if(noisy) for( ; i < n; i++) // print out instructions as we go
execute_insn(true);
else