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

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]);
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值