2013-11-08 1 views
1

Предварительное примечание: Фактически, когда я заканчивал писать вопрос, который я видел, this answer обращался к моему делу. Тем не менее, поскольку я уже потратил время на создание всех ссылок на необходимую документацию, может быть полезно опубликовать его в любом случае. Кроме того, там могут быть лучшие ответы.Как сохранить 4 байта из моего 16-байтового регистра после использования встроенных средств, используя до SSSE3

Вот вопрос:

В конце моей обработки у меня будет __mm128i содержащий:

r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 rA rB rC rD rE rF 

я должен хранить в памяти uint32_t так:

r0 r4 r8 rC 

Или, альтернативно (это зависит от того, как я выполняю последние 2 шага предыдущего вычисления с)

r3 r7 rB rF 

Как я могу сделать это эффективно, используя инструкции SSSE3?

ответ

3

Как пояснил here, используя до инструкций SSSE3, вы можете использовать _mm_shuffle_epi8 иметь свой регистр переставить так:

r0 r4 r8 rC 00 00 00 00 00 00 00 00 00 00 00 00 

Затем, вы не можете использовать _mm_extract_epi32, потому что это SSE4.1

Вы можете вместо этого используйте _mm_cvtsi128_si32.