NEON和VFP指令集是ARM指令集的扩展,多用于多媒体编程与浮点计算。从Android原生程序开发包(Android NDK)r3开始,加入了对NEON与VFP指令的支持,如果想使用NEON指令集,需要在Android.mk中加入一行“LOCAL_ARM_NEON:=true",NEON是ARMv7才支持的指令集,因此,还需要配置TARGET_ARCH_ABI的值为armeabi-v7a。尽管如此还是不够,NEON和VFP指令集作为处理器的附加指令,在很多手机设备的处理器中可能是不支持的,为了解决这个问题,Android
NDK提供了一个”cpufeatures“库来让开发者在运行是检测处理器的能力,使用”cpufeatures"库的方法首先是在Android.mk中添加”$(call import-module, android/cpufeatures)"然后再C/C++代码包含头文件“cpu-features.h",该头文件中定义了一些结构体和枚举变量,并包含android_getCpuFamily(),android_getCpuFeatures(),android_getCpuCount()三个函数。
android_getCpuFamily()函数用来获取处理器的家族信息,对应ARM架构处理器它始终返回一个常量值:ANDROID_CPU_FAMILY_ARM。
android_getCpuFeatures()函数用来检测处理器支持的指令集,如果处理器支持NEON指令集,则返回的64位数值中ANDROID_CPU_ARM_FEATURE_NEON标志位被置位,如果处理器支持VFPv3指令集,则ANDROID_CPU_ARM_VFPv3被置位。
android_getCpuCount()用来获取处理器的核心数。