| <html><body><pre>Android NDK CPU Features detection library: |
| ------------------------------------------- |
| |
| This NDK provides a small library named "cpufeatures" that can be used at |
| runtime to detect the target device's CPU family and the optional features |
| it supports. |
| |
| Usage: |
| ------ |
| |
| The library is available as an import module. To use it, you must: |
| |
| To use it, you must: |
| |
| * List 'cpufeatures' in your list of static library dependencies, as in: |
| |
| LOCAL_STATIC_LIBRARIES := cpufeatures |
| |
| * At the end of your Android.mk, import the 'android/cpufeatures' module, |
| as in: |
| |
| $(call import-module,android/cpufeatures) |
| |
| * In your source code, include the header named <cpu-features.h> |
| |
| |
| Here is a simple example: |
| |
| <project-path>/jni/Android.mk: |
| LOCAL_PATH := $(call my-dir) |
| |
| include $(CLEAR_VARS) |
| LOCAL_MODULE := <your-module-name> |
| LOCAL_SRC_FILES := <your-source-files> |
| LOCAL_STATIC_LIBRARIES := cpufeatures |
| include $(BUILD_SHARED_LIBRARY) |
| |
| $(call import-module,android/cpufeatures) |
| |
| |
| Features: |
| --------- |
| |
| Two functions are provided for now: |
| |
| AndroidCpuFamily android_getCpuFamily(); |
| |
| Returns the target device's CPU Family as an enum. For now, the only |
| supported family is ANDROID_CPU_FAMILY_ARM. |
| |
| |
| uint64_t android_getCpuFeatures(); |
| |
| Returns the set of optional features supported by the device's CPU. |
| The result is a set of bit-flags, each corresponding to one CPU |
| Family-specific optional feature. |
| |
| Currently, only the following flags are defined, for the ARM CPU Family: |
| |
| ANDROID_CPU_ARM_FEATURE_ARMv7 |
| Indicates that the device's CPU supports the ARMv7-A instruction |
| set as supported by the "armeabi-v7a" abi (see CPU-ARCH-ABIS.html). |
| This corresponds to Thumb-2 and VFPv3-D16 instructions. |
| |
| ANDROID_CPU_ARM_FEATURE_VFPv3 |
| Indicates that the device's CPU supports the VFPv3 hardware FPU |
| instruction set extension. Due to the definition of 'armeabi-v7a', |
| this will always be the case if ANDROID_CPU_ARM_FEATURE_ARMv7 is |
| returned. |
| |
| Note that this corresponds to the minimum profile VFPv3-D16 that |
| _only_ provides 16 hardware FP registers. |
| |
| ANDROID_CPU_ARM_FEATURE_NEON |
| Indicates that the device's CPU supports the ARM Advanced SIMD |
| (a.k.a. NEON) vector instruction set extension. Note that ARM |
| mandates that such CPUs also implement VFPv3-D32, which provides |
| 32 hardware FP registers (shared with the NEON unit). |
| |
| |
| Important Note: |
| --------------- |
| |
| The cpufeatures library will be updated to support more CPU families and |
| optional features in the future. It is designed to work as-is on all |
| official Android platform versions. |
| |
| |
| Change History: |
| --------------- |
| |
| Please see the comments in $NDK/sources/android/cpufeatures/cpu-features.c |
| for the complete change history for this library. |
| </pre></body></html> |