Chinaunix首页 | 论坛 | 博客
  • 博客访问: 578708
  • 博文数量: 65
  • 博客积分: 2844
  • 博客等级: 上尉
  • 技术积分: 996
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-02 12:01
文章分类

全部博文(65)

文章存档

2014年(7)

2012年(20)

2011年(35)

2010年(3)

分类: 嵌入式

2012-05-20 14:43:57

    2 B-Form类指令

E500内核中,无条件转移指令使用这个指令格式。B-Form类指令格式如下所示:

 

0~5

6~10

11~15

16~29

30

31

OPCD

BO

BI

BD

AA

LK

 

B-Form类指令共包含以下几种指令:

l  bc     BOBIBD   // AA=0LK=0

l  bca   BOBIBD   // AA=1LK=0

l  bcl    BOBIBD   // AA=0LK=1

l  bcla  BOBIBD   // AA=1LK=1

BI字段用来确定使用CR寄存器CRn的字段中哪个状态位作为指令跳转的条件。其中BI的第0~2字段用来选择使用哪个CRn作为状态字段,该字段为0时表示使用CR0字段作为转移指令使用状态字段,为1时表示使用CR1字段作为转移指令使用状态字段。而BI的第3~4字段选择使用什么条件作为转移条件,如下所示:

    BI[3:4]       描述

    00              使用LT状态位用做指令转移条件

01              使用GT状态位用做指令转移条件

10              使用EQ状态位用做指令转移条件

11              使用SO状态位用做指令转移条件

BO字段用来表示指令根据什么条件进行跳转。

1)第0位。如果此位为1bc类指令将不根据CR寄存器的状态进行条件转移,此时bc指令只能根据CTR寄存器的值为0或不为0决定是否进行条件转移。程序使用简单的Loop循环语句时,可以将此位置1。此位为0时,表示bc类指令将根据CR寄存器的相应字段和存放在BI中的条件决定是否进行跳转。

2)第1位。如果此位为1,则当指令执行的条件为真时进行转移;为0时,当指令执行的条件为假时进行转移。此位可以用来实现布尔表达式中的非操作。在CR寄存器的CRn字段中只定义了LTGTEQ位,这些位可以实现“小于”,“大于”或“等于”这些布尔条件,如果程序需要实现“不小于”、“不大于”和“不等于”这些布尔条件,需要使用此位。例如将此位置0,并将BI[3:4]00,即可实现“不小于”这种转移指令。

3)第2位。如果该位为1,执行bc指令时,CTR寄存器的值保持不变;如果改位为0,执行bc指令时,CTR寄存器将做自减操作。

4)第3位。如果该位为1,表示当CTR寄存器为0时进行条件转移。当此位为0时,表示当CTR寄存器不为0时进行条件转移。

5)第4位:“y”位。此位用来支持静态分支预测功能。

NoteE500内核不支持指令的静态预取操作,因此不支持这一位。E500内核使用指令动态预取来增强转移语句命中的效率。

使用“bc 160BD”表示将CTR寄存器进行自减操作,如果CTR不为0则进行跳转;使用“bc 40BD”表示运算或比较结果为0是进行跳转。E500内核使用了许多助记符来表示各种条件跳转指令,如使用“bdnz”助记符表示“bc 160BD”,使用“beq”助记符表示“bc 40BD”。常用的助记符还有lt(小于),le(小于等于),eq(等于),so(溢出)等。

PowerPC处理器中,转移指令非常少,常用的条件转移指令只有bcbcl

阅读(1873) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~