aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2016-04-29 10:55:07 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2016-04-29 10:55:07 -0700
commitb535cd6dc878ce775766766a10e0ed43a8911ebd (patch)
tree59ce302e88065003eae17d2fb97e0e00bc1f8efd
parent66776bbc3efce7fb4176ca03fb949f556c2c2d57 (diff)
downloadriscv-pk-b535cd6dc878ce775766766a10e0ed43a8911ebd.zip
riscv-pk-b535cd6dc878ce775766766a10e0ed43a8911ebd.tar.gz
riscv-pk-b535cd6dc878ce775766766a10e0ed43a8911ebd.tar.bz2
ERET -> MRET
-rw-r--r--machine/encoding.h21
-rw-r--r--machine/mentry.S6
-rw-r--r--machine/minit.c2
3 files changed, 19 insertions, 10 deletions
diff --git a/machine/encoding.h b/machine/encoding.h
index 6668932..b219309 100644
--- a/machine/encoding.h
+++ b/machine/encoding.h
@@ -345,12 +345,18 @@
#define MASK_LR_D 0xf9f0707f
#define MATCH_SC_D 0x1800302f
#define MASK_SC_D 0xf800707f
-#define MATCH_SCALL 0x73
-#define MASK_SCALL 0xffffffff
-#define MATCH_SBREAK 0x100073
-#define MASK_SBREAK 0xffffffff
+#define MATCH_ECALL 0x73
+#define MASK_ECALL 0xffffffff
+#define MATCH_EBREAK 0x100073
+#define MASK_EBREAK 0xffffffff
+#define MATCH_URET 0x200073
+#define MASK_URET 0xffffffff
#define MATCH_SRET 0x10200073
#define MASK_SRET 0xffffffff
+#define MATCH_HRET 0x20200073
+#define MASK_HRET 0xffffffff
+#define MATCH_MRET 0x30200073
+#define MASK_MRET 0xffffffff
#define MATCH_SFENCE_VM 0x10400073
#define MASK_SFENCE_VM 0xfff07fff
#define MATCH_WFI 0x10500073
@@ -783,9 +789,12 @@ DECLARE_INSN(amomaxu_d, MATCH_AMOMAXU_D, MASK_AMOMAXU_D)
DECLARE_INSN(amoswap_d, MATCH_AMOSWAP_D, MASK_AMOSWAP_D)
DECLARE_INSN(lr_d, MATCH_LR_D, MASK_LR_D)
DECLARE_INSN(sc_d, MATCH_SC_D, MASK_SC_D)
-DECLARE_INSN(scall, MATCH_SCALL, MASK_SCALL)
-DECLARE_INSN(sbreak, MATCH_SBREAK, MASK_SBREAK)
+DECLARE_INSN(ecall, MATCH_ECALL, MASK_ECALL)
+DECLARE_INSN(ebreak, MATCH_EBREAK, MASK_EBREAK)
+DECLARE_INSN(uret, MATCH_URET, MASK_URET)
DECLARE_INSN(sret, MATCH_SRET, MASK_SRET)
+DECLARE_INSN(hret, MATCH_HRET, MASK_HRET)
+DECLARE_INSN(mret, MATCH_MRET, MASK_MRET)
DECLARE_INSN(sfence_vm, MATCH_SFENCE_VM, MASK_SFENCE_VM)
DECLARE_INSN(wfi, MATCH_WFI, MASK_WFI)
DECLARE_INSN(csrrw, MATCH_CSRRW, MASK_CSRRW)
diff --git a/machine/mentry.S b/machine/mentry.S
index 50ce9ca..49f163b 100644
--- a/machine/mentry.S
+++ b/machine/mentry.S
@@ -57,12 +57,12 @@ trap_vector:
li a0, MIP_STIP
csrs mip, a0
-.Leret:
+.Lmret:
# Go back whence we came.
LOAD a0, 10*REGBYTES(sp)
LOAD a1, 11*REGBYTES(sp)
csrrw sp, mscratch, sp
- eret
+ mret
1:
# Is it an IPI?
@@ -165,7 +165,7 @@ restore_regs:
LOAD t5,30*REGBYTES(sp)
LOAD t6,31*REGBYTES(sp)
LOAD sp, 2*REGBYTES(sp)
- eret
+ mret
.Ltrap_from_machine_mode:
csrr sp, mscratch
diff --git a/machine/minit.c b/machine/minit.c
index c19e9e1..b8a67c0 100644
--- a/machine/minit.c
+++ b/machine/minit.c
@@ -118,6 +118,6 @@ void enter_supervisor_mode(void (*fn)(uintptr_t), uintptr_t stack)
write_csr(mscratch, MACHINE_STACK_TOP() - MENTRY_FRAME_SIZE);
write_csr(mepc, fn);
write_csr(sptbr, (uintptr_t)root_page_table >> RISCV_PGSHIFT);
- asm volatile ("mv a0, %0; mv sp, %0; eret" : : "r" (stack));
+ asm volatile ("mv a0, %0; mv sp, %0; mret" : : "r" (stack));
__builtin_unreachable();
}