Сдвиг вправо каждый DW в __m128i на другую величину - PullRequest
0 голосов
/ 01 мая 2018

Я хочу сдвинуть вправо каждый элемент регистра __m128i на другую величину. Я знаю, что это возможно путем умножения, если мы хотим сдвинуть влево, как показано ниже:

__m128i mul_constant = _mm_set_epi32(8, 4, 2, 1);
__m128i left_vshift = _mm_mullo_epi32(R, mul_constant);

Но каково решение, если мы хотим сдвинуть его правильно?

1 Ответ

0 голосов
/ 07 сентября 2018

Я наконец сделал это, как показано ниже: Сдвиг каждого байта на разную величину влево, а затем 32-битный сдвиг вправо на 3 дали мне то, что я хотел.

 R = _mm_mullo_epi32(R, _mm_set_epi32(1, 2, 4, 8));
 R = _mm_srli_epi32(R, 3);
...