PowerPC 是 IBM 的商业版 RISC 计算机体系结构。它的前任有IBM RT/PC, IBM Power1, and IBM Power2, 以及 Motorola 88x00.
分支寄存器: 链接和计数
PowerPC 有专门的链接寄存器(link register), 而不是像其他体系结构那样, 链接寄存器用的是通用寄存器中的一个(比如ARM的LR寄存器其实就是R14)。 程序执行过程中, 并不是每个函数都会调用子函数, 因此, 并不是每次函数调用都需要保存链接寄存器。 将链接寄存器放在特定的寄存器位置上, 也能加速流水过程中获取返回地址的过程。
类似的, PowerPC 也有一个专门的计数寄存器, 用于程序的循环时候的计数。 用特定的寄存器, 分支硬件可以更快速的判断出分支跳转的预期结果。 分支指令判断的时候, 也可以方便的减少计数寄存器的值。
考虑到计数寄存器和链接寄存器已经跟控制分支的硬件是一起的,并且分支的一个问题是在流水中更早的获取目标地址, PowerPC 的架构师因此还为这些提供了更多的用途。 任一寄存器都可以用来保存一个条件跳转的目标地址。 为此, PowerPC 还在基础跳转指令之外添加了两条指令, 用于从寄存器中获取目标地址(BCLR, BCCTR)。
其他指令
跟很多其他 RISC 不同, 0号寄存器并不是强制为0。 还有其他的特性如下:
(译注:早期的0号寄存器为0是普遍现象,现在则是不限制为普遍现象)
- 可以用单条指令读取或者保存多个寄存器
- LSW 和 STSW 可以用来获取或者存储固定长或者可变长的字符串。
- 循环移位和掩码指令可以用来扩展或者插入位域。
- 负数的右移如果有1被移出,会将 CA 位置位。 因此, 可以利用这个来做向 0 舍入的移位除法。
- CBTLZ 可以计算前导零的数量。
- SUBFIC 计算 立即数减RA 。
- 逻辑立即数移位指令, 支持在做AND, OR, 或者XOR前, 左移最多16比特。