微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐