我正在为x86_64和arm编写一些程序集。
我想知道x86_64是否有一些定义分支谓词的方法。
我在英特尔文档中搜索但未能找到相关信息。
我们有cmov
,但速度相当慢,cmp jmp
组合趋势更快。
答案 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
。