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`