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

问题描述 投票:0回答:1

我想将__m128i寄存器的每个元素向右移动一个不同的数量。如果我们想要向左移动,我知道这是可能的,如下所示:

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

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

sse simd
1个回答
0
投票

我终于如下所示:将每个字节向左移动不同的数量,然后向右移动32位右移给我想要的东西。

 R = _mm_mullo_epi32(R, _mm_set_epi32(1, 2, 4, 8));
 R = _mm_srli_epi32(R, 3);
© www.soinside.com 2019 - 2024. All rights reserved.