summaryrefslogtreecommitdiff
path: root/riscv/riscv_jalr_seq.sail
diff options
context:
space:
mode:
Diffstat (limited to 'riscv/riscv_jalr_seq.sail')
-rw-r--r--riscv/riscv_jalr_seq.sail14
1 files changed, 14 insertions, 0 deletions
diff --git a/riscv/riscv_jalr_seq.sail b/riscv/riscv_jalr_seq.sail
new file mode 100644
index 00000000..b38563ef
--- /dev/null
+++ b/riscv/riscv_jalr_seq.sail
@@ -0,0 +1,14 @@
+/* The definition for the sequential model. */
+
+function clause execute (RISCV_JALR(imm, rs1, rd)) = {
+/* For the sequential model, the memory-model definition doesn't work directly
+ if rs1 = rd. We would effectively have to keep a regfile for reads and another for
+ writes, and swap on instruction completion. This could perhaps be optimized in
+ some manner, but for now, we just keep a reordered definition to improve simulator
+ performance.
+*/
+ let newPC : xlenbits = X(rs1) + EXTS(imm);
+ X(rd) = nextPC;
+ nextPC = newPC[63..1] @ 0b0;
+ true
+}