将 __m128i 中的每个 DW 右移不同的量 [英] Shift right every DW in a __m128i by a different amount
本文介绍了将 __m128i 中的每个 DW 右移不同的量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想将 __m128i 寄存器的每个元素右移不同的量.我知道如果我们想像下面这样左移,我知道这是可能的:
I want to shift right every element of a __m128i register by a different amount.I know this is possible by multiplication if we want to shift left like below:
__m128i mul_constant = _mm_set_epi32(8, 4, 2, 1);
__m128i left_vshift = _mm_mullo_epi32(R, mul_constant);
但是,如果我们想把它右移,有什么解决办法?
But, what is the solution if we want to shift it right?
推荐答案
我终于做到了如下:将每个字节向左移动不同的量,然后将 32 位右移 3 位得到了我想要的结果.
I finally did it like below: Shifting every byte by a different amount to left and then a 32-bit right shift by 3 gave me what I wanted.
R = _mm_mullo_epi32(R, _mm_set_epi32(1, 2, 4, 8));
R = _mm_srli_epi32(R, 3);
这篇关于将 __m128i 中的每个 DW 右移不同的量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文