AArch32中thumb指令的IT block

IT block是thumb指令集中引出来的东西,用来解决thumb指令不能条件执行的缺点。可以通过IT指令,给后续的1到4条指令,决定其执行条件。

IT block的信息,存放在PSTATE中,在thumb指令集中,也就是存在CPSR中。存放在CPSR的IT域。


IT指令的指令编码如下:


其汇编描述:


  • first cond:决定IT block块中第一条指令的条件

  • mask:决定IT block块中,有几条条件执行指令

一、IT域的初始值

那CPSR中的IT域是如何记录IT block的状态的。

IT域在初始的时候,是如下记录IT block状态的。


图中的N1,N2,N3,N4,对应IT指令之后的4条指令。

IT指令,在译码的时候,根据firstcond和mask域,就可以知道,后续有几条指令,会在IT block中,以及每条指令执行的条件。然后根据有几条指令,将对应的值,填充到CPSR的IT域中。

比如如下指令

    ITTET EQ(EQ的编码是0000)

根据ITTET,确定出之后的IT block,有4条指令。并且第0条,第1条,第3条和EQ条件一致,第2条和EQ条件相反。此时CPSR中的IT域填充如下值

[7:5]

[4]

[3]

[2]

[1]

[0]

3'b000

0

0

1

0

1

    

比如如下指令

ITEE PL(PL的编码是0101)

根据ITTE,确定出之后的IT block,有3条指令。并且第0条,和PL条件一致,第1条,第2条和PL条件相反。此时CPSR中的IT域填充如下值:    

[7:5]

[4]

[3]

[2]

[1]

[0]

3'b010

1

0

0

1

0

二、IT域的变化

以上只是CPSR的IT域的初始值,那么在执行IT block中指令过程中,IT域又是如何变化的呢?

下图是IT域随着IT block中4条指令的执行情况的变化表。可以看出,IT[7:5]不变,IT[4:0]在执行完一条指令之后,就左移一位。IT[7:4]组成新的条件码,来决定指令的运行条件。


三、IT block的局限

处于IT block中的指令,其条件,要不就是和IT指令限定的条件相同,要不就是相反,不能有其他情况,不能像A32那样,可以灵活的为每条指令,设定执行条件。

下图是arm定义的条件码的编码,可以看出2个条件码一个组合,且最后一个bit是相反的关系。这也是为什么条件码的高3个bit,要存放在IT[7:5]中,剩下一个bit,依赖于IT[4]即可。


此条目发表在ARM分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。