将__m128i中的每个DW向右移动不同的量

时间:2018-04-30 21:21:57

标签: sse simd

我想将__m128i寄存器的每个元素向右移动一个不同的数量。我知道如果我们想要向下移动,可以通过乘法来实现:

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

但是,如果我们想要改变它,解决方案是什么?

1 个答案:

答案 0 :(得分:0)

我终于做到了,如下所示: 将每个字节向左移一个不同的数量,然后向右移32位右移3个,就可以得到我想要的。

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