2012-05-31 1 views
0

Я пытаюсь сделать некоторый оптимизированный код, используя инструкции 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'

ответ

2

Вы должны использовать _mm_unpacklo_epi8see here.

epi Postifix intrinsics предназначены для регистров SSE, pi предназначены для регистров MMX.

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

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