如何在GCC中使用SSE2? 我想使用双值。
我搜索s.th.像这样: http://vrm-vrm.blogspot.com/2009/10/gcc-intrinsics.html 仅用于双倍值。
答案 0 :(得分:4)
如果您想使用SSE2 double
insn,则必须使用gcc -mfpmath=sse -msse2
进行编译。
单独选项-msse2
将允许您使用SSE2内在函数,-mfpmath=sse
将导致GCC为所有FP操作发出SSE2 insn。
另请注意,-O3
启用了矢量化。
矢量化SSE2-4 insn的优点是显而易见的,Sandy Bridge处理器每个周期最多可以执行三次256位操作(例如4次双倍乘法,4次双重加法和一些随机播放)
然而,英特尔优化手册建议使用SSE进行标量操作,原因包括平面寄存器模型和较短的延迟,与传统的x87 insn相比。
修改强>
忘记提及,对于32位代码,您还可以添加-msseregparm
,这将导致FP参数和返回值通过SSE寄存器传递。默认情况下,它们分别在内存和%st0
中传递。当然,这会改变ABI,因此必须使用此选项编译所有交互模块。