标签:
序
前文《arm64》、《arm32》已经介绍arm,aarch64优化的一些基本知识,本文着重介绍优化过程中容易混淆的点,或需注意的点。
1. 关于指令编码长度
1.1 aarch32
A32模式(ARM instruction sets),指令固定的编码长度为32bit
T32模式(Thumb instruction sets),指令可以编码成16bit长,也可编码成32bit长
1.2 aarch64
指令固定的编码长度为32bit
参考https://static.docs.arm.com/ddi0487/ca/DDI0487C_a_armv8_arm.pdf A1.3.2 The ARM instruction sets
2. 关于当前指令的地址
2.1 aarch32
在ARM32状态下,当前执行指令的地址通常是pc-8,而在Thumb状态下通常是pc-4。参考地址:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0013d/index.html 程序计数器(pc)
疑问?
指令的编码长度为32位,即4字节,为什么arm模式下,当前指令是pc-8:
拿ARMv7三级流水线做示例,如图,假设add指令fetch时,指令地址为pc1; add指令decode时,下一条指令sub又进入fetch阶段,此时pc2 = pc1 + 4; add指令execute时,sub指令后的cmp油进入fetch阶段,此时pc &#