是否已知流行的处理器“优化”分支到下一条指令的指令?

时间:2015-02-10 12:28:35

标签: assembly x86 branch-prediction

我正在检查Visual Studio中某些程序的反汇编,请参阅以下内容:

001B1015  cmp         ebx, edx  
001B1017  jae         wmain+19h (001B1019h)  
001B1019  pop         esi

这段代码很蠢。如果jae导致条件跳转控制传递到完全相同的指令,否则它将通过它。

问题是CPU中的分支预测将如何处理它。 CPU将预测它是否应该“跳跃”或“跌落”。在他们收集一些先前执行代码的统计数据之前,英特尔x86处理器预测条件跳转为“将不会完成”。所以这个jae将被预测为“不会发生,通过”,CPU将选择“通过”路径。

如果发生错误预测(事实证明错误地选择了“通过”路径),CPU正式应该重置管道并改为运行“分支”路径。

这里的诀窍是“堕落”和“分支”有效地做同样的事情,相当于nop

我从未在任何有关分支的文档中分析过这种情况。

流行的CPU通常会将此jae视为nop还是会使用常用的预测逻辑?

0 个答案:

没有答案