【问题标题】:Shift right every DW in a __m128i by a different amount将 __m128i 中的每个 DW 右移不同的量
【发布时间】:2018-04-30 21:21:56
【问题描述】:

我想将 __m128i 寄存器的每个元素右移不同的量。我知道如果我们想像下面这样左移,可以通过乘法来实现:

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

但是,如果我们想右移,有什么办法呢?

【问题讨论】:

标签: sse simd


【解决方案1】:

我终于做到了,如下所示: 将每个字节左移不同的量,然后 32 位右移 3 给了我想要的结果。

 R = _mm_mullo_epi32(R, _mm_set_epi32(1, 2, 4, 8));
 R = _mm_srli_epi32(R, 3);

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多