I'm writing a SSE code to 2-D convolution but SSE documentation is very sparse.
I'm calculating dot-product with _mm_dp_ps
and using _mm_extract_ps
to get the dot-product result but _mm_extract_ps
returns a hex float
and I can't figure out how to convert this hex float
to a regular float
.
I could use __builtin_ia32_vec_ext_v4sf
that returns a float
but I wanna keep compatibility with others compilers.
_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;
}
What point I'm missing?
A little help will be appreciated, thanks.
OpenSUSE 11.2, GCC 4.4.1, C++
Compiler options: -fopenmp -Wall -O3 -msse4.1 -march=core2
Linker options: -lgomp -Wall -O3 -msse4.1 -march=core2