Dol*_*000 5 assembly gcc x86-64
在为具有 AVX 的 CPU(例如 with -march=sandy-bridge)进行编译时,与 SSE 版本相比,GCC 似乎总是更喜欢简单的标量浮点指令的 AVX 版本。例如,它使用vmulsd代替mulsd。
我想知道,是否有任何与性能相关的特定原因,或者只是 GCC 的一些实现细节使其更容易/更自然地安排此类指令?从我所拥有的来源(主要是 Agner 的指令表)中可以看出,AVX 和 SSE 指令的性能似乎相当。我意识到 AVX 指令是三个操作数,但 GCC 似乎几乎总是只使用与源操作数之一相同的目标寄存器。