我想将__m128i寄存器的每个元素向右移动一个不同的数量。我知道如果我们想要向下移动,可以通过乘法来实现:
__m128i mul_constant = _mm_set_epi32(8, 4, 2, 1);
__m128i left_vshift = _mm_mullo_epi32(R, mul_constant);
但是,如果我们想要改变它,解决方案是什么?
答案 0 :(得分:0)
我终于做到了,如下所示: 将每个字节向左移一个不同的数量,然后向右移32位右移3个,就可以得到我想要的。
R = _mm_mullo_epi32(R, _mm_set_epi32(1, 2, 4, 8));
R = _mm_srli_epi32(R, 3);