Я новичок в sse, и у меня есть проблемы с его поиском, , пожалуйста, скажите мне, что является хорошим способом конвертировать (усекать как в "(int) float_") четыре упакованных поплавки я в XMM3 зарегистрироваться на четыре Интс и хранить его в памяти (некоторые, как «MOVAPS oword [EDX + 32], XMM3» хранение ясно, но я не нахожу только, как конвертировать)Преобразование четырех поплавков в xmm3 до четырех ints в памяти
ответ
Используйте искробезопасность, если вы цените свое здравомыслие (и свободное время):
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
.
alrrite 'cvtps2dq xmm3, xmm3' работал, (i thoud нет такой вещи (несколько потерянной в sem мнемонике), но там она есть) –
Получите руководство по настройке AVX на странице Intel AVX - у нее есть все встроенные функции и инструкции SSE (а также AVX, конечно) в хорошем сводном формате в автономной утилите для Linux/Windows/Mac. –
Вы можете сэкономить себе много горя, используя внутреннюю защиту, а не пытаться сделать это в сыром asm. –