SSE整数寄存器之间的混洗

索米娅·拉曼|

我有两个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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在SSE寄存器中混洗偶数和奇数值

来自分类Dev

数据何时在SSE寄存器和堆栈之间移动?

来自分类Dev

SSE 64位寄存器

来自分类Dev

缓存和寄存器之间的区别?

来自分类Dev

SSE内部函数可复制寄存器中的字节

来自分类Dev

在SSE寄存器(GCC,C ++)中存储常量

来自分类Dev

使用数组符号访问SSE向量寄存器

来自分类Dev

状态寄存器和控制寄存器之间有什么关系?

来自分类Dev

C内联ASM:将整数传递到寄存器

来自分类Dev

统计寄存器

来自分类Dev

物理寄存器和Intel SIMD变量之间的关系?

来自分类Dev

NASM:通过寄存器在内存之间移动

来自分类Dev

有效地在寄存器之间转移

来自分类Dev

在MIPS中加0和移动寄存器之间的区别

来自分类Dev

使用 SSE 的任意位置 2 输入混洗

来自分类Dev

静态/静态本地SSE / AVX变量阻塞了xmm / ymm寄存器?

来自分类Dev

如何串联两个SSE寄存器的下半部分?

来自分类Dev

利用64位寄存器的最酷的多操作技巧?(无SIMD / SSE / AVX)

来自分类Dev

_control87()是否还会设置SSE MXCSR控制寄存器?

来自分类Dev

如何将两个SSE寄存器加在一起

来自分类Dev

SSE __m128i寄存器中的置换字节

来自分类Dev

检查两个SSE寄存器是否都不为零而不破坏它们

来自分类Dev

如何使用SSE将__m128i寄存器乘以浮点因子?

来自分类Dev

将SSE / AVX寄存器左移和右移32位,同时移零

来自分类Dev

如何在“无符号字符”数组上存储_m128 SSE寄存器数据?

来自分类Dev

将2个连续的double加载到2个sse寄存器的下半部分

来自分类Dev

如何串联两个SSE寄存器的下半部分?

来自分类Dev

是否可以将_m128 SSE寄存器中存储的浮点数直接移到普通寄存器?

来自分类Dev

汇编:段寄存器和偏移寄存器

Related 相关文章

  1. 1

    在SSE寄存器中混洗偶数和奇数值

  2. 2

    数据何时在SSE寄存器和堆栈之间移动?

  3. 3

    SSE 64位寄存器

  4. 4

    缓存和寄存器之间的区别?

  5. 5

    SSE内部函数可复制寄存器中的字节

  6. 6

    在SSE寄存器(GCC,C ++)中存储常量

  7. 7

    使用数组符号访问SSE向量寄存器

  8. 8

    状态寄存器和控制寄存器之间有什么关系?

  9. 9

    C内联ASM:将整数传递到寄存器

  10. 10

    统计寄存器

  11. 11

    物理寄存器和Intel SIMD变量之间的关系?

  12. 12

    NASM:通过寄存器在内存之间移动

  13. 13

    有效地在寄存器之间转移

  14. 14

    在MIPS中加0和移动寄存器之间的区别

  15. 15

    使用 SSE 的任意位置 2 输入混洗

  16. 16

    静态/静态本地SSE / AVX变量阻塞了xmm / ymm寄存器?

  17. 17

    如何串联两个SSE寄存器的下半部分?

  18. 18

    利用64位寄存器的最酷的多操作技巧?(无SIMD / SSE / AVX)

  19. 19

    _control87()是否还会设置SSE MXCSR控制寄存器?

  20. 20

    如何将两个SSE寄存器加在一起

  21. 21

    SSE __m128i寄存器中的置换字节

  22. 22

    检查两个SSE寄存器是否都不为零而不破坏它们

  23. 23

    如何使用SSE将__m128i寄存器乘以浮点因子?

  24. 24

    将SSE / AVX寄存器左移和右移32位,同时移零

  25. 25

    如何在“无符号字符”数组上存储_m128 SSE寄存器数据?

  26. 26

    将2个连续的double加载到2个sse寄存器的下半部分

  27. 27

    如何串联两个SSE寄存器的下半部分?

  28. 28

    是否可以将_m128 SSE寄存器中存储的浮点数直接移到普通寄存器?

  29. 29

    汇编:段寄存器和偏移寄存器

热门标签

归档