aboutsummaryrefslogtreecommitdiff
path: root/pk/pk.c
diff options
context:
space:
mode:
authorYunsup Lee <yunsup@cs.berkeley.edu>2010-10-17 14:08:12 -0700
committerYunsup Lee <yunsup@cs.berkeley.edu>2010-10-17 14:08:12 -0700
commit9297008e44254848cfa42726272640b641282665 (patch)
tree026813cd81b607994d156f399d5e725b7952bc7a /pk/pk.c
parentb4fd490d689415205cf315c02f673b9386ece337 (diff)
downloadriscv-pk-9297008e44254848cfa42726272640b641282665.zip
riscv-pk-9297008e44254848cfa42726272640b641282665.tar.gz
riscv-pk-9297008e44254848cfa42726272640b641282665.tar.bz2
[pk] zero out fp regs
Diffstat (limited to 'pk/pk.c')
-rw-r--r--pk/pk.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/pk/pk.c b/pk/pk.c
index d3f12ff..3a3c85b 100644
--- a/pk/pk.c
+++ b/pk/pk.c
@@ -130,6 +130,18 @@ void init_tf(trapframe_t* tf, long pc, long sp)
tf->epc = USER_START;
}
+void init_fp()
+{
+ if (have_fp)
+ {
+ register long sr;
+ sr = mfpcr(PCR_SR);
+ mtpcr(sr | SR_EF, PCR_SR);
+ init_fpregs();
+ mtpcr(sr, PCR_SR);
+ }
+}
+
void bss_init()
{
extern char edata,end;
@@ -146,6 +158,7 @@ void mainvars_init()
void jump_usrstart()
{
+ init_fp();
trapframe_t tf;
init_tf(&tf, USER_START, USER_MEM_SIZE-USER_MAINVARS_SIZE);
pop_tf(&tf);