1 概述
- 为了测试方便:
- core 支持通过 ABI name of register 访问寄存器
- 需要添加 addi 指令
- load bin file
- 定义完整的 RISBIJ 六种指令类型的结构体,并且,decode
- 重构集成测试代码
- 需要用交叉工具链,把汇编代码转化为 bin 文件,示例命令如下:
# gen ELF file
riscv64-unknown-elf-gcc -O0 -march=rv32i -mabi=ilp32 -nostdlib -static -Ttext 0x10000 test_beq.s -o test_beq.elf
# gen bin file
riscv64-unknown-elf-objcopy -O binary test_beq.elf test_beq.bin
# Disassemble
riscv64-unknown-elf-objdump -DSlt test_beq.elf > test_beq.asm
2 构建测试 case
2.1 test beq
.section .text
.global _start
_start:
beq x8, x9, label
addi x4, x4, 1
addi x5, x5, 1
label:
addi x6, x6, 1
addi x7, x7, 1
2.2 test jal
.section .text
.global _start
_start:
addi x5, x0, 10 # x5 = 10
addi x6, x0, 20 # x6 = 20
addi x7, x0, 0 # x7 = 0
jal x1, label_jal
addi x5, x5, 1
label_jal:
addi x6, x6, 1
addi x7, x7, 1
2.3 test jalr
.section .text
.global _start
_start:
addi x5, x0, 10 # x5 = 10
addi x6, x0, 20 # x6 = 20
addi x7, x0, 0 # x7 = 0
jal x1, label_jal
addi x5, x5, 1
label_jal:
addi x6, x6, 1
jalr x1, x1, 0
3 细节问题
- beq, jal 中的立即数
- 测试 addi 指令:正数加正数,正数加负数,负数加正数,负数加负数,0加整,0加负,0加0
- 处理指令中的立即数时,涉及位宽的问题
- SiFive FE310 DTIM base address:0x8000_0000