2017-02-14 147 views
0

在閱讀RISC-V 2.1版規範時,我在第4章中發現應該將RV64與RV32一起閱讀。基於此,以下是我的疑惑。帶RV32指令支持的RV64

  1. RISC-V 64位會運行32位操作碼嗎?

  2. 在規範中,第9章第54頁的指令與操作碼一起列出,這些操作碼是否也屬於64位。

  3. 在規範中,第9章第55頁的說明與操作碼列在一起,RV64是除了RV32之外的,所以在RV64位實現中我也需要支持RV32I嗎?

回答

0

RV64I是RV32I的與SLLISRLISRAI異常的超集。對於這些指令,shamt字段增加了一位。在RV32I中,所有指令都在32位數據上運行。相同的指令將在RV64I上的64位數據上運行。對於低32位操作,附加指令包含在RV64I中。

爲RV32I編譯的程序可以在RV64I機器上運行。它將運行而不會產生非法的指令異常,但結果很可能是錯誤的。所以爲RV32I編譯的程序只能在RV32I機器上正常運行,而爲RV64I編譯的程序只能在RV64I機器上運行。

對於包含引導加載程序,內核或固件等混合二進制文件的程序,misa寄存器將寄存器寬度編碼爲最高位,因此可以通過跳轉和左移跳轉到正確的二進制文件。請參閱特權規格第15頁

實現可能同時支持RV32I和RV64I,但這需要系統軟件的支持。