[Update] chg rv to la

This commit is contained in:
bLueriVerLHR
2023-07-20 18:43:45 +08:00
parent 29abfe4101
commit 104518d875
4 changed files with 135 additions and 97 deletions

View File

@@ -11,81 +11,81 @@
.align 4
kernelvec:
# make room to save registers.
addi sp, sp, -256
addi.w $sp, $sp, -128
# save the registers.
sd ra, 0(sp)
sd sp, 8(sp)
sd gp, 16(sp)
sd tp, 24(sp)
sd t0, 32(sp)
sd t1, 40(sp)
sd t2, 48(sp)
sd s0, 56(sp)
sd s1, 64(sp)
sd a0, 72(sp)
sd a1, 80(sp)
sd a2, 88(sp)
sd a3, 96(sp)
sd a4, 104(sp)
sd a5, 112(sp)
sd a6, 120(sp)
sd a7, 128(sp)
sd s2, 136(sp)
sd s3, 144(sp)
sd s4, 152(sp)
sd s5, 160(sp)
sd s6, 168(sp)
sd s7, 176(sp)
sd s8, 184(sp)
sd s9, 192(sp)
sd s10, 200(sp)
sd s11, 208(sp)
sd t3, 216(sp)
sd t4, 224(sp)
sd t5, 232(sp)
sd t6, 240(sp)
st.w $ra, $sp, 0
st.w $tp, $sp, 4
st.w $sp, $sp, 8
st.w $a0, $sp, 12
st.w $a1, $sp, 16
st.w $a2, $sp, 20
st.w $a3, $sp, 24
st.w $a4, $sp, 28
st.w $a5, $sp, 32
st.w $a6, $sp, 36
st.w $a7, $sp, 40
st.w $t0, $sp, 44
st.w $t1, $sp, 48
st.w $t2, $sp, 52
st.w $t3, $sp, 56
st.w $t4, $sp, 60
st.w $t5, $sp, 64
st.w $t6, $sp, 68
st.w $t7, $sp, 72
st.w $t8, $sp, 76
st.w $u0, $sp, 80
st.w $fp, $sp, 84
st.w $s0, $sp, 88
st.w $s1, $sp, 92
st.w $s2, $sp, 96
st.w $s3, $sp, 100
st.w $s4, $sp, 104
st.w $s5, $sp, 108
st.w $s6, $sp, 112
st.w $s7, $sp, 116
st.w $s8, $sp, 120
# call the C trap handler in trap.c
call kerneltrap
bl kerneltrap
# restore registers.
ld ra, 0(sp)
ld sp, 8(sp)
ld gp, 16(sp)
ld.w $ra, $sp, 0
# not tp (contains hartid), in case we moved CPUs
ld t0, 32(sp)
ld t1, 40(sp)
ld t2, 48(sp)
ld s0, 56(sp)
ld s1, 64(sp)
ld a0, 72(sp)
ld a1, 80(sp)
ld a2, 88(sp)
ld a3, 96(sp)
ld a4, 104(sp)
ld a5, 112(sp)
ld a6, 120(sp)
ld a7, 128(sp)
ld s2, 136(sp)
ld s3, 144(sp)
ld s4, 152(sp)
ld s5, 160(sp)
ld s6, 168(sp)
ld s7, 176(sp)
ld s8, 184(sp)
ld s9, 192(sp)
ld s10, 200(sp)
ld s11, 208(sp)
ld t3, 216(sp)
ld t4, 224(sp)
ld t5, 232(sp)
ld t6, 240(sp)
ld.w $sp, $sp, 8
ld.w $a0, $sp, 12
ld.w $a1, $sp, 16
ld.w $a2, $sp, 20
ld.w $a3, $sp, 24
ld.w $a4, $sp, 28
ld.w $a5, $sp, 32
ld.w $a6, $sp, 36
ld.w $a7, $sp, 40
ld.w $t0, $sp, 44
ld.w $t1, $sp, 48
ld.w $t2, $sp, 52
ld.w $t3, $sp, 56
ld.w $t4, $sp, 60
ld.w $t5, $sp, 64
ld.w $t6, $sp, 68
ld.w $t7, $sp, 72
ld.w $t8, $sp, 76
ld.w $u0, $sp, 80
ld.w $fp, $sp, 84
ld.w $s0, $sp, 88
ld.w $s1, $sp, 92
ld.w $s2, $sp, 96
ld.w $s3, $sp, 100
ld.w $s4, $sp, 104
ld.w $s5, $sp, 108
ld.w $s6, $sp, 112
ld.w $s7, $sp, 116
ld.w $s8, $sp, 120
addi sp, sp, 256
addi sp, sp, 128
# return to whatever we were doing in the kernel.
sret
ertn
#
# machine-mode timer interrupt.
@@ -93,32 +93,32 @@ kernelvec:
.globl timervec
.align 4
timervec:
# start.c has set up the memory that mscratch points to:
# scratch[0,8,16] : register save area.
# scratch[24] : address of CLINT's MTIMECMP register.
# scratch[32] : desired interval between interrupts.
# # start.c has set up the memory that mscratch points to:
# # scratch[0,8,16] : register save area.
# # scratch[24] : address of CLINT's MTIMECMP register.
# # scratch[32] : desired interval between interrupts.
csrrw a0, mscratch, a0
sd a1, 0(a0)
sd a2, 8(a0)
sd a3, 16(a0)
# csrrw a0, mscratch, a0
# sd a1, 0(a0)
# sd a2, 8(a0)
# sd a3, 16(a0)
# schedule the next timer interrupt
# by adding interval to mtimecmp.
ld a1, 24(a0) # CLINT_MTIMECMP(hart)
ld a2, 32(a0) # interval
ld a3, 0(a1)
add a3, a3, a2
sd a3, 0(a1)
# # schedule the next timer interrupt
# # by adding interval to mtimecmp.
# ld a1, 24(a0) # CLINT_MTIMECMP(hart)
# ld a2, 32(a0) # interval
# ld a3, 0(a1)
# add a3, a3, a2
# sd a3, 0(a1)
# arrange for a supervisor software interrupt
# after this handler returns.
li a1, 2
csrw sip, a1
# # arrange for a supervisor software interrupt
# # after this handler returns.
# li a1, 2
# csrw sip, a1
ld a3, 16(a0)
ld a2, 8(a0)
ld a1, 0(a0)
csrrw a0, mscratch, a0
# ld a3, 16(a0)
# ld a2, 8(a0)
# ld a1, 0(a0)
# csrrw a0, mscratch, a0
mret
ertn