我想将__m128i寄存器的每个元素向右移动一个不同的数量。如果我们想要向左移动,我知道这是可能的,如下所示:
__m128i mul_constant = _mm_set_epi32(8, 4, 2, 1);
__m128i left_vshift = _mm_mullo_epi32(R, mul_constant);
但是,如果我们想要改变它,解决方案是什么?
我终于如下所示:将每个字节向左移动不同的数量,然后向右移动32位右移给我想要的东西。
R = _mm_mullo_epi32(R, _mm_set_epi32(1, 2, 4, 8));
R = _mm_srli_epi32(R, 3);