我正在为 2D 卷积编写 SSE 代码,但 SSE 文档非常稀疏。我正在使用 _mm_dp_ps 计算点积并使用 _mm_extract_ps 来获得点积结果,但是 _mm_extract_ps 返回一个表示浮点数的十六进制,我不知道如何将此十六进制浮点数转换为常规浮点数。我可以使用 __builtin_ia32_vec_ext_v4sf 返回一个浮点数,但我想保持与其他编译器的兼容性。
_mm_extract_ps (__m128 __X, const int __N)
{
union { int i; float f; } __tmp;
__tmp.f = __builtin_ia32_vec_ext_v4sf ((__v4sf)__X, __N);
return __tmp.i;
}
我错过了什么?
一点帮助将不胜感激,谢谢。
OpenSUSE 11.2
GCC 4.4.1
C++
编译器选项
-fopenmp -Wall -O3 -msse4.1 -march=core2
链接器选项
-lgomp -Wall -O3 -msse4.1 -march=core2