首页 文章

为什么MSVC使用SSE2指令来处理这些微不足道的事情?

提问于
浏览
4

代码:

double Ret_Value=0;

在默认设置VS2012编译为:

10112128  xorps       xmm0,xmm0  
1011212E  movsd       mmword ptr [Ret_Value],xmm0

如果在项目设置中禁用了SSE2,则会将其编译为:

101102AC  fldz  
101102AE  lea         eax,[Ret_Value]  
101102B1  push        eax  
101102B2  fstp        qword ptr [Ret_Value]

编辑:我不确定 pushlea 是否与此初始化有关,也许是为了之后完成的事情,只是反汇编显示了这个C行代码 .

SSE2明显更好吗?除了2指令更短?这里做了什么样的优化?

如何发现:应用程序在不支持SSE2的旧处理器上开始失败 .

1 回答

  • 3

    英特尔优化参考手册第3.8.1节(优化浮点代码指南)说 -

    通过适当的开关使编译器能够使用SSE,SSE2和更高级的SIMD指令集(例如AVX) . 支持标量SIMD代码生成以替换x87代码生成 .

    第3.8.5节继续解释:

    除非您需要x87功能,否则请使用Streaming SIMD Extensions 2或Streaming SIMD Extensions . 大多数SSE2算术运算具有比X87对应的更短的延迟,并且它们消除了与X87寄存器堆栈的管理相关的开销 .

相关问题