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比特。