Piszę kod SSE do splotu 2D, ale dokumentacja SSE jest bardzo rzadka. Wyliczam iloczyn kropki z _mm_dp_ps i używam _mm_extract_ps, aby uzyskać wynik produktu dot, ale _mm_extract_ps zwraca heks reprezentujący float i nie mogę wymyślić, jak przekonwertować ten pływający hex do zwykłego float. Mógłbym użyć __builtin_ia32_vec_ext_v4sf, który zwraca float, ale chcę zachować kompatybilność z innymi kompilatorami.Jak przekonwertować float sześciokątny na zmiennoprzecinkowy w C/C++ za pomocą _mm_extract_ps SSE GCC instrinc function
_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;
}
Po co mi brakuje?
Niewielka pomoc zostanie doceniona, dzięki.
OpenSUSE 11,2
GCC 4.4.1
C++
Opcje kompilatora
-fopenmp -Wall -O3 -msse4.1 -march = Core 2
opcje Linker
-lgomp -Wall -O3 -msse4. 1 -march = core2
Też tak pomyślałem. –
Sądzę, że to zależy od sposobu, w jaki Intel opisuje instrukcję w ich dokumentacji, co może, ale nie musi być błędem - nagłówki gcc po prostu implementują to, co jest w dokumentacji. –