2013-04-17 3 views
0

Я новичок в sse, и у меня есть проблемы с его поиском, , пожалуйста, скажите мне, что является хорошим способом конвертировать (усекать как в "(int) float_") четыре упакованных поплавки я в XMM3 зарегистрироваться на четыре Интс и хранить его в памяти (некоторые, как «MOVAPS oword [EDX + 32], XMM3» хранение ясно, но я не нахожу только, как конвертировать)Преобразование четырех поплавков в xmm3 до четырех ints в памяти

+0

Вы можете сэкономить себе много горя, используя внутреннюю защиту, а не пытаться сделать это в сыром asm. –

ответ

3

Используйте искробезопасность, если вы цените свое здравомыслие (и свободное время):

int32_t *dest; 
__m128 vf = _mm_set_ps(4.0f, 3.0f, 2.0f, 1.0f); 
__m128i vi = _mm_cvttps_epi32(vf); // 4 x float -> 4 x int (with truncation) 
_mm_store_epi32(dest, vi); // NB: use _mm_storeu_epi32 if `dest` not aligned 

Если вы должны использовать asm по какой-либо причине, соответствующая инструкция для _mm_cvttps_epi32 равна cvttps2dq.

+0

alrrite 'cvtps2dq xmm3, xmm3' работал, (i thoud нет такой вещи (несколько потерянной в sem мнемонике), но там она есть) –

+1

Получите руководство по настройке AVX на странице Intel AVX - у нее есть все встроенные функции и инструкции SSE (а также AVX, конечно) в хорошем сводном формате в автономной утилите для Linux/Windows/Mac. –

 Смежные вопросы

  • Нет связанных вопросов^_^