Thumb指令集之: Thumb指令应用
11.9Thumb指令应用
11.9.1Thumb的实现
对3级流水线的ARM处理器来说,做相对较小的改动就可以实现Thumb指令集(5级流水线的实现要复杂些)。为实现Thumb指令集,在指令流水线中增加了Thumb指令解码逻辑,该解码逻辑将预取的Thumb指令转换成等价的ARM指令。图11.66显示了Thumb指令的扩展逻辑组织。
从图11.66可以看出,Thumb指令增加了解码扩展逻辑(Decompressor)与指令译码器串连,但这并不会增加指令的译码时间。在指令流水线译码周期的第一阶段只做了很少的工作,因此可以把扩展逻辑安排在这里而不会影响周期时间或增加流水线延时。
Thumb指令解码扩展逻辑将16位的Thumb指令静态地转换为等价的32位ARM指令。这主要包括主操作码和次操作码的查表转换,3位寄存器指示符(specifier)零扩展成4位寄存器指示符,以及所需要的其他域的映射。
例如,Thumb指令“ADDRd,#imm8”与对应的ARM指令“ADDRd,Rd,#8”的映射如图11.67所示。
图11.66Thumb指令的扩展逻辑组织
图11.67Thumb指令到ARM指令的映射
Thumb指令解码逻辑实现Thumb指令到ARM指令映射时遵循以下规则:
①ARM指令的条件域(cond,bits[31:28])默认使用always。
注意 | 转移指令除外,转移指令是Thumb指令集中惟一一个条件执行的指令。 |
②在Thumb指令操作码中隐含地指定Thumb数据处理指令是否应该修改CPSR中的条件标志位,在ARM指令中要明确指定。
③通过重复寄存器指示符将Thumb指令的2地址指令格式转换为ARM的3地址指令格式。
Thumb指令解码扩展逻辑的简单性对Thumb指令集的效率是非常重要的。如果Thumb指令解码扩展逻辑构成复杂、速度低并且功耗大,那么Thumb指令就没有什么价值了。
c++相关文章:c++教程
评论