分支指令数据是否依赖?

时间:2016-10-18 19:54:34

标签: assembly pipeline cpu-architecture

我有一个函数指令序列,后面跟着两个指令

Loop: .
      .
      .
      .
SUB R20, R4, Rx
BNZ R20, Loop

是BNZ,分支不是零数据依赖于SUB指令吗?还是反依赖?

2 个答案:

答案 0 :(得分:3)

理论上,在分支指令和早期指令(本例中为SUB)之间存在数据依赖关系,它修改了分支将检查跳转的寄存器,但是在许多现代体系结构中,由于分支预测,这种依赖性不会传播到以下指令,与其他数据依赖性不同。

也就是说,在具有预测的体系结构上,数据依赖性实际上不太可能导致分支在SUB之后生效 - 通常它会生效(即跳转或not)在执行SUB之前,只有在SUB的结果可用时才会检查猜测,如果猜测不正确,将自动回滚分支以来的所有推测执行

因此,在涉及数据依赖于其条件和目标时,灰色区域中存在跳跃。从最严格的意义上讲,它们是依赖的,但是当预测工作时(通常是预测的),它们的表现并不像那样。这有点像xor r1, r1, r1foo32bits >> 32存在的灰色区域:通过严格定义,这些指令取决于它们的输入,但在这些特定情况下,答案总是相同(0)并且一些CPU可能会识别这一点而不应用通常的依赖规则。

答案 1 :(得分:2)

是的,指令之间存在数据依赖关系。分支指令分解为比较和跳转。比较将由ALU评估,然后相应地更新PC。该比较操作的输入依赖于任何其他操作的相同方式。