我无法找到上述两个案例的特定信息,尽管听取了您的专家意见。
第一件事是:我知道间接 jmp 会伤害分支预测,并且即使间接的结果是恒定的,它仍然需要预测维护缓冲区和东西,所有这些都与绝对 jmp 相比。
我的问题是,如果有人知道:
mov rax, 1234567812345678h;
jmp rax;
处理器的分支预测器仍然认为是间接的,或者在这种情况下它是否进行数学运算。我这样做是因为 x64 没有直接的“jmp absolute 64”指令,只有间接的。:/ ( How to execute a call instruction with a 64-bit absolute address?建议这个,如果你不能把跳转足够靠近目标并使用jmp rel32
。)
其次,在这个程度上,jmp 0x1234 和 call 0x1234 之间是否有任何真正的区别(在处理器优化方面(指令缓存、预取器及其提示、分支预测))?(vc2012“速度优化”产生调用,“min_size opt”产生jmp,“混合优化”产生x64的jmp,x86的调用)