diff options
Diffstat (limited to 'pk/riscv-pk.S')
-rw-r--r-- | pk/riscv-pk.S | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/pk/riscv-pk.S b/pk/riscv-pk.S new file mode 100644 index 0000000..0696a2d --- /dev/null +++ b/pk/riscv-pk.S @@ -0,0 +1,37 @@ +#include "pcr.h" +#include "pk.h" + +.section .text,"ax",@progbits +.globl __start +.ent __start +__start: + + lui $sp, %hi(stack_top) + add $sp, $sp, %lo(stack_top) + + lui $t0, %hi(trap_entry) + add $t0, $t0, %lo(trap_entry) + mtpcr $t0, ASM_CR(PCR_EVEC) + + mtpcr $x0, ASM_CR(PCR_COUNT) + mtpcr $x0, ASM_CR(PCR_COMPARE) + + li $t0, SR_S | SR_PS | SR_ET | SR_IM | SR_EC | SR_SX + or $t1, $t0, SR_EF | SR_EV + mtpcr $t1, ASM_CR(PCR_SR) + mfpcr $t1, ASM_CR(PCR_SR) + mtpcr $t0, ASM_CR(PCR_SR) + + and $t2, $t1, SR_EF + lui $t0, %hi(have_fp) + sw $t2, %lo(have_fp)($t0) + + and $t2, $t1, SR_EV + lui $t0, %hi(have_vector) + sw $t2, %lo(have_vector)($t0) + + lui $t0, %hi(boot) + jalr.j $t0, %lo(boot) + #j boot + +.end __start |