如何使用_mm_extract_ps SSE GCC instrinc函数将十六进制浮点数转换为C/C++中的浮点数

我正在为二维卷积编写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

最佳答案
您应该能够使用_MM_EXTRACT_FLOAT.

顺便说一句,它看起来好像_mm_extract_ps和_MM_EXTRACT_FLOAT应该是相反的方式,即_mm_extract_ps应该返回一个浮点数,_MM_EXTRACT_FLOAT应该返回int表示,但我知道什么.

转载注明原文:如何使用_mm_extract_ps SSE GCC instrinc函数将十六进制浮点数转换为C/C++中的浮点数 - 代码日志