aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrashanth Mundkur <prashanth.mundkur@gmail.com>2020-04-01 11:04:32 -0700
committerPrashanth Mundkur <prashanth.mundkur@gmail.com>2020-04-01 11:04:32 -0700
commit0403086181fc303d54c85b700ab917554effbcdb (patch)
tree1436bf15e1ac0bc5347b9767298472b08ef15527
parentd1fe5f8f418275cc8119866a2f3827fe5dc102e4 (diff)
downloadsail-riscv-0403086181fc303d54c85b700ab917554effbcdb.zip
sail-riscv-0403086181fc303d54c85b700ab917554effbcdb.tar.gz
sail-riscv-0403086181fc303d54c85b700ab917554effbcdb.tar.bz2
Set mtval to 0 on ebreak. Fixes #44.
-rw-r--r--model/riscv_insts_base.sail2
-rw-r--r--model/riscv_sys_control.sail7
2 files changed, 8 insertions, 1 deletions
diff --git a/model/riscv_insts_base.sail b/model/riscv_insts_base.sail
index bc86859..f500ac4 100644
--- a/model/riscv_insts_base.sail
+++ b/model/riscv_insts_base.sail
@@ -753,7 +753,7 @@ mapping clause encdec = EBREAK()
<-> 0b000000000001 @ 0b00000 @ 0b000 @ 0b00000 @ 0b1110011
function clause execute EBREAK() = {
- handle_mem_exception(PC, E_Breakpoint());
+ handle_exception(E_Breakpoint());
RETIRE_FAIL
}
diff --git a/model/riscv_sys_control.sail b/model/riscv_sys_control.sail
index d906f5e..f4b005d 100644
--- a/model/riscv_sys_control.sail
+++ b/model/riscv_sys_control.sail
@@ -436,6 +436,13 @@ function handle_mem_exception(addr : xlenbits, e : ExceptionType) -> unit = {
set_next_pc(exception_handler(cur_privilege, CTL_TRAP(t), PC))
}
+function handle_exception(e: ExceptionType) -> unit = {
+ let t : sync_exception = struct { trap = e,
+ excinfo = None(),
+ ext = None() } in
+ set_next_pc(exception_handler(cur_privilege, CTL_TRAP(t), PC))
+}
+
function handle_interrupt(i : InterruptType, del_priv : Privilege) -> unit =
set_next_pc(trap_handler(del_priv, true, interruptType_to_bits(i), PC, None(), None()))