【发布时间】:2016-01-16 23:04:52
【问题描述】:
我正在为 x86_64 和 arm 编写一些程序集。
我想知道x86_64是否有一些定义分支谓词的方法。
我在英特尔文档中进行了搜索,但没有找到相关信息。
我们有cmov,但它相当慢,而cmp jmp 组合往往更快。
【问题讨论】:
-
显示一些代码很可能会帮助人们更快地回答您的问题。
-
唉,x86_64 没有 ARM 那样的谓词。
-
真可惜!谢谢!
-
现代 ARM(Thumb-2,AArch64)也没有它们。没有遗留指令集的范围。
-
使用最近的微架构,CMOV 并不慢。过去它很慢,但根据英特尔优化手册和 Agner Fog 指令时序表,CMOV 在 Broadwell (2014) 和更新的微架构上是单周期的。在 P4 F4 上是 10 个周期。那很慢。在通过 Haswell 的 Core 2 上,这是两个周期。 (gmplib.org/~tege/x86-timing.pdf) 有一个关于 CMOV 的旧 Linus 咆哮,但那是从 2007 年开始的,英特尔从那以后改进了他们的实现。此外,他们出于各种原因推荐 CMOV。所以如果 CMOV 适合,你应该使用它。
标签: assembly optimization x86-64 predicate