bcctr 或 bcc (分支条件到计数寄存器) 指令
用途
有条件地分支到 "盘点寄存器" 中包含的地址。
语法
| 位数 | 值 |
|---|---|
| 0 - 5 | 19 |
| 6 - 10 | BO |
| 11 - 15 | BI |
| 16 - 18 | /// |
| 19 - 20 | BH |
| 21 - 30 | 528 |
| 31 | LK |
描述
bcctr 和 bcc 指令有条件地分支到由计数寄存器中包含的分支目标地址指定的指令。 分支目标地址是计数寄存器位 0-29 和 b '00' 的并置。
bcctr 和 bcc 指令有两种语法形式。 每种语法形式对链接位和链接寄存器都有不同的影响。
| 项 | 描述 | |||
|---|---|---|---|---|
| 语法表单 | 绝对地址位 (AA) | 定点异常寄存器 | 链路位 (LK) | 条件寄存器字段 0 |
| bcctr | 无 | 无 | 0 | 无 |
| bcctrl | 无 | 无 | 1 | 无 |
| bcc | 无 | 无 | 0 | 无 |
| bccl | 无 | 无 | 1 | 无 |
bcctr 和 bcc 指令的两种语法形式从不影响 "定点异常寄存器" 或 "条件寄存器" 字段 0。 如果链接位是 1 ,那么会将分支指令后面的指令的有效地址放入链接寄存器中。
"分支选项" 字段 (BO) 用于将不同类型的分支组合到单个指令中。 提供了扩展助记符以自动设置 "分支选项" 字段。
BO 字段的编码是在 PowerPC® 体系结构中定义的。 以下列表简要描述了使用 pre-V2.00 编码的此字段的可能值:
| BO | 描述 |
|---|---|
| 0000y | 减量 CTR; 然后分支 (如果减量 CTR 不是 0 且条件为 False)。 |
| 0001y | 减少 CTR; 然后分支 (如果已减少的 CTR 为 0 且条件为 False)。 |
| 001zy | 分支 (如果条件为 False)。 |
| 0100y | 减小 CTR; 然后分支 (如果已减小的 CTR 的位不是 0 且条件为 True)。 |
| 0101y | 递减 CTR; 然后分支 (如果递减 CTR 为 0 且条件为 True)。 |
| 011zy | 条件为 True 时进行分支。 |
| 1z00y | 减小 CTR; 然后分支 (如果已减小的 CTR 不是 0)。 |
| 1z01y | 减小 CTR; 然后分支 (如果已减小的 CTR 为 0)。 |
| 1z1zz | 总是分支。 |
在 PowerPC® 体系结构中,位如下所示:
z位表示必须为 0 的位。 如果位不是 0 ,那么指令格式无效。y位提供有关是否可能采用条件分支的提示。 此位的值可以是 0 或 1。 缺省值为 0。
在 POWER ® 系列体系结构中, z 和 y 位可以是 0 或 1。
下面简要描述了使用 V2.00 编码的 BO 字段的编码:
| BO | 描述 |
|---|---|
| 0000z | 减量 CTR; 然后分支 (如果减量 CTR 不是 0 且条件为 False)。 |
| 0001z | 减少 CTR; 然后分支 (如果已减少的 CTR 为 0 且条件为 False)。 |
| 001at | 分支 (如果条件为 False)。 |
| 0100z | 减小 CTR; 然后分支 (如果已减小的 CTR 的位不是 0 且条件为 True)。 |
| 0101z | 递减 CTR; 然后分支 (如果递减 CTR 为 0 且条件为 True)。 |
| 011at | 条件为 True 时进行分支。 |
| 1a00t | 减小 CTR; 然后分支 (如果已减小的 CTR 不是 0)。 |
| 1a01t | 减小 CTR; 然后分支 (如果已减小的 CTR 为 0)。 |
| 1z1zz | 总是分支。 |
BO 字段的 a 和 t 位可由软件用于提供关于是否可能采用分支的提示,如下所示:
| at | 提示 |
|---|---|
| 00 | 未提供任何提示。 |
| 01 | 已预留 |
| 10 | 支部很可能不拿。 |
| 11 | 支部很有可能。 |
有关更多信息,请参阅 IBM Power ISA PDF。
分支提示字段 (BH) 用于提供关于指令使用的提示,如下所示:
| BH | 提示 |
|---|---|
| 00 | 该指令不是子例程返回; 目标地址可能与先前执行分支时使用的目标地址相同。 |
| 01 | 已预留 |
| 10 | 已预留 |
| 11 | 目标地址不可预测。 |
参数
| 项 | 描述 |
|---|---|
| BO | 指定 "分支选项" 字段。 |
| BI | 指定条件比较的条件寄存器中的位。 |
| BIF | 指定 "条件寄存器" 字段,该字段指定要用于条件比较的 "条件寄存器" 位 (LT , GT, EQ 或 SO)。 |
| BH | 提供有关使用指令的提示。 |
示例
以下代码从特定地址 (取决于条件寄存器中的位) 到计数寄存器中包含的地址进行分支,并且未给出任何分支提示:
bcctr 0x4,0,0
cror 31,31,31
# Branch occurs if LT bit in the Condition Register is 0.
# The branch will be to the address contained in
# the Count Register.
bcctrl 0xC,1,0
return: cror 31,31,31
# Branch occurs if GT bit in the Condition Register is 1.
# The branch will be to the address contained in
# the Count Register.
# The Link register now contains the address of return.