vpo*_*man 4 optimization assembly gcc x86-64 low-level
我发现了一点点好奇心; 当我有很多优化标志时,GCC似乎生成以下代码:
00000000004019ae: test %si,%si
00000000004019b1: movups %xmm0,%xmm0
00000000004019b4: je 0x401f40 <main(int, char**)+1904>
Run Code Online (Sandbox Code Playgroud)
问题:第二条指令的用途是什么?它看起来不像/做/什么; 那么,在指令缓存中对齐程序是否有一些优化?或者它是无序执行的东西?(-mtune=native
如果有帮助,我正在Nehalem上编译:D).
没什么急事,当然,只是好奇.
可能xmm0
包含一些计算的结果,在整数域中完成(使用整数SSE指令).并且使用的下一条指令xmm0
应该在浮点域(浮点SSE指令)中.
如果xmm0
使用movaps
或等指令迁移到浮点域,则Nehalem可以更快地执行下一条指令movups
.在条件跳转指令之前执行此迁移可能是有益的.在这种情况下,迁移只进行一次.如果没有movups
使用指令,则可以进行两次迁移(自动地,通过该寄存器上的第一个FP指令),第一次推测性地,在错误预测的分支上,以及第二次 - 在正确的分支上.
编译器注意到,似乎优化计算依赖链比优化代码大小和执行资源更好.
归档时间: |
|
查看次数: |
372 次 |
最近记录: |