power指令集 mysql_PowerPC 体系结构之指令集(转)

本文详细介绍了PowerPC架构中的分支指令集,包括非条件跳转、条件跳转、与计数寄存器关联的跳转以及与链接寄存器关联的跳转。通过BO、BI、BD参数和不同的后缀,解释了如何实现各种分支逻辑,如无条件跳转、条件判断、循环和过程调用。同时,文章还涉及到了与CR相关的指令,以及整数指令中的访存、算术、逻辑、比较和陷阱指令等。
摘要由CSDN通过智能技术生成

return a + b + c + d;

}

100004b8:   80 01 00 24     lwz

r0,36(r1)

100004bc:   7f 9c 1a 14     add

r28,r28,r3

100004c0:   83 61 00 0c     lwz

r27,12(r1)

100004c4:   7c 7d e2 14     add

r3,r29,r28

100004c8:   83 81 00 10     lwz

r28,16(r1)

100004cc:   83 a1 00 14     lwz

r29,20(r1)

100004d0:   7c 08 03 a6     mtlr

r0

100004d4:   38 21 00 20     addi

r1,r1,32

100004d8:   4e 80 00 20     blr

------------------------------------------------------------------

3. 分类概述

3.1 分支跳转指令

这类指令算是 PowerPC 里比较有特色的,也是稍显复杂的。这类指令与 CR, LR 和 CTR

紧密相联,建构起判断、循环和过程调用这些程序的基本结构。其大致可分为四类:

Branch

Branch Conditional

Branch Conditional to Count Register

Branch Conditional to Link Register

3.1.1 Branch

这类指令与 CR 没有联系,即为非条件跳转,助记符后直接跟立即数地址。指令内为立即数地址预留 26 位,即可跳转 2^26

大小的空间,如:(CIA, Current Instruction Address)

b         0x20

-----> 以当前指令地址为基点,往后跳转 0x20 字节,即 PC = CIA + 0x20

ba       0x20

-----> 直接跳转到地址 0x20 处。后缀为 a,则表示使用

Absolute Address,PC = 0x20。

bl        0x20

-----> 在 b 0x20 的基础上,将 LR 更新为 CIA + 4

bla      0x20

-----> 使用绝对地址,且更新 LR。后缀带 l,则表示更新 LR 为 CIA + 4

以上针对 32 位的情形,对 64 位则使用指令 be, bea, bel, bela 功能与上同。

3.1.2 Branch Conditional

此类为条件跳转指令。皆以 bc 开头,带 3 个操作数,如:

bc    BO, BI, BD

bca    BO, BI, BD

bcl    BO, BI, BD

bcla   BO, BI, BD

后缀 a, l 的含义与 branch 类指令同。BO 指定跳转的条件,5 位;BI 指定关联的 CR 位,也是 5 位;BD

为跳转的立即数地址,16 位。

其中以 BO 的编码最为复杂(BO 从左到右编号为 0 ~ 4):

BO[0]: 为 1,则直接跳转

BO[1]: 为 1,则条件为真时,跳转。否则条件为假时,跳转

BO[2]: 为 1,则 CTR 不自动减 1

BO[3]: 为 1 时,则 CTR == 0 时跳转;为 0 时,则 CTR != 0 时跳转

BO[4]: 静态预测位,1 表示 unlikely,0 表示 likely

则常见的 BO 值:

20 (0b10100) 则表示无条件跳转

12 (0b01100) 则表示 CR 的某个位为 1 时跳转

4 (0b00100) 则表示 CR 的某个位为 0 时跳转

至于静态预测的策略位,默认被置为0,则其行为为:

b1. 目标地址小于当前指令地址,预测为跳转

b2. 目标地址大于当前指令地址,预测为不跳转

b3. 对于目标地址在 CTR/LR 中的条件跳转指令,一律预测为不跳转

若该位被置 1,则上述 b1, b2, b3 的静态预测行为分别为:不

跳转,跳转,跳转。

可以给分支指令加一个 +/- 的后缀,来简化。加 '+' 的指令,一律预测为跳转。加 '-' 的分支指令,一律预测为不

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值