如何确定给定ARM处理器上是否存在NEON引擎?是否可以为此目的查询任何状态/标志寄存器?
答案 0 :(得分:11)
我相信unixsmurf's answer与使用具有特权内核的操作系统一样好。对于通用功能检测,似乎ARM已经要求从操作系统获取此功能,因此您必须使用OS API来获取它。
#include <cpu-features.h>
和(android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM) && (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON)
。请注意,这适用于32位ARM。 ARM 64位有不同的标志,但想法是一样的。请参阅sources/docs。#include <sys/auxv.h>
使用#include <asm/hwcap.h>
,getauxval(AT_HWCAP) & HWCAP_NEON
使用__ARM_NEON__
。实际上你会看到很多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