将 __m128i 中的每个 DW 右移不同的量 [英] Shift right every DW in a __m128i by a different amount

查看:46
本文介绍了将 __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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆