增加代码,将从站代码也改成RV32E和RV32I混合编程的版本
This commit is contained in:
65
tb/sw/src/slvSvr.S
Normal file
65
tb/sw/src/slvSvr.S
Normal file
@@ -0,0 +1,65 @@
|
||||
#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~x31;x1~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
|
||||
Reference in New Issue
Block a user