大家好,我现在尝试着在DM81X系列的Cortex-A8上使用Neon或VFP加速器,在编译使用Neon时遇到了点问题。 按照文档说明,要想使用Neon指令有三种方式:
1、修改编译器选项直接生成Neon指令(这样效率可能不会太高);
2、使用Neon intrinsics 内嵌的指令,与DSP的类似;
3、直接使用Neon汇编指令;
我目前选择测试的平台有RDK和CCS5。
1、首先我想在RDK下直接使用Neon intrinsics,#include "arm_neon.h",按照e2e.ti.com 上的类似帖子修改ARM的编译配置文件common_header_a8.Makefile 增加编译选项: CC_OPTS+= -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp,使能neon指令编译, 编译后出现错误如下:
不增加编译选项错误是:#error You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) to use arm_neon.h, 这个是正常的错误。
2、CCS5下没有arm_neon.h头文件,是不是在CCS5下软仿时不能使用Neon内嵌的指令;
3、在CCS5下建立Cortex-A8的软仿项目工程,设置项目编译属性,分别使能VFP与nepn
在测试例子中以同样的格式分别用Thumb汇编指令和Neon汇编指令写了一个简单的函数,这样Neon指令 编译的确没问题,但发现Thumb的指令可以正确调用,而Neon指令还没进入函数(单步调试没入)就挂掉了。 在文档<<ARM Assembly language tools>>与<<ARM optimizing C C++ compiler>>我都没找到关于任 何在CCS编写Neon指令的例子,我不确定我那样调用的方式是否正确。
4、由于设备在上电启动时Neon加速器的相关寄存器是禁止的,是不是除了修改编译选项编译出Neon指令 的代码外,还必须 在设备初始化时对Neon(VFP)进行初始化,,如下:
MRC p15, #0, r3, c1, c0, #2 ; Read CPACR
ORR r3, r3, #0x00F00000 ; Enable access to CP10 and CP11
MCR p15, #0, r3, c1, c0, #2 ; Write CPACR
MOV r0, #0x40000000
VMSR FPEXC, r0
有没哪位仁兄在DM81X系列上做过这方面的工作,给点建议。非常感谢!
Jason miller:
回复 Louis:
哦,Louis是你啊~非常感谢!