gpt4 book ai didi

c++ - 在 SSE 整数寄存器之间洗牌

转载 作者:行者123 更新时间:2023-11-30 02:43:33 25 4
gpt4 key购买 nike

我有两个 sse 整数,我按如下方式分配它:

    __m128i m1 = _mm_set_epi32(4,3,2,1);
__m128i m2 = _mm_set_epi32(40,30,20,10);

现在,我必须在这两个寄存器之间进行一些混洗,并将结果存储在另外两个寄存器中,这样输出将如下所示:

     m3 = (30,3,10,1);
m4 = (40,4,20,2);

有什么办法可以做到这一点!!

谢谢

最佳答案

你可以这样做:

t1 = _mm_shuffle_epi32(m1, 0xd8);
t2 = _mm_shuffle_epi32(m2, 0xd8);
m4 = _mm_unpackhi_epi32(t1,t2);
m3 = _mm_unpacklo_epi32(t1,t2);

这是一个完整的例子

#include <x86intrin.h>
#include <stdio.h>

int main() {
__m128i m1 = _mm_set_epi32(4,3,2,1);
__m128i m2 = _mm_set_epi32(40,30,20,10);

__m128i m3, m4, t1, t2;
t1 = _mm_shuffle_epi32(m1, 0xd8);
t2 = _mm_shuffle_epi32(m2, 0xd8);
m4 = _mm_unpackhi_epi32(t1,t2);
m3 = _mm_unpacklo_epi32(t1,t2);

int out3[4], out4[4];
_mm_store_si128((__m128i*)out3, m3);
_mm_store_si128((__m128i*)out4, m4);
printf("%d %d %d %d\n", out3[3], out3[2], out3[1], out3[0]);
printf("%d %d %d %d\n", out4[3], out4[2], out4[1], out4[0]);
}

输出

30 3 10 1
40 4 20 2

关于c++ - 在 SSE 整数寄存器之间洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26047602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com