使用xor reg,reg优于mov reg,0吗?
这个问题在这里已经有了答案:
为你的实际答案:
Intel 64和IA-32体系结构优化参考手册
3.5.1.8节是你想看的地方。
总之,在某些情况下,xor或mov可能是首选。 这些问题围绕依赖链和条件代码的保存。
在我售出我的1966HR旅行车后,我停止了修理自己的汽车。 我在与现代CPU类似的修复:-)
它确实取决于底层的微码或电路。 CPU很可能识别出"XOR Rn,Rn"
并简单地将所有位全部清零而不用担心内容。 但是,当然,它也可以用"MOV Rn, 0"
做同样的事情。 一个好的编译器会为目标平台选择最好的变体,所以这通常只是一个问题,如果你使用汇编编码。
如果CPU足够智能,则XOR
依赖关系会消失,因为它知道该值无关紧要,并将其设置为零(这又取决于正在使用的实际CPU)。
然而,我早已过去关心我的代码中的几个字节或几个时钟周期 - 这看起来像微优化发疯了。
x86具有可变长度指令。 MOV EAX,0需要比XOR EAX,EAX多一个或两个字节的代码空间。
链接地址: http://www.djcxy.com/p/15061.html上一篇: Does using xor reg, reg give advantage over mov reg, 0?
下一篇: Why does the enhanced GCC 6 optimizer break practical C++ code?