RISCV指令在NEMU-master分支运算结果错误(jalr/ebreak&c.ebreak/原子比大小指令)
1.问题列表: ①jalr指令错误(地址最低有效位不会被置为0,不符合riscv规范,影响功能) 问题描述:jalr指令理论上运行的结果应为偶数,实际上NEMU无法将最低位的bit置为0。 报错信息:NEMU=0x00000000800015bb(error),理论应为0x00000000800015ba 该指令解析:跳转并寄存器链接(Jumpand LinkRegister).I-type, RV32IandRV64I.把pc设置为x[rs1]+sign-extend(offset),把计算出的地址的 最低有效位设为0 ,并将原pc+4的值写入f[rd]。rd默认为x1。(标粗部分出错) (t=pc+4;pc=(x[rs1]+sext(offset))&[~1];x[rd]=t)
②ebreak&c.ebreak指令错误(显示为无效指令,影响功能) 问题描述:ebreak&c.ebreak在NEMU上运行输出为无效数: Welcome to riscv64-NEMU! For help, type "help" invalid opcode(PC = 0x00000000800001de): 02 90 17 5c 00 00 13 0c ... 5c179002 0c130000...
③部分原子指令计算结果异常(有符号数比较大小时NEMU不会区分符号位) 问题描述:amomin.w t6,t2,(s6) M[s6]中取出的值为:0x00000000 0000005b t2的值为: 0x00000000 f610b92a 二进制补码比较取最小值(M[s6]):NEMU:0x0000005b(错误,正确应为0xf610b92a)
2.目前需要解答: ①请问有没有哪个版本已经修复了这三个bug,目前试运行了2022.03.31和2022.05.01两个版本的master分支,均存在此类问题; ②如果自己修改代码的话,需要看哪部分代码,请指教; ③另外请问您是否有关于NEMU比较详细一些的解读文档,可不可以分享一下;