Как преобразовать шестнадцатеричное плавание в плавание в C/C++ с помощью _mm_extract_ps SSE GCC instrinc функция

Я пишу код SSE к 2D свертке, но документация 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 - стена-o3-msse4.1-march=core2
Опции компоновщика
- lgomp - стена-o3-msse4.1-march=core2

6
задан mskfisher 11 June 2012 в 12:34
поделиться

1 ответ

У вас должна быть возможность использовать _MM_EXTRACT_FLOAT .

Между прочим, мне кажется, что _mm_extract_ps и _MM_EXTRACT_FLOAT должны быть наоборот, то есть _mm_extract_ps должен возвращать float, а _MM_EXTRACT_FLOAT должен возвращать представление int, но что я знаю.

6
ответ дан 10 December 2019 в 00:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: