2015-12-08 4 views
-1

У меня есть два регистра __m128i, назовем их srcA и srcB. Из того, что я хочу, чтобы получить реестр __m128i, скажем, ДСТ, который содержит следующие слова (псевдо-код при условии Srca, srcB, и В являются текстовыми указатели):Intel Intrinsics: объединить каждое другое слово из 2 регистров

dst[0] = srcA[0]; 
dst[1] = srcA[1]; 
dst[2] = srcA[2]; 
dst[3] = srcA[3]; 
dst[4] = srcB[0]; 
dst[5] = srcB[1]; 
dst[6] = srcB[2]; 
dst[7] = srcB[3]; 

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

+0

Итак, это то, что вы хотите получить. Хорошо. В чем вопрос? Кроме того: '__m128i' является ключевым словом Microsoft C, но в вопросе нет тега' C'. Однако в вопросе есть тег 'assembly'. Итак, вы ищете решение в C или решение, связанное с сборкой с XMM [0-7]? –

+0

Отредактировался вопрос ... Я ищу решение, используя сборку. – Warpin

+0

В вашем вопросе все еще упоминаются «intrinsics» и «__m128i», которые являются концепциями C/C++, а не сборными. Также вы должны указать, какую архитектуру Intel. Предположительно, вы имеете в виду x86, но компилятор Intel Itanium (IA-64) также поддерживает встроенные функции __m128. –

ответ

1

Вы также забыли указать, какой уровень SSE вы нацеливаете. Таким образом, я буду использовать самый удобный, SSE4.1 :)

dst = _mm_blend_epi16(srcA, _mm_slli_si128 (srcB, 8), 0xf0);