Я пытаюсь сделать некоторый оптимизированный код, используя инструкции SSE2. В настоящее время, у меня есть это написано в инлайн сборки, как это:Как использовать встроенные средства SSE в MS Visual Studio?
...
__m128 zero = {0};
__asm {
...
LINE_LOOP_1:
MOVQ xmm0, QWORD PTR [eax] ; no problem
PUNPCKLBW xmm0, zero ; PROBLEM IS HERE
...
LOOP LINE_LOOP_1
}
Это работает очень хорошо, но я хотел бы переписать его с помощью встроенных средств, поэтому было бы проще изменить (у меня есть несколько различных вариантов расчетов, который я бы хотел оптимизировать).
Однако я не могу понять, какие функции использовать. Любая документация, которую я нашел, содержит примерно половину инструкций SSE2, и похоже, что другая половина недоступна как внутренняя. Кажется маловероятным, что MS оставила свою реализацию SSE на полпути.
Итак, какую внутреннюю я могу использовать для генерации, например, инструкции PUNPCKLBW
?
Я использую MS Visual Studio 2005.
P.S. Некоторые MSDN documentation предлагает использовать _mm_unpacklo_pi8
, но он не работает:
#include "xmmintrin.h"
int main()
{
__m128 x = {0}, y = {0};
x = _mm_unpacklo_pi8(x, y);
}
Это дает ошибку компиляции:
error C2664: '_m_punpcklbw' : cannot convert parameter 1 from '_m128' to '_m64'