RiscV ISS 实现中的错误

mistakes in a RiscV ISS implementation

我正在开发一个 RiscV ISS,当我 运行 验证套件时,我在添加指令时遇到错误。我确定了这部分代码的问题(在执行期间将状态注册为注释):

lui   ra,0x80000   ;; ra = 0x80000000 
lui   sp,0xffff8   ;; sp = 0xffff8000
add   t5,ra,sp     ;; t5 = 0x17fff8000
lui   t4,0xffff0   ;; t4 = 0xffff0000
addiw t4,t4,-1     ;; t4 = 0xfffeffff
slli  t4,t4,0xf    ;; t4 = 0x7fff7fff8000
li    gp,7         ;; gp = 7
bne   t5,t4,800005f0 <fail> ;; The program branches to fail :(

显然,寄存器 t5 和 t4 在执行期间不呈现相同的值,因此,程序分支到失败例程。

任何人都可以指出哪些指令 is/are 在我的代码中产生了错误的结果吗?

干杯

我运行同一个程序在秒杀中比较结果,发现了bug。 LUI 和 ADDIW 指令都缺少 32 位符号扩展。感谢阅读 post 并提出一些想法的人。

我认为此代码适用于 RV64I 实现(64 位)。

LUI 指令符号扩展到您在前两行中未完成的 RV64I 实现。