PowerPC特有的指令

PowerPC 是 IBM 的商業(yè)版 RISC 計算機體系結(jié)構(gòu)。它的前任有IBM RT/PC, IBM Power1, and IBM Power2, 以及 Motorola 88x00.

分支寄存器: 鏈接和計數(shù)

PowerPC 有專門的鏈接寄存器(link register), 而不是像其他體系結(jié)構(gòu)那樣, 鏈接寄存器用的是通用寄存器中的一個(比如ARM的LR寄存器其實就是R14)。 程序執(zhí)行過程中, 并不是每個函數(shù)都會調(diào)用子函數(shù), 因此, 并不是每次函數(shù)調(diào)用都需要保存鏈接寄存器。 將鏈接寄存器放在特定的寄存器位置上, 也能加速流水過程中獲取返回地址的過程。

類似的, PowerPC 也有一個專門的計數(shù)寄存器, 用于程序的循環(huán)時候的計數(shù)。 用特定的寄存器, 分支硬件可以更快速的判斷出分支跳轉(zhuǎn)的預(yù)期結(jié)果。 分支指令判斷的時候, 也可以方便的減少計數(shù)寄存器的值。

考慮到計數(shù)寄存器和鏈接寄存器已經(jīng)跟控制分支的硬件是一起的,并且分支的一個問題是在流水中更早的獲取目標(biāo)地址, PowerPC 的架構(gòu)師因此還為這些提供了更多的用途。 任一寄存器都可以用來保存一個條件跳轉(zhuǎn)的目標(biāo)地址。 為此, PowerPC 還在基礎(chǔ)跳轉(zhuǎn)指令之外添加了兩條指令, 用于從寄存器中獲取目標(biāo)地址(BCLR, BCCTR)。

其他指令

跟很多其他 RISC 不同, 0號寄存器并不是強制為0。 還有其他的特性如下:
(譯注:早期的0號寄存器為0是普遍現(xiàn)象,現(xiàn)在則是不限制為普遍現(xiàn)象)

  • 可以用單條指令讀取或者保存多個寄存器
  • LSW 和 STSW 可以用來獲取或者存儲固定長或者可變長的字符串。
  • 循環(huán)移位和掩碼指令可以用來擴展或者插入位域。
  • 負(fù)數(shù)的右移如果有1被移出,會將 CA 位置位。 因此, 可以利用這個來做向 0 舍入的移位除法。
  • CBTLZ 可以計算前導(dǎo)零的數(shù)量。
  • SUBFIC 計算 立即數(shù)減RA 。
  • 邏輯立即數(shù)移位指令, 支持在做AND, OR, 或者XOR前, 左移最多16比特。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容