如何检查手臂上是否存在NEON?

时间:2014-11-02 15:58:41

标签: arm neon

如何确定给定ARM处理器上是否存在NEON引擎?是否可以为此目的查询任何状态/标志寄存器?

3 个答案:

答案 0 :(得分:11)

我相信unixsmurf's answer与使用具有特权内核的操作系统一样好。对于通用功能检测,似乎ARM已经要求从操作系统获取此功能,因此您必须使用OS API来获取它。

  • 在Android NDK上使用#include <cpu-features.h>(android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM) && (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON)。请注意,这适用于32位ARM。 ARM 64位有不同的标志,但想法是一样的。请参阅sources/docs
  • 在Linux上,如果可用,请#include <sys/auxv.h>使用#include <asm/hwcap.h>getauxval(AT_HWCAP) & HWCAP_NEON使用__ARM_NEON__
  • 在iOS上,我不确定是否有动态调用,方法似乎是您构建针对NEON的应用,然后确保您的应用被标记为需要NEON,因此它只会安装在支持它的设备上。当然,您应该使用预定义的预处理程序标志{{1}}来确保在编译时一切正常。
  • 无论微软做什么,或者你使用其他RTOS ......我都不知道......

实际上你会看到很多Android实现只是解析/ proc / cpuinfo以实现android_getCpuFeatures()....嘿。但它似乎仍在改进,最新版本使用getauxval方法。

答案 1 :(得分:1)

一种可靠的方法是检查体系结构特征陷阱寄存器。例如,在ARM Cortex A35上,您可以检查HCPTR寄存器的值以查看是否实现了NEON(0x000033FF),或者没有实现(0x0000BFFF)。寄存器名称和指示值取决于平台,请确保检查技术参考手册。

答案 2 :(得分:0)

是否仍然可以检查Neon和sve是否受支持? 我见过有人在谈论有关HCPTR寄存器的内容,但它似乎与霓虹灯没有任何关系,而且根据文档显示它似乎是Aarch32指令 https://developer.arm.com/docs/ddi0595/g/aarch32-system-registers/hcptr