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]即可。