diff options
-rw-r--r-- | riscv/execute.cc | 21 | ||||
-rw-r--r-- | riscv/mmu.h | 2 |
2 files changed, 15 insertions, 8 deletions
diff --git a/riscv/execute.cc b/riscv/execute.cc index 12dd781..2d84242 100644 --- a/riscv/execute.cc +++ b/riscv/execute.cc @@ -4,15 +4,20 @@ #include "mmu.h" #include <cassert> +#ifdef RISCV_ENABLE_COMMITLOG +static void commit_log_reset(processor_t* p) +{ + p->get_state()->log_reg_write.clear(); + p->get_state()->log_mem_read.clear(); + p->get_state()->log_mem_write.clear(); +} static void commit_log_stash_privilege(processor_t* p) { -#ifdef RISCV_ENABLE_COMMITLOG state_t* state = p->get_state(); state->last_inst_priv = state->prv; state->last_inst_xlen = p->get_xlen(); state->last_inst_flen = p->get_flen(); -#endif } static void commit_log_print_value(int width, const void *data) @@ -50,7 +55,6 @@ static void commit_log_print_value(int width, uint64_t hi, uint64_t lo) static void commit_log_print_insn(processor_t* p, reg_t pc, insn_t insn) { -#ifdef RISCV_ENABLE_COMMITLOG auto& reg = p->get_state()->log_reg_write; auto& load = p->get_state()->log_mem_read; auto& store = p->get_state()->log_mem_write; @@ -122,11 +126,12 @@ static void commit_log_print_insn(processor_t* p, reg_t pc, insn_t insn) commit_log_print_value(std::get<2>(item) << 3, 0, std::get<1>(item)); } fprintf(stderr, "\n"); - reg.clear(); - load.clear(); - store.clear(); -#endif } +#else +static void commit_log_reset(processor_t* p) {} +static void commit_log_stash_privilege(processor_t* p) {} +static void commit_log_print_insn(processor_t* p, reg_t pc, insn_t insn) {} +#endif inline void processor_t::update_histogram(reg_t pc) { @@ -140,7 +145,9 @@ inline void processor_t::update_histogram(reg_t pc) // function calls. static reg_t execute_insn(processor_t* p, reg_t pc, insn_fetch_t fetch) { + commit_log_reset(p); commit_log_stash_privilege(p); + reg_t npc = fetch.func(p, fetch.insn, pc); if (npc != PC_SERIALIZE_BEFORE) { if (p->get_log_commits()) { diff --git a/riscv/mmu.h b/riscv/mmu.h index f73de59..b84fd4a 100644 --- a/riscv/mmu.h +++ b/riscv/mmu.h @@ -155,8 +155,8 @@ public: } \ else { \ type##_t le_val = to_le(val); \ - if (proc) WRITE_MEM(addr, val, size); \ store_slow_path(addr, sizeof(type##_t), (const uint8_t*)&le_val); \ + if (proc) WRITE_MEM(addr, val, size); \ } \ } |