過(guò)去的錯(cuò)誤 |
RV32I吸取的經(jīng)驗(yàn)教訓(xùn) |
|||
ARM-32 (1986) | MIPS-32 (1986) | X86-32(1978) | ||
成本 | 必須支持整數(shù)乘除法 | 必須支持整數(shù)乘除法 | 8 位以及 16 位操作、必須支持整數(shù)乘除法 | 無(wú) 8 位、16 位操作、可選的整數(shù)乘除法支持(RV32M) |
簡(jiǎn)潔性 | 無(wú)零寄存器、條件指令執(zhí)行、復(fù)雜的尋址模式、棧操作指令(push/pop)、算術(shù)/邏輯指令中存在的移位 | 立即數(shù)支持零擴(kuò)展及符號(hào)擴(kuò)展、一些算術(shù)指令會(huì)造成溢出異常 | 無(wú)零寄存器、復(fù)雜的過(guò)程調(diào)用指令(enter/leave)棧指令(push/pop)、復(fù)雜尋址模式、循環(huán)指令 | 寄存器x0專門用于存放常數(shù)0、立即數(shù)只進(jìn)行符號(hào)擴(kuò)展、一種數(shù)據(jù)尋址模式、沒(méi)有條件執(zhí)行、沒(méi)有復(fù)雜的函數(shù)調(diào)用指令以及棧指令、算術(shù)指令不拋異常、使用單獨(dú)的移位指令來(lái)處理移位操作 |
性能 | 分支指令使用條件碼、在不同格式的指令中,源和目的寄存器的位置不同、加載多個(gè)計(jì)算得到的立即數(shù)、PC是一個(gè)通用寄存器 | 在不同格式的指令中,源和目的寄存器的位置不同 | 分支指令使用條件碼、每個(gè)指令中最多只能使用兩個(gè)寄存器 | 使用同一條指令實(shí)現(xiàn)比較及跳轉(zhuǎn)(不使用條件碼)、每條指令三個(gè)寄存器、不能一次load多個(gè)數(shù)據(jù)、不同指令格式中,泊及目的寄存器字段位置固定、立即數(shù)是常數(shù)(不是由計(jì)算得出的)、PC不是通用寄存器 |
架構(gòu)和具體實(shí)現(xiàn) | 將PC像普通寄存器一樣讀寫,這樣暴露了流水線長(zhǎng)度 | 分支指令延遲槽Load指令延遲槽、乘除法使用單獨(dú)的HI、LO寄存器 | 寄存器不是通用的(AX,CX,DX,DI,SI有特殊用途) | 分支指令沒(méi)有延遲槽、Load指令無(wú)延遲槽、通用寄存器 |
增長(zhǎng)空間 | 有限的指令碼空間 | 有限的指令碼空間 | 大量可用的指令碼空間 | |
程序大小 | 僅有32bit指令(Thumb-2是作為一個(gè)獨(dú)立的ISA) | 僅32bit指令(microMIPS是作為一個(gè)獨(dú)立的ISA) | 指令長(zhǎng)度可用是不同字節(jié),但這是一個(gè)很不好的選擇。 | 32位指令+16位RV32C擴(kuò)展 |
易于編程/編譯/鏈接 | 僅15個(gè)寄存器內(nèi)存數(shù)據(jù)必須對(duì)齊、不規(guī)則的數(shù)據(jù)尋址模式、不一致的性能計(jì)數(shù)器 | 內(nèi)存數(shù)據(jù)必須對(duì)齊、不規(guī)則的數(shù)據(jù)尋址模式、不一致的性能計(jì)數(shù)器 | 僅15個(gè)寄存器中內(nèi)存數(shù)據(jù)必須對(duì)齊、不規(guī)則的數(shù)據(jù)尋址模式、不一致的性能計(jì)數(shù)器 | 31個(gè)寄存器、數(shù)據(jù)可用不對(duì)齊、PC相對(duì)的數(shù)據(jù)尋址模式、對(duì)稱的數(shù)據(jù)尋址模式、定義在加構(gòu)中的性能計(jì)數(shù)器 |
RISC-V架構(gòu)師從過(guò)去指令集設(shè)計(jì)的錯(cuò)誤中吸取的教訓(xùn)。通常的教訓(xùn)是避免過(guò)去的ISA“優(yōu)化”。經(jīng)驗(yàn)和教訓(xùn)按照第一章中提出的七個(gè)ISA指標(biāo)進(jìn)行分類。在成本,簡(jiǎn)單性和性能下列出的許多指令集特性可以互換,因?yàn)檫@只是設(shè)計(jì)的偏好問(wèn)題,但不管它們出現(xiàn)在哪里,它們都很重要。
摘自《RISC-V-Reader》中文版
審核編輯黃宇
-
架構(gòu)師
+關(guān)注
關(guān)注
0文章
47瀏覽量
4729 -
RISC-V
+關(guān)注
關(guān)注
46文章
2461瀏覽量
48026
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論