簡體   English   中英

為什么RV64引入了32位操作的新操作碼而不是64位操作

[英]Why did RV64 introduce new opcodes for 32-bit operations instead of the 64-bit ones

在通過RISC-V規范時,我注意到64位版本與32位版本的不同之處在於它

  1. 將寄存器擴展為64位
  2. 更改了指令以在整個64位范圍內執行操作。
  3. 添加了執行32位操作的新指令

這使RV32代碼與RV64不兼容。 但是,如果64位版本已通過以下方式實現:

  1. 將寄存器擴展為64位
  2. ADD/SUB/SHL/..重命名為ADDW/SUBW/SHLW/..並使它們僅在符號擴展的32位上運行。
  3. 添加新指令ADD/SUB/SHL/..ADDD/SUBD/SHLD/..以對完整的64位進行操作

這樣就可以讓RV32程序在RV64上運行。 為了實現CPU,工作量將保持不變,因為在這兩種情況下都必須實現64位和32位指令,並且只有64位和32位版本的操作碼才會被交換對比符合規范。 (除了可能是乘法指令。)

那么為什么RISC-V決定將新的操作碼分配給32位操作而不是RV64中的64位操作呢?

RV64和RV32完全兼容。 如果程序不依賴於隱式模32位算術且所有地址都適合32位,則機器代碼可能相同。 但是,將完整的RV32用戶模式添加到RV64處理器非常容易。

RV32的64位超集太復雜了。 AUIPC,JAL,LOAD,STORE和BRANCH沒有足夠的操作碼空間。 附加擴展會更糟糕。

RV64中的少數32位指令主要用於過度使用模32位算術的程序。 這是非常常見的問題。 但是,快速和可移植的代碼應該避免使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM