Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arm 如何在neon中执行8路解交织_Arm_Neon_Intrinsics - Fatal编程技术网

Arm 如何在neon中执行8路解交织

Arm 如何在neon中执行8路解交织,arm,neon,intrinsics,Arm,Neon,Intrinsics,在霓虹灯内部集成电路中,有四个内部集成电路(vld1 vld2 vld3 vld4)执行1路到4路的解交织。但是如何实现8路的解交织呢 例如,数据为: uint8_t src[64] = {0,1,2,3,4,5,6,7,```63}; 将数据加载到neon寄存器中,在执行8路解交织后,我希望src_reg1和src_reg2的值可以如下所示: uint8x8x4_t src_reg1; uint8x8x4_t src_reg2; src_reg1.val[0] = {0,8, 16,24,3

在霓虹灯内部集成电路中,有四个内部集成电路(vld1 vld2 vld3 vld4)执行1路到4路的解交织。但是如何实现8路的解交织呢

例如,数据为:

uint8_t src[64] = {0,1,2,3,4,5,6,7,```63};
将数据加载到neon寄存器中,在执行8路解交织后,我希望src_reg1和src_reg2的值可以如下所示:

uint8x8x4_t src_reg1;
uint8x8x4_t src_reg2;
src_reg1.val[0] = {0,8, 16,24,32,40,48,56}
src_reg1.val[1] = {1,9, 17,25,```}
src_reg1.val[2] = {2,10,18,26,```}
src_reg1.val[3] = {3,11,19,27,```}
src_reg2.val[0] = {4,12,20,28,```}
src_reg2.val[1] = {5,13,21,29,```}
src_reg2.val[2] = {6,14,22,30,```}
src_reg2.val[3] = {7,15,23,31,39,47,55,63}

有人知道如何做到这一点吗?非常感谢

只需进行两次4元素加载即可获得两组4路解交错数据,然后通过其中一个寄存器交错操作进一步解交错这些数据集,例如:

uint8x8x4\u t src\u reg1=vld4\u u8(src);
uint8x8x4_t src_reg2=vld4_u8(src+32);
对于(int i=0;i<4;i++){
//由于固有的数据类型,这有点不太真实,但是
//编译at-O3会将其整理成合理的代码
uint8x8x2_t tmp=vuzp_u8(src_reg1.val[i],src_reg2.val[i]);
src_reg1.val[i]=tmp.val[0];
src_reg2.val[i]=tmp.val[1];
}

只需进行两次4元素加载即可获得两组4路解交错数据,然后通过其中一个寄存器交错操作进一步解交错这些数据集,例如:

uint8x8x4\u t src\u reg1=vld4\u u8(src);
uint8x8x4_t src_reg2=vld4_u8(src+32);
对于(int i=0;i<4;i++){
//由于固有的数据类型,这有点不太真实,但是
//编译at-O3会将其整理成合理的代码
uint8x8x2_t tmp=vuzp_u8(src_reg1.val[i],src_reg2.val[i]);
src_reg1.val[i]=tmp.val[0];
src_reg2.val[i]=tmp.val[1];
}