petalinux NEON计算加速功能配置与使用

配置cfg文件:

project-spec/meta-user/recipes-kernel/linux/linux-xlnx/bsp.cfg

添加如下项:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_VFP=y
CONFIG_NEON=y

编译代码时选择编译选项

-mfloat-abi=hard -mfpu=neon-fp-armv8

举例memcpy函数:
arm下的memcpy实现:

void my_memcpy(volatile void char *dst, volatile unsigned void *src, int sz)
{
    if (sz & 63) {
        sz = (sz & -64) + 64;
    }
    asm volatile (
        "NEONCopyPLD:                          \n"
        "    VLDM %[src]!,{d0-d7}                 \n"
        "    VSTM %[dst]!,{d0-d7}                 \n"
        "    SUBS %[sz],%[sz],#0x40                 \n"
        "    BGT NEONCopyPLD                  \n"
        : [dst]"+r"(dst), [src]"+r"(src), [sz]"+r"(sz) : : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "cc", "memory");
}

arm64位下的优化:

void my_memcpy(volatile void *dst, volatile void *src, int sz)
{
    if (sz & 63) {
        sz = (sz & -64) + 64;
    }
    asm volatile (
        "NEONCopyPLD: \n"
		"sub %[dst], %[dst], #64 \n"
		"1: \n"
		"ldnp q0, q1, [%[src]] \n"
		"ldnp q2, q3, [%[src], #32] \n"
		"add %[dst], %[dst], #64 \n"
		"subs %[sz], %[sz], #64 \n"
		"add %[src], %[src], #64 \n"
		"stnp q0, q1, [%[dst]] \n"
		"stnp q2, q3, [%[dst], #32] \n"
		"b.gt 1b \n"
		: [dst]"+r"(dst), [src]"+r"(src), [sz]"+r"(sz) : : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "cc", "memory");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值