aboutsummaryrefslogtreecommitdiff
path: root/pk/pk.c
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>2011-04-09 17:37:42 -0700
committerAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>2011-04-09 17:37:42 -0700
commit6e7fe98ea95c6da8c573fdc032b5269f08bbacc1 (patch)
treee0f0f3c73ad8785a95a6e8d22c96b5430370bb56 /pk/pk.c
parent666ae0c9e5355e578c2487b81f48b4b74cc16dda (diff)
downloadriscv-pk-6e7fe98ea95c6da8c573fdc032b5269f08bbacc1.zip
riscv-pk-6e7fe98ea95c6da8c573fdc032b5269f08bbacc1.tar.gz
riscv-pk-6e7fe98ea95c6da8c573fdc032b5269f08bbacc1.tar.bz2
[xcc,pk,sim,opcodes] added first RVC instruction
Diffstat (limited to 'pk/pk.c')
-rw-r--r--pk/pk.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/pk/pk.c b/pk/pk.c
index 6b49b20..7ee573e 100644
--- a/pk/pk.c
+++ b/pk/pk.c
@@ -125,10 +125,11 @@ void dump_tf(trapframe_t* tf)
void init_tf(trapframe_t* tf, long pc, long sp, int user64)
{
memset(tf,0,sizeof(*tf));
- #ifndef PK_ENABLE_KERNEL_64BIT
+ if(sizeof(void*) != 8)
kassert(!user64);
- #endif
- tf->sr = mfpcr(PCR_SR) & ~(SR_PS | SR_ET) | (user64 ? SR_UX : 0);
+ tf->sr = (mfpcr(PCR_SR) & (SR_IM | SR_SX)) | SR_S | SR_UC | SR_UC;
+ if(user64)
+ tf->sr |= SR_UX;
tf->gpr[30] = sp;
tf->epc = pc;
}