程序集 - x86_64 - 谓词

assembly - x86_64 - predicates

我正在为 x86_64 和 arm 编写一些程序集。

我想知道x86_64是否有一些定义分支谓词的方法。

我在英特尔文档中进行了搜索,但未能找到相关信息。

我们有 cmov,但它相当慢,cmp jmp 组合 往往 更快。

ARM 谓词是分支的替代。 IDK 你所说的 "branch predicates" 是什么意思。也许你的意思是 "predicate conditions"?

cmov 与只跳过一两条指令的分支相比通常是值得的,如果它完全不可预测的话。 Broadwell 和 Skylake 运行 cmov 作为单个 uop,但以前的微体系结构需要 2 uop,因为它具有 3 个输入依赖项。它还创建数据依赖性而不是控制依赖性。分支预测,当它起作用时,会更好。此外,cmov 不能采用立即操作数,这在很多情况下令人沮丧。

另一个可以使用条件作为输入的指令是setcc。使用 xor reg,reg / set flags / setcc low-byte-of-reg,以避免在读取完整寄存器时出现 partial-reg 停顿。

对于进位条件,sbb same,same 将产生 0 或 -1(用作 AND 掩码),或者 adc reg, 0 将产生 reg += CF.