您的位置:首页 > 其它

使用neon内部函数实现8-way de-interleave

2016-07-19 19:59 1626 查看
neon内部函数只提供实现4-way de-interleave的指令,要实现8-way de-interleave可通过两个4-way de-interleave来实现。

uint8_t src[64] = {0};
uint8_t dst[64] = {0};

for (int i = 0; i < 64; i++)
{
src[i] = i;
}

//读取2组4-way数据
uint8x8x4_t src_reg1 = vld4_u8(src);
uint8x8x4_t src_reg2 = vld4_u8(src + 32);
for (int j = 0; j < 4; j++) //将2组4-way数据经反交叉后生成1组8-way数据
{
uint8x8x2_t temp = vuzp_u8(src_reg1.val[j], src_reg2.val[j]);
src_reg1.val[j] = temp.val[0];
src_reg2.val[j] = temp.val[1];
}

for (int j = 0; j < 4; j++) //将1组8-way数据经交叉后生成2组4-way数据
{
uint8x8x2_t temp = vzip_u8(src_reg1.val[j], src_reg2.val[j]);
src_reg1.val[j] = temp.val[0];
src_reg2.val[j] = temp.val[1];
}

//将2组4-way数据存放如内存
vst4_u8(dst, src_reg1);
vst4_u8(dst+32, src_reg2);

//经过这样处理后,可发现dst的值与src的值是一样
for (int i = 0; i < 64; i++)
{
printf("dst[%d] = %d   ", i, dst[i]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: