diff options
author | Andrew Waterman <waterman@s144.Millennium.Berkeley.EDU> | 2011-11-11 03:40:24 -0800 |
---|---|---|
committer | Andrew Waterman <waterman@s144.Millennium.Berkeley.EDU> | 2011-11-11 03:40:24 -0800 |
commit | 8717517e048ff866167d6eee6c6d97225f0cd169 (patch) | |
tree | ab36a881f5f6700fb5d30e3abc5580be0c088002 /pk/entry.S | |
parent | 2f5776b244a4a2a8297fee9e0160c835430e1f06 (diff) | |
download | riscv-pk-8717517e048ff866167d6eee6c6d97225f0cd169.zip riscv-pk-8717517e048ff866167d6eee6c6d97225f0cd169.tar.gz riscv-pk-8717517e048ff866167d6eee6c6d97225f0cd169.tar.bz2 |
Synced up PK with supervisor changes/asm syntax
You must upgrade to the latest compiler and ISA
simulator to build and run this version of the PK.
Diffstat (limited to 'pk/entry.S')
-rw-r--r-- | pk/entry.S | 196 |
1 files changed, 98 insertions, 98 deletions
@@ -15,60 +15,60 @@ save_tf: # write the trap frame onto the stack # save gprs - STORE $x3,3*REGBYTES($x2) - STORE $x4,4*REGBYTES($x2) - STORE $x5,5*REGBYTES($x2) - STORE $x6,6*REGBYTES($x2) - STORE $x7,7*REGBYTES($x2) - STORE $x8,8*REGBYTES($x2) - STORE $x9,9*REGBYTES($x2) - STORE $x10,10*REGBYTES($x2) - STORE $x11,11*REGBYTES($x2) - STORE $x12,12*REGBYTES($x2) - STORE $x13,13*REGBYTES($x2) - STORE $x14,14*REGBYTES($x2) - STORE $x15,15*REGBYTES($x2) - STORE $x16,16*REGBYTES($x2) - STORE $x17,17*REGBYTES($x2) - STORE $x18,18*REGBYTES($x2) - STORE $x19,19*REGBYTES($x2) - STORE $x20,20*REGBYTES($x2) - STORE $x21,21*REGBYTES($x2) - STORE $x22,22*REGBYTES($x2) - STORE $x23,23*REGBYTES($x2) - STORE $x24,24*REGBYTES($x2) - STORE $x25,25*REGBYTES($x2) - STORE $x26,26*REGBYTES($x2) - STORE $x27,27*REGBYTES($x2) - STORE $x28,28*REGBYTES($x2) - STORE $x29,29*REGBYTES($x2) - STORE $x30,30*REGBYTES($x2) - STORE $x31,31*REGBYTES($x2) + STORE x3,3*REGBYTES(x2) + STORE x4,4*REGBYTES(x2) + STORE x5,5*REGBYTES(x2) + STORE x6,6*REGBYTES(x2) + STORE x7,7*REGBYTES(x2) + STORE x8,8*REGBYTES(x2) + STORE x9,9*REGBYTES(x2) + STORE x10,10*REGBYTES(x2) + STORE x11,11*REGBYTES(x2) + STORE x12,12*REGBYTES(x2) + STORE x13,13*REGBYTES(x2) + STORE x14,14*REGBYTES(x2) + STORE x15,15*REGBYTES(x2) + STORE x16,16*REGBYTES(x2) + STORE x17,17*REGBYTES(x2) + STORE x18,18*REGBYTES(x2) + STORE x19,19*REGBYTES(x2) + STORE x20,20*REGBYTES(x2) + STORE x21,21*REGBYTES(x2) + STORE x22,22*REGBYTES(x2) + STORE x23,23*REGBYTES(x2) + STORE x24,24*REGBYTES(x2) + STORE x25,25*REGBYTES(x2) + STORE x26,26*REGBYTES(x2) + STORE x27,27*REGBYTES(x2) + STORE x28,28*REGBYTES(x2) + STORE x29,29*REGBYTES(x2) + STORE x30,30*REGBYTES(x2) + STORE x31,31*REGBYTES(x2) - mfpcr $x3,ASM_CR(PCR_K0) - STORE $x3,1*REGBYTES($x2) # $x1 is in $PCR_K0 - mfpcr $x3,ASM_CR(PCR_K1) - STORE $x3,2*REGBYTES($x2) # $x2 is in $PCR_K1 + mfpcr x3,ASM_CR(PCR_K0) + STORE x3,1*REGBYTES(x2) # x1 is in PCR_K0 + mfpcr x3,ASM_CR(PCR_K1) + STORE x3,2*REGBYTES(x2) # x2 is in PCR_K1 # get sr, epc, badvaddr, cause - mfpcr $x3,ASM_CR(PCR_SR) # sr - STORE $x3,32*REGBYTES($x2) - mfpcr $x4,ASM_CR(PCR_EPC) # epc - STORE $x4,33*REGBYTES($x2) - mfpcr $x3,ASM_CR(PCR_BADVADDR) # badvaddr - STORE $x3,34*REGBYTES($x2) - mfpcr $x3,ASM_CR(PCR_CAUSE) # cause - STORE $x3,35*REGBYTES($x2) + mfpcr x3,ASM_CR(PCR_SR) # sr + STORE x3,32*REGBYTES(x2) + mfpcr x4,ASM_CR(PCR_EPC) # epc + STORE x4,33*REGBYTES(x2) + mfpcr x3,ASM_CR(PCR_BADVADDR) # badvaddr + STORE x3,34*REGBYTES(x2) + mfpcr x3,ASM_CR(PCR_CAUSE) # cause + STORE x3,35*REGBYTES(x2) # get faulting insn, if it wasn't a fetch-related trap - li $x5, CAUSE_MISALIGNED_FETCH - li $x6, CAUSE_FAULT_FETCH - beq $x3, $x5, 1f - beq $x3, $x6, 1f - lh $x3,0($x4) - lh $x4,2($x4) - sh $x3, 36*REGBYTES($x2) - sh $x4,2+36*REGBYTES($x2) + li x5, CAUSE_MISALIGNED_FETCH + li x6, CAUSE_FAULT_FETCH + beq x3, x5, 1f + beq x3, x6, 1f + lh x3,0(x4) + lh x4,2(x4) + sh x3, 36*REGBYTES(x2) + sh x4,2+36*REGBYTES(x2) 1: ret .end save_tf @@ -77,68 +77,68 @@ save_tf: # write the trap frame onto the stack .ent pop_tf pop_tf: # write the trap frame onto the stack # restore gprs - LOAD $t0,32*REGBYTES($a0) # restore sr (should disable interrupts) - mtpcr $t0,ASM_CR(PCR_SR) + LOAD t0,32*REGBYTES(a0) # restore sr (should disable interrupts) + mtpcr t0,ASM_CR(PCR_SR) - LOAD $x1,1*REGBYTES($a0) - mtpcr $x1,ASM_CR(PCR_K0) - LOAD $x1,2*REGBYTES($a0) - mtpcr $x1,ASM_CR(PCR_K1) - move $x1,$a0 - LOAD $x3,3*REGBYTES($x1) - LOAD $x4,4*REGBYTES($x1) - LOAD $x5,5*REGBYTES($x1) - LOAD $x6,6*REGBYTES($x1) - LOAD $x7,7*REGBYTES($x1) - LOAD $x8,8*REGBYTES($x1) - LOAD $x9,9*REGBYTES($x1) - LOAD $x10,10*REGBYTES($x1) - LOAD $x11,11*REGBYTES($x1) - LOAD $x12,12*REGBYTES($x1) - LOAD $x13,13*REGBYTES($x1) - LOAD $x14,14*REGBYTES($x1) - LOAD $x15,15*REGBYTES($x1) - LOAD $x16,16*REGBYTES($x1) - LOAD $x17,17*REGBYTES($x1) - LOAD $x18,18*REGBYTES($x1) - LOAD $x19,19*REGBYTES($x1) - LOAD $x20,20*REGBYTES($x1) - LOAD $x21,21*REGBYTES($x1) - LOAD $x22,22*REGBYTES($x1) - LOAD $x23,23*REGBYTES($x1) - LOAD $x24,24*REGBYTES($x1) - LOAD $x25,25*REGBYTES($x1) - LOAD $x26,26*REGBYTES($x1) - LOAD $x27,27*REGBYTES($x1) - LOAD $x28,28*REGBYTES($x1) - LOAD $x29,29*REGBYTES($x1) - LOAD $x30,30*REGBYTES($x1) - LOAD $x31,31*REGBYTES($x1) + LOAD x1,1*REGBYTES(a0) + mtpcr x1,ASM_CR(PCR_K0) + LOAD x1,2*REGBYTES(a0) + mtpcr x1,ASM_CR(PCR_K1) + move x1,a0 + LOAD x3,3*REGBYTES(x1) + LOAD x4,4*REGBYTES(x1) + LOAD x5,5*REGBYTES(x1) + LOAD x6,6*REGBYTES(x1) + LOAD x7,7*REGBYTES(x1) + LOAD x8,8*REGBYTES(x1) + LOAD x9,9*REGBYTES(x1) + LOAD x10,10*REGBYTES(x1) + LOAD x11,11*REGBYTES(x1) + LOAD x12,12*REGBYTES(x1) + LOAD x13,13*REGBYTES(x1) + LOAD x14,14*REGBYTES(x1) + LOAD x15,15*REGBYTES(x1) + LOAD x16,16*REGBYTES(x1) + LOAD x17,17*REGBYTES(x1) + LOAD x18,18*REGBYTES(x1) + LOAD x19,19*REGBYTES(x1) + LOAD x20,20*REGBYTES(x1) + LOAD x21,21*REGBYTES(x1) + LOAD x22,22*REGBYTES(x1) + LOAD x23,23*REGBYTES(x1) + LOAD x24,24*REGBYTES(x1) + LOAD x25,25*REGBYTES(x1) + LOAD x26,26*REGBYTES(x1) + LOAD x27,27*REGBYTES(x1) + LOAD x28,28*REGBYTES(x1) + LOAD x29,29*REGBYTES(x1) + LOAD x30,30*REGBYTES(x1) + LOAD x31,31*REGBYTES(x1) # gtfo! - LOAD $x2,33*REGBYTES($x1) - mtpcr $x2,ASM_CR(PCR_EPC) - mfpcr $x1,ASM_CR(PCR_K0) - mfpcr $x2,ASM_CR(PCR_K1) + LOAD x2,33*REGBYTES(x1) + mtpcr x2,ASM_CR(PCR_EPC) + mfpcr x1,ASM_CR(PCR_K0) + mfpcr x2,ASM_CR(PCR_K1) eret .end pop_tf .global trap_entry .ent trap_entry trap_entry: - mtpcr $ra,ASM_CR(PCR_K0) - mtpcr $x2,ASM_CR(PCR_K1) + mtpcr ra,ASM_CR(PCR_K0) + mtpcr x2,ASM_CR(PCR_K1) # when coming from kernel, continue below its stack - mfpcr $ra,ASM_CR(PCR_SR) - and $ra,$ra,SR_PS - add $x2, $sp, -320 - bnez $ra, 1f - la $x2,stack_top-320 + mfpcr ra,ASM_CR(PCR_SR) + and ra,ra,SR_PS + add x2, sp, -320 + bnez ra, 1f + la x2,stack_top-320 1:jal save_tf - move $sp,$x2 - move $a0,$x2 + move sp,x2 + move a0,x2 jal handle_trap .end trap_entry |