On misaligned fetch, EPC = branch target, not source
authorAndrew Waterman <aswaterman@gmail.com>
Sat, 3 Jan 2015 06:33:32 +0000 (22:33 -0800)
committerAndrew Waterman <aswaterman@gmail.com>
Sat, 3 Jan 2015 06:33:32 +0000 (22:33 -0800)
We can revert this commit if we decide to change the EPC behavior.

isa/rv32si/ma_fetch.S

index 99302fb88c03fea7d7f74317ed1c48a46062dbb9..2db7e99a6e1218882bac5403ded9264498db48cc 100644 (file)
@@ -15,19 +15,21 @@ RVTEST_CODE_BEGIN
   csrw evec, t0
 
   li TESTNUM, 2
-  la t0, evec
+  la t0, 1f
   jr t0, 2
+1:
   j fail
 
   li TESTNUM, 3
-  la t0, next
+  la t0, 2f
   jr t0, 1
+2:
   // this test should pass, since the low bit should be masked off
 
-next:
   li TESTNUM, 4
-  la t0, evec
+  la t0, 3f
   jr t0, 3
+3:
   j fail
 
   j pass
@@ -41,8 +43,9 @@ evec:
   li t1, CAUSE_MISALIGNED_FETCH
   csrr t0, cause
   bne t0, t1, fail
+  li t1, 0
   csrr t0, epc
-  addi t0, t0, 8
+  addi t0, t0, 2 // skip over instruction after jalr
   csrw epc, t0
   sret