用例名称 = TVM Name + “-” + Target Environment Name + “-” + “指令”
比如,rv64ui-p-add
,表示在用户模式下,测试riscv 64位整型指令集中add指令,运行环境条件为:未打开虚拟内存,仅从core0启动。
TVM Name | Description |
---|---|
rv32ui | RV32 user-level, integer only |
rv32si | RV32 supervisor-level, integer only |
rv64ui | RV64 user-level, integer only |
rv64uf | RV64 user-level, integer and floating-point |
rv64uv | RV64 user-level, integer, floating-point, and vector |
rv64si | RV64 supervisor-level, integer only |
rv64sv | RV64 supervisor-level, integer and vector |
… | … |
Target Environment Name | Description |
---|---|
p | virtual memory is disabled, only core 0 boots up |
pm | virtual memory is disabled, all cores boot up |
pt | virtual memory is disabled, timer interrupt fires every 100 cycles |
v | virtual memory is enabled |
在riscv-tests/isa目录下,有若干TVM Name,如下:
比如,rv64ui目录下,又有若干指令的S文件,如下:
在编译时,会自动按上述命名规则,生成可执行文件名称。
我们以rv64ui-p-add.dump为例,其执行流程,如下所示:
在每个测试程序中,都包含了若干个测试点。
gp寄存器保存了,当前测试点的编号。
0x80000190
,保存到mepc寄存器中,以确保mret指令执行模式返回时(M模式切到U模式),PC可直接跳转到0x80000190处,即rv64ui-p-add.dump
名称中的u
对应上了;无论进入哪个标签,最后都会执行ecall指令,陷入M模式,PC跳转到
最终,在
因此,rv64ui-p-add.bin执行完后,TinyEMU打印出Test Pass,后续就是“停止”的状态,不会有其他打印信息。
其他测试用例,可类比本例,自行查看,不再赘述。