Files
eb001/tb/sw/src/slvSvr.S

66 lines
1.3 KiB
ArmAsm
Raw Normal View History

#include "tl2cdr.h"
.globl _prog_start
.globl _rv32i_plic_handle
.section .text.init, "ax", %progbits
#if 0
#使RV32E RV32I 使x0, x16~x31
#便使ABI使x0, x16~x31x1~x15使ABI
#endif
_prog_start:
li x16, 0
mv x17, a0 # plic_claim
mv x18, a1 # flag_intTxEnd
mv x19, a2 # flag_intRxError
mv x20, a3 # flag_intRxStart
mv x21, a4 # flag_intRxEnd
mv x22, x0
#lui x23, %hi(_rv32i_plic_handle)
#lw x24, %lo(_rv32i_plic_handle)(x23)
la x24, _rv32i_plic_handle
li x25, 1
li x26, 0
li x27, 0
li x28, CDR_INT_TXEND
li x29, CDR_INT_RXERROR
li x30, CDR_INT_RXSTART
li x31, CDR_INT_RXEND
mv a0, x24
li x23, 0
li x24, 0
ret
.balign 32
_rv32i_plic_handle:
lw x23, 0(x17) # x23 = *plic_claim
sw x23, 0(x17) # *plic_claim = x23
bne x23, x28, 1f #_if (x23 != x24) goto 1f
sw x25, 0(x18) #_else
j 4f
1:
bne x23, x29, 2f #_if (x23 != x24) goto 2f
sw x25, 0(x19) #_else
j 4f
2:
bne x23, x30, 3f #_if (x23 != x24) goto 3f
sw x25, 0(x20) #_else
j 4f
3:
bne x23, x31, 4f #_if (x23 != x24) goto 4f
sw x25, 0(x21) #_else
4:
mret