高性能计算-NEON-intrinsic函数(17)

1. 对寄存器数据重排

/*
两个向量,每两个通道一组,第一个向量每组的后一个元素与第二个向量每组的第一个元素一次彼此交换
*/
#include <stdio.h>
#include <arm_neon.h>


void main()
{
    int arrc[8]={0};
    int arrd[4]={0};
    int arre[4]={0};
    // 1 2 3 4
    // 5 6 7 8
    int32x4_t a = {1,2,3,4};
    int32x4_t b = {5,6,7,8};
    // 1 5 3 7
    // 2 6 4 8
    int32x4x2_t c = vtrnq_s32(a,b);
    // 1 5 3 7
    int32x4_t d = vtrn1q_s32(a,b);
    // 2 6 4 8
    int32x4_t e= vtrn2q_s32(a,b);

    vst1q_s32_x2(arrc,c);
    vst1q_s32(arrd,d);
    vst1q_s32(arre,e);
    for(int i=0;i<8;i++)
        printf("%d ",arrc[i]);
    printf("\n====\n");
    for(int i=0;i<4;i++)
        printf("%d ",arrd[i]);
    printf("\n====\n");
    for(int i=0;i<4;i++)
        printf("%d ",arre[i]);
    printf("\n====\n");

}
posted @ 2024-12-03 16:02  安洛8  阅读(63)  评论(0)    收藏  举报