在通过RISC-V 2.1版规范时,我在第4章中发现RV64应该与RV32一起阅读。基于以下是我的怀疑。
RISC-V 64位是否会运行32位操作码?
在规范第9章第54页中,指令列出了操作码,这些操作码是否也属于64位。
在规范中,第9章,第55页说明与操作码一起列出,RV64是RV32的补充,所以在RV64位实现中我是否还需要支持RV32I?
答案 0 :(得分:2)
RV64I是RV32I的超集,但SLLI
,SRLI
和SRAI
除外。对于那些指令,shamt字段增加了一位。在RV32I中,所有指令都对32位数据进行操作。相同的指令将对RV64I上的64位数据进行操作。对于较低32位的操作,RV64I中包含附加指令。
为RV32I编译的程序可以在RV64I计算机上运行。它将在不产生非法指令异常的情况下运行,但结果很可能是错误的。因此,为RV32I编译的程序只能在RV32I机器上正常运行,而为RV64I编译的程序只能在RV64I机器上运行。
对于包含混合二进制文件(如引导加载程序,内核或固件)的程序,misa
寄存器会对顶部位的寄存器宽度进行编码,因此可以通过跳转和左移来跳转到正确的二进制文件。参见Priviledged Spec p.15
实现可能同时支持RV32I和RV64I,但这需要系统软件的支持。