aboutsummaryrefslogtreecommitdiff
path: root/pk/entry.S
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@s141.Millennium.Berkeley.EDU>2010-09-06 22:48:37 -0700
committerAndrew Waterman <waterman@s141.Millennium.Berkeley.EDU>2010-09-06 22:48:37 -0700
commit2351867c654572283c3c85b84e8f57e0021f9295 (patch)
treeed7132345aea410b12a8304eb3961eb968be189f /pk/entry.S
parentfb6dba8fb1ac05bb1fea53cbdaa5d74c0fdb35b3 (diff)
downloadriscv-pk-2351867c654572283c3c85b84e8f57e0021f9295.zip
riscv-pk-2351867c654572283c3c85b84e8f57e0021f9295.tar.gz
riscv-pk-2351867c654572283c3c85b84e8f57e0021f9295.tar.bz2
[sim, xcc] added PCRs to replace k0 and k1
Diffstat (limited to 'pk/entry.S')
-rw-r--r--pk/entry.S161
1 files changed, 89 insertions, 72 deletions
diff --git a/pk/entry.S b/pk/entry.S
index 8e85a81..91a1e2a 100644
--- a/pk/entry.S
+++ b/pk/entry.S
@@ -16,43 +16,49 @@
save_tf: # write the trap frame onto the stack
# save gprs
- STORE $1,1*REGBYTES($k1)
- STORE $2,2*REGBYTES($k1)
- STORE $3,3*REGBYTES($k1)
- STORE $4,4*REGBYTES($k1)
- STORE $5,5*REGBYTES($k1)
- STORE $6,6*REGBYTES($k1)
- STORE $7,7*REGBYTES($k1)
- STORE $8,8*REGBYTES($k1)
- STORE $9,9*REGBYTES($k1)
- STORE $10,10*REGBYTES($k1)
- STORE $11,11*REGBYTES($k1)
- STORE $12,12*REGBYTES($k1)
- STORE $13,13*REGBYTES($k1)
- STORE $14,14*REGBYTES($k1)
- STORE $15,15*REGBYTES($k1)
- STORE $16,16*REGBYTES($k1)
- STORE $17,17*REGBYTES($k1)
- STORE $18,18*REGBYTES($k1)
- STORE $19,19*REGBYTES($k1)
- STORE $20,20*REGBYTES($k1)
- STORE $21,21*REGBYTES($k1)
- STORE $22,22*REGBYTES($k1)
- STORE $23,23*REGBYTES($k1)
- STORE $24,24*REGBYTES($k1)
- STORE $25,25*REGBYTES($k1)
- STORE $28,28*REGBYTES($k1)
- STORE $29,29*REGBYTES($k1)
- STORE $30,30*REGBYTES($k1)
- STORE $k0,31*REGBYTES($k1) # $ra is actually in $k0
+ STORE $2,2*REGBYTES($1)
+ mfpcr $2,$PCR_K1
+ STORE $2,1*REGBYTES($1) # $x1 is actually in $PCR_K1
+ STORE $3,3*REGBYTES($1)
+ STORE $4,4*REGBYTES($1)
+ STORE $5,5*REGBYTES($1)
+ STORE $6,6*REGBYTES($1)
+ STORE $7,7*REGBYTES($1)
+ STORE $8,8*REGBYTES($1)
+ STORE $9,9*REGBYTES($1)
+ STORE $10,10*REGBYTES($1)
+ STORE $11,11*REGBYTES($1)
+ STORE $12,12*REGBYTES($1)
+ STORE $13,13*REGBYTES($1)
+ STORE $14,14*REGBYTES($1)
+ STORE $15,15*REGBYTES($1)
+ STORE $16,16*REGBYTES($1)
+ STORE $17,17*REGBYTES($1)
+ STORE $18,18*REGBYTES($1)
+ STORE $19,19*REGBYTES($1)
+ STORE $20,20*REGBYTES($1)
+ STORE $21,21*REGBYTES($1)
+ STORE $22,22*REGBYTES($1)
+ STORE $23,23*REGBYTES($1)
+ STORE $24,24*REGBYTES($1)
+ STORE $25,25*REGBYTES($1)
+ STORE $26,26*REGBYTES($1)
+ STORE $27,27*REGBYTES($1)
+ STORE $28,28*REGBYTES($1)
+ STORE $29,29*REGBYTES($1)
+ STORE $30,30*REGBYTES($1)
+ mfpcr $2,$PCR_K0
+ STORE $2,31*REGBYTES($1) # $ra is actually in $PCR_K0
- # get sr, epc, badvaddr
- mfpcr $t0,$PCR_SR # sr
- STORE $t0,32*REGBYTES($k1)
- mfpcr $t0,$PCR_EPC # epc
- STORE $t0,33*REGBYTES($k1)
- mfpcr $t0,$PCR_BADVADDR # badvaddr
- STORE $t0,34*REGBYTES($k1)
+ # get sr, epc, badvaddr, cr29 (tid)
+ mfpcr $2,$PCR_SR # sr
+ STORE $2,32*REGBYTES($1)
+ mfpcr $2,$PCR_EPC # epc
+ STORE $2,33*REGBYTES($1)
+ mfpcr $2,$PCR_BADVADDR # badvaddr
+ STORE $2,34*REGBYTES($1)
+ mfcr $2,$29 # cr29 (tid)
+ STORE $2,35*REGBYTES($1)
jr $ra
.end save_tf
@@ -63,40 +69,50 @@ pop_tf: # write the trap frame onto the stack
LOAD $t0,32*REGBYTES($a0) # restore sr (should disable interrupts)
mtpcr $t0,$PCR_SR
- move $k0,$a0
- LOAD $1,1*REGBYTES($k0)
- LOAD $2,2*REGBYTES($k0)
- LOAD $3,3*REGBYTES($k0)
- LOAD $4,4*REGBYTES($k0)
- LOAD $5,5*REGBYTES($k0)
- LOAD $6,6*REGBYTES($k0)
- LOAD $7,7*REGBYTES($k0)
- LOAD $8,8*REGBYTES($k0)
- LOAD $9,9*REGBYTES($k0)
- LOAD $10,10*REGBYTES($k0)
- LOAD $11,11*REGBYTES($k0)
- LOAD $12,12*REGBYTES($k0)
- LOAD $13,13*REGBYTES($k0)
- LOAD $14,14*REGBYTES($k0)
- LOAD $15,15*REGBYTES($k0)
- LOAD $16,16*REGBYTES($k0)
- LOAD $17,17*REGBYTES($k0)
- LOAD $18,18*REGBYTES($k0)
- LOAD $19,19*REGBYTES($k0)
- LOAD $20,20*REGBYTES($k0)
- LOAD $21,21*REGBYTES($k0)
- LOAD $22,22*REGBYTES($k0)
- LOAD $23,23*REGBYTES($k0)
- LOAD $24,24*REGBYTES($k0)
- LOAD $25,25*REGBYTES($k0)
- LOAD $28,28*REGBYTES($k0)
- LOAD $29,29*REGBYTES($k0)
- LOAD $30,30*REGBYTES($k0)
- LOAD $31,31*REGBYTES($k0)
+ LOAD $1,1*REGBYTES($a0)
+ mtpcr $1,$PCR_K0
+ LOAD $1,2*REGBYTES($a0)
+ mtpcr $1,$PCR_K1
+ move $1,$a0
+ LOAD $3,3*REGBYTES($1)
+ LOAD $4,4*REGBYTES($1)
+ LOAD $5,5*REGBYTES($1)
+ LOAD $6,6*REGBYTES($1)
+ LOAD $7,7*REGBYTES($1)
+ LOAD $8,8*REGBYTES($1)
+ LOAD $9,9*REGBYTES($1)
+ LOAD $10,10*REGBYTES($1)
+ LOAD $11,11*REGBYTES($1)
+ LOAD $12,12*REGBYTES($1)
+ LOAD $13,13*REGBYTES($1)
+ LOAD $14,14*REGBYTES($1)
+ LOAD $15,15*REGBYTES($1)
+ LOAD $16,16*REGBYTES($1)
+ LOAD $17,17*REGBYTES($1)
+ LOAD $18,18*REGBYTES($1)
+ LOAD $19,19*REGBYTES($1)
+ LOAD $20,20*REGBYTES($1)
+ LOAD $21,21*REGBYTES($1)
+ LOAD $22,22*REGBYTES($1)
+ LOAD $23,23*REGBYTES($1)
+ LOAD $24,24*REGBYTES($1)
+ LOAD $25,25*REGBYTES($1)
+ LOAD $26,26*REGBYTES($1)
+ LOAD $27,27*REGBYTES($1)
+ LOAD $28,28*REGBYTES($1)
+ LOAD $29,29*REGBYTES($1)
+ LOAD $30,30*REGBYTES($1)
+ LOAD $31,31*REGBYTES($1)
+
+ # restore cr29 (tid)
+ LOAD $2,35*REGBYTES($1)
+ mtcr $2,$29
# gtfo!
- LOAD $k0,33*REGBYTES($k0)
- mtpcr $k0,$PCR_EPC
+ LOAD $2,33*REGBYTES($1)
+ mtpcr $2,$PCR_EPC
+ mfpcr $1,$PCR_K0
+ mfpcr $2,$PCR_K1
eret
.end pop_tf
@@ -104,11 +120,12 @@ pop_tf: # write the trap frame onto the stack
#define TRAP_TABLE_ENTRY(x) \
.align 7; \
- law $k1,stack_top-320; \
- move $k0,$ra; \
+ mtpcr $ra,$PCR_K0; \
+ mtpcr $1,$PCR_K1; \
+ law $1,stack_top-320; \
jal save_tf; \
- move $sp,$k1; \
- move $a0,$k1; \
+ move $sp,$1; \
+ move $a0,$1; \
ei; \
jal x; \
unimp