Assembly arm中说明的管道重新加注周期

Assembly arm中说明的管道重新加注周期,assembly,arm,pipeline,instruction-set,Assembly,Arm,Pipeline,Instruction Set,以下是具有三级流水线的arm Cortex M4处理器的说明。我们如何知道此类指令的流水线重新填充周期数 Assembler Cycles 1. MOV PC, Rm 1 + P 2. ADD PC, PC, Rm 1 + P 3. B <label> 1 + P 4. BL <label>

以下是具有三级流水线的arm Cortex M4处理器的说明。我们如何知道此类指令的流水线重新填充周期数

     Assembler                   Cycles
 1.  MOV PC, Rm                  1 + P
 2.  ADD PC, PC, Rm              1 + P
 3.  B <label>                   1 + P
 4.  BL <label>                  1 + P
汇编程序周期
1.MOV个人电脑,Rm 1+P
2.添加PC、PC、Rm 1+P
3.B 1+P
4.BL 1+P

根据数据表p,是管道重新填充所需的循环次数。根据目标指令的对齐方式和宽度,以及处理器是否能够提前推测地址,其范围从1到3。答案就在这里:1到3个周期取决于具体情况。即使是像Cortex-M4这样相对简单的东西,也有足够的因素不一定能够(或有用)指定一些硬性规则。然而,这并不是说,根据现有信息,我们不能进行任何推理:

取决于目标指令的对齐方式和宽度

因此,可以相当安全地假设3周期最坏情况涉及半字对齐的32位目标指令,需要2次指令回迁才能对整个指令进行解码。因此,一条16位目标指令或一条字对齐的32位指令很有可能在一个较短的周期内被一次指令提取所覆盖

以及处理器是否能够提前推测地址

鉴于上述情况,成功的分支预取和不成功的分支预取之间的差异可以解释最佳情况和最坏情况之间2个周期中的另一个周期,这似乎是合理的。似乎没有太多可用的信息,但我假设它是管道解码阶段的一个简单静态预测器,在这种情况下,可能是寄存器分支(包括PC写入)和条件转发分支未被预测的情况,预测了无条件直接分支和条件向后分支

现在,这只是受过教育的猜测——我不知道ARM微体系结构的秘密,所以这里可能有比我想象的更多的微妙之处,但它已经足够复杂了。我怀疑是否有人会愿意选择反汇编代码,对照所有可能的分支/目标组合进行交叉引用,只是为了在这里和那里解释2个周期——如果您真的需要知道一段代码执行多少个周期,那么最好的做法就是