我在寻找特定于上述两种情况的信息方面遇到了困难,希望听取你的专家意见。
首先:我知道间接跳转会损害分支预测,即使间接跳转的结果是常量,仍需要进行预测维护缓冲等操作,与绝对跳转相比。我的问题是,是否有人知道:
mov rax, 1234567812345678h;
jmp rax;
处理器的分支预测仍然认为这是间接跳转,或者在这种情况下它会计算数学运算..我这样做是因为x64没有直接的“jmp absolute 64”指令,只有间接的。:/(如何执行带有64位绝对地址的调用指令?如果您无法将跳转放得足够靠近目标并使用jmp rel32
,则建议使用此方法。)
其次,在这种程度上,jmp 0x1234和call 0x1234之间是否存在任何真正的区别(就处理器优化而言(指令缓存,预取器及其提示,分支预测))?(vc2012“速度优化”产生的是call,“min_size opt”产生的是jmp,“mixed optimization”产生的是x64的jmp,x86的call)