assembly – 分支指令数据是否依赖?

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

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

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

解决方法

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

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

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

相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目...
单一职责原则定义(Single Responsibility Principle,SRP)...
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强...
适配器模式将一个类的接口转换成客户期望的另一个接口,使得...
策略模式定义了一系列算法族,并封装在类中,它们之间可以互...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,...