如何确定给定ARM处理器上是否存在NEON引擎?是否可以为此目的查询任何状态/标志寄存器?
如何确定给定ARM处理器上是否存在NEON引擎?是否可以为此目的查询任何状态/标志寄存器?
我相信 unixsmurf的回答 如果使用具有特权内核的操作系统,那么就像你将获得的一样好。对于通用功能检测,似乎ARM已经要求从操作系统获取此功能,因此您必须使用OS API来获取它。
#include <cpu-features.h>
同 (android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM) && (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON)
。请注意,这适用于32位ARM。 ARM 64位有不同的标志,但想法是一样的。见 来源/文档。#include <sys/auxv.h>
和 #include <asm/hwcap.h>
同 getauxval(AT_HWCAP) & HWCAP_NEON
。__ARM_NEON__
确保在编译时一切正常。实际上你会看到很多Android实现只是解析/ proc / cpuinfo以实现android_getCpuFeatures()....嘿。但它似乎仍在改进,最新版本使用getauxval方法。