2012-04-04 2 views
0

Это прототип для функции:Использование __builtin_ia32_shufps для переноса вектора на 32 бита?

v4si __builtin_ia32_shufps (v4si, v4si, int) 

На некоторых сайтах я нашел, что они имели, но шестигранный в поле Int, и это выглядело понравилось отделенный высокие и низкие биты, но то, что я хочу, это логично 32 бит.

X3 X2 X1 X0 shifted by 32 bits to get X2 X1 X0 0 

Другой пример использования 2 v4si векторов:

X7 X6 X5 X4 | X3 X2 X1 X0, where each X is a 32 bit and what I want for a shift is the 
same a logical shift, but with each vector element. So: 
X7 X6 X5 X4 | X3 X2 X1 X0 << 2 = X5 X4 X3 X2 | X1 X0 0 0 

ли shufps право команды, чтобы сделать это?

+2

Я думаю, вы имеете в виду «биты» не «байт». – Mysticial

+0

Что такое v4sf? –

+0

Правильно я имел в виду биты, v4sf - это 128-битный вектор, разбитый на логические 4 32-разрядные векторы. Я думаю * – Jim

ответ

2

Глядя на ваш пример с двумя векторами, я думаю, что вы, вероятно, ищете _mm_alignr_epi8 (PALIGNR). Это работает для любого смещения пары векторов на произвольное число байтов, поэтому вам нужно будет умножить параметр сдвига на sizeof(int), например.

v = _mm_alignr_epi8(v0, v1, 2 * sizeof(int)); 

Обратите внимание, что эта команда доступна только в SSSE3 и позже, а это значит, почти любой процессор Intel начиная с ~ 2005

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