队伍CICC2259 队员:刘宇轩 周嘉琪 冷思远
指导老师:李阳,曹超
在修添加完浮点指令集和乘法树结构之后,我们对所有的整数指令集进行回归测试。
使用命令make
regress_run SIM=vcs对原代码所有指令集进行测试。
使用以下指令查看回归测试的结果:

我们可以发现CSR指令并没有通过,于是打开仿真波形,发现程序在8000032c处跳转至fail。

查看反汇编代码,代码跳转的依据是t4和a0的值不相等。分析代码可知auipc将a1的值赋成0x2,然后a0经过addi的处理形成了一个存储器的地址。接下来将ft0的值存进该地址中,再有lw读出赋给a0。由fmv.w.x ft0,zero可知,ft0的具体值为0,所以a0的值为0。li t4,1则将ft4的值赋成1。综上,我们可以了解到ft4与a0的值必定不相等,所以程序失败是必定的,从逻辑上就已经出错,执行过程正确也会被当成错误。这应当是开发者的小疏忽。

那么为什么在测试未加浮点指令的版本时,会测试通过呢?原因是因为它根本没有测试test10,而是直接跳过。在test9中有下图指令:

它先用csr指令读出misa寄存器中的值,判断是否添加了浮点指令集。若没有,就会跳转到test11继续执行。通过波形仿真我们也能验证我们的思考:

在执行完指令8000030a后,下一条指令跳转到80000336。略过中间的测试指令。