assembly - x86_64 - 谓词

时间:2016-01-16 23:04:53

标签: assembly optimization x86-64 predicate

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

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

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

我们有cmov,但速度相当慢,cmp jmp组合趋势更快。

1 个答案:

答案 0 :(得分:2)

ARM谓词是分支的替代。 IDK你的意思是“分支谓词”。也许你的意思是“谓词条件”?

与只跳过一两条指令的分支相比,

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

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

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