我有一个函数指令序列,后面跟着两个指令 Loop: . . . .SUB R20, R4, RxBNZ R20, Loop 是BNZ,分支不是零数据依赖于SUB指令吗?还是反依赖? 从理论上讲,分支指令和早期指令(本例中为SUB)之间存在数
Loop: . . . . SUB R20, R4, Rx BNZ R20, Loop
是BNZ,分支不是零数据依赖于SUB指令吗?还是反依赖?
从理论上讲,分支指令和早期指令(本例中为SUB)之间存在数据依赖关系,它修改了分支将检查跳转的寄存器,但在许多现代架构中,这种依赖关系不会传播到以下指令,与其他数据依赖性不同,由于分支预测.也就是说,在具有预测的体系结构上,数据依赖性不太可能实际上导致分支在SUB之后生效 – 通常它将在SUB执行之前生效(即跳转或不跳转),并且仅在结果之后如果猜测不正确,将检查猜测的SUB是否可用,并且自分支以来的所有推测执行都将被回滚.
因此,在数据依赖于其条件和目标时,灰色区域中存在跳跃.从最严格的意义上讲,它们是依赖的,但是当预测工作时(通常是预测的),它们的表现并不像那样.它有点像xor r1,r1,r1或foo32bits>>的灰色区域. 32存在于:通过严格的定义,这些指令取决于它们的输入,但在这些特定情况下,答案总是相同(0)并且一些CPU可能识别这一点并且不应用通常的依赖性规则.