diff options
-rw-r--r-- | riscv/mmu.cc | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/riscv/mmu.cc b/riscv/mmu.cc index ede5722..9935ed2 100644 --- a/riscv/mmu.cc +++ b/riscv/mmu.cc @@ -170,11 +170,13 @@ void mmu_t::load_slow_path(reg_t addr, reg_t len, uint8_t* bytes, uint32_t xlate void mmu_t::store_slow_path(reg_t addr, reg_t len, const uint8_t* bytes, uint32_t xlate_flags, bool actually_store) { - if (!matched_trigger) { - reg_t data = reg_from_bytes(len, bytes); - matched_trigger = trigger_exception(triggers::OPERATION_STORE, addr, true, data); - if (matched_trigger) - throw *matched_trigger; + if (actually_store) { + if (!matched_trigger) { + reg_t data = reg_from_bytes(len, bytes); + matched_trigger = trigger_exception(triggers::OPERATION_STORE, addr, true, data); + if (matched_trigger) + throw *matched_trigger; + } } reg_t paddr = translate(addr, len, STORE, xlate_flags); |