aboutsummaryrefslogtreecommitdiff
path: root/pk.c
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@s141.Millennium.Berkeley.EDU>2010-08-04 17:04:24 -0700
committerAndrew Waterman <waterman@s141.Millennium.Berkeley.EDU>2010-08-04 17:04:24 -0700
commite0d20b2e2de069c6714f48eb36eec1ad02845f4c (patch)
treed687f2eeca1bd3e7e227a32912f28a9cf9f432d3 /pk.c
parentb93785370d0be893e0a484ec22f1365db184dcce (diff)
downloadpk-e0d20b2e2de069c6714f48eb36eec1ad02845f4c.zip
pk-e0d20b2e2de069c6714f48eb36eec1ad02845f4c.tar.gz
pk-e0d20b2e2de069c6714f48eb36eec1ad02845f4c.tar.bz2
[xcc,pk,sim] Added first part of FP support
In particular, FP loads, stores, and moves now work.
Diffstat (limited to 'pk.c')
-rw-r--r--pk.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/pk.c b/pk.c
index bfc4dad..2f0ba17 100644
--- a/pk.c
+++ b/pk.c
@@ -1,3 +1,4 @@
+#include "pcr.h"
#include "pk.h"
#include "file.h"
#include "frontend.h"
@@ -119,18 +120,12 @@ void dump_tf(trapframe_t* tf)
printk("sr %lx pc %lx va %lx\n",tf->sr,tf->epc,tf->badvaddr);
}
-void unhandled_trap(trapframe_t* tf)
+void init_tf(trapframe_t* tf, long pc, long sp)
{
- dump_tf(tf);
- panic("unhandled trap!");
-}
-
-void handle_breakpoint(trapframe_t* tf)
-{
- printk("Breakpoint\n");
- dump_tf(tf);
- tf->epc += 4;
- pop_tf(tf);
+ memset(tf,0,sizeof(*tf));
+ tf->sr = SR_S | SR_KX | SR_UX; // SR_PS=0 (usermode); SR_ET=0
+ tf->gpr[29] = USER_MEM_SIZE-USER_MAINVARS_SIZE;
+ tf->epc = USER_START;
}
void bss_init()
@@ -150,9 +145,7 @@ void mainvars_init()
void jump_usrstart()
{
trapframe_t tf;
- memset(&tf,0,sizeof(tf));
- tf.gpr[29] = USER_MEM_SIZE-USER_MAINVARS_SIZE;
- tf.epc = USER_START;
+ init_tf(&tf, USER_START, USER_MEM_SIZE-USER_MAINVARS_SIZE);
pop_tf(&tf);
}