From b535cd6dc878ce775766766a10e0ed43a8911ebd Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Fri, 29 Apr 2016 10:55:07 -0700 Subject: ERET -> MRET --- machine/encoding.h | 21 +++++++++++++++------ machine/mentry.S | 6 +++--- machine/minit.c | 2 +- 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(); } -- cgit v1.1