package vendor:android_cpu_features

⌘K
Ctrl+K
or
/

    Index

    Constants (0)

    This section is empty.

    Variables (0)

    This section is empty.

    Procedure Groups (0)

    This section is empty.

    Types

    Android_Cpu_ARM64_Feature ¶

    Android_Cpu_ARM64_Feature :: enum u64 {
    	FP    = 1, 
    	ASIMD = 2, 
    	AES   = 4, 
    	PMULL = 8, 
    	SHA1  = 16, 
    	SHA2  = 32, 
    	CRC32 = 64, 
    }
     

    The bit flags corresponding to the output of android_getCpuFeatures() * when android_getCpuFamily() returns ANDROID_CPU_FAMILY_ARM64. Value details * are: * * FP: * CPU has Floating-point unit. * * ASIMD: * CPU has Advanced SIMD unit. * * AES: * CPU supports AES instructions. * * CRC32: * CPU supports CRC32 instructions. * * SHA2: * CPU supports SHA2 instructions. * * SHA1: * CPU supports SHA1 instructions. * * PMULL: * CPU supports 64-bit PMULL and PMULL2 instructions.

    Android_Cpu_ARM_Feature ¶

    Android_Cpu_ARM_Feature :: enum u64 {
    	ARMv7       = 1, 
    	VFPv3       = 2, 
    	NEON        = 4, 
    	LDREX_STREX = 8, 
    	VFPv2       = 16, 
    	VFP_D32     = 32, 
    	VFP_FP16    = 64, 
    	VFP_FMA     = 128, 
    	NEON_FMA    = 256, 
    	IDIV_ARM    = 512, 
    	IDIV_THUMB2 = 1024, 
    	iWMMXt      = 2048, 
    	AES         = 4096, 
    	PMULL       = 8192, 
    	SHA1        = 16384, 
    	SHA2        = 32768, 
    	CRC32       = 65536, 
    }
     

    The list of feature flags for ANDROID_CPU_FAMILY_ARM that can be * recognized by the library (see note below for 64-bit ARM). Value details * are: * * VFPv2: * CPU supports the VFPv2 instruction set. Many, but not all, ARMv6 CPUs * support these instructions. VFPv2 is a subset of VFPv3 so this will * be set whenever VFPv3 is set too. * * ARMv7: * CPU supports the ARMv7-A basic instruction set. * This feature is mandated by the 'armeabi-v7a' ABI. * * VFPv3: * CPU supports the VFPv3-D16 instruction set, providing hardware FPU * support for single and double precision floating point registers. * Note that only 16 FPU registers are available by default, unless * the D32 bit is set too. This feature is also mandated by the * 'armeabi-v7a' ABI. * * VFP_D32: * CPU VFP optional extension that provides 32 FPU registers, * instead of 16. Note that ARM mandates this feature is the 'NEON' * feature is implemented by the CPU. * * NEON: * CPU FPU supports "ARM Advanced SIMD" instructions, also known as * NEON. Note that this mandates the VFP_D32 feature as well, per the * ARM Architecture specification. * * VFP_FP16: * Half-width floating precision VFP extension. If set, the CPU * supports instructions to perform floating-point operations on * 16-bit registers. This is part of the VFPv4 specification, but * not mandated by any Android ABI. * * VFP_FMA: * Fused multiply-accumulate VFP instructions extension. Also part of * the VFPv4 specification, but not mandated by any Android ABI. * * NEON_FMA: * Fused multiply-accumulate NEON instructions extension. Optional * extension from the VFPv4 specification, but not mandated by any * Android ABI. * * IDIV_ARM: * Integer division available in ARM mode. Only available * on recent CPUs (e.g. Cortex-A15). * * IDIV_THUMB2: * Integer division available in Thumb-2 mode. Only available * on recent CPUs (e.g. Cortex-A15). * * iWMMXt: * Optional extension that adds MMX registers and operations to an * ARM CPU. This is only available on a few XScale-based CPU designs * sold by Marvell. Pretty rare in practice. * * AES: * CPU supports AES instructions. These instructions are only * available for 32-bit applications running on ARMv8 CPU. * * CRC32: * CPU supports CRC32 instructions. These instructions are only * available for 32-bit applications running on ARMv8 CPU. * * SHA2: * CPU supports SHA2 instructions. These instructions are only * available for 32-bit applications running on ARMv8 CPU. * * SHA1: * CPU supports SHA1 instructions. These instructions are only * available for 32-bit applications running on ARMv8 CPU. * * PMULL: * CPU supports 64-bit PMULL and PMULL2 instructions. These * instructions are only available for 32-bit applications * running on ARMv8 CPU. * * If you want to tell the compiler to generate code that targets one of * the feature set above, you should probably use one of the following * flags (for more details, see technical note at the end of this file): * * -mfpu=vfp * -mfpu=vfpv2 * These are equivalent and tell GCC to use VFPv2 instructions for * floating-point operations. Use this if you want your code to run on some* ARMv6 devices, and any ARMv7-A device supported * by Android. * * Generated code requires VFPv2 feature. * * -mfpu=vfpv3-d16 * Tell GCC to use VFPv3 instructions (using only 16 FPU registers). * This should be generic code that runs on any CPU that supports the * 'armeabi-v7a' Android ABI. Note that no ARMv6 CPU supports this. * * Generated code requires VFPv3 feature. * * -mfpu=vfpv3 * Tell GCC to use VFPv3 instructions with 32 FPU registers. * Generated code requires VFPv3|VFP_D32 features. * * -mfpu=neon * Tell GCC to use VFPv3 instructions with 32 FPU registers, and * also support NEON intrinsics (see <arm_neon.h>). * Generated code requires VFPv3|VFP_D32|NEON features. * * -mfpu=vfpv4-d16 * Generated code requires VFPv3|VFP_FP16|VFP_FMA features. * * -mfpu=vfpv4 * Generated code requires VFPv3|VFP_FP16|VFP_FMA|VFP_D32 features. * * -mfpu=neon-vfpv4 * Generated code requires VFPv3|VFP_FP16|VFP_FMA|VFP_D32|NEON|NEON_FMA * features. * * -mcpu=cortex-a7 * -mcpu=cortex-a15 * Generated code requires VFPv3|VFP_FP16|VFP_FMA|VFP_D32| * NEON|NEON_FMA|IDIV_ARM|IDIV_THUMB2 * This flag implies -mfpu=neon-vfpv4. * * -mcpu=iwmmxt * Allows the use of iWMMXt instrinsics with GCC. * * IMPORTANT NOTE: These flags should only be tested when * android_getCpuFamily() returns ANDROID_CPU_FAMILY_ARM, i.e. this is a * 32-bit process. * * When running a 64-bit ARM process on an ARMv8 CPU, * android_getCpuFeatures() will return a different set of bitflags

    Android_Cpu_Family ¶

    Android_Cpu_Family :: enum i32 {
    	UNKNOWN = 0, 
    	ARM, 
    	X86, 
    	MIPS, 
    	ARM64, 
    	X86_64, 
    	MIPS64, 
    	RISCV64, 
    	MAX,         // do not remove
    }
     

    A list of valid values returned by android_getCpuFamily(). * They describe the CPU Architecture of the current process.

    Related Procedures With Returns

    Android_Cpu_MIPS_Feature ¶

    Android_Cpu_MIPS_Feature :: enum u64 {
    	R6  = 1, 
    	MSA = 2, 
    }
     

    The bit flags corresponding to the output of android_getCpuFeatures() * when android_getCpuFamily() returns ANDROID_CPU_FAMILY_MIPS * or ANDROID_CPU_FAMILY_MIPS64. Values are: * * R6: * CPU executes MIPS Release 6 instructions natively, and * supports obsoleted R1..R5 instructions only via kernel traps. * * MSA: * CPU supports Mips SIMD Architecture instructions.

    Android_Cpu_X86_Feature ¶

    Android_Cpu_X86_Feature :: enum u64 {
    	SSSE3  = 1, 
    	POPCNT = 2, 
    	MOVBE  = 4, 
    	SSE4_1 = 8, 
    	SSE4_2 = 16, 
    	AES_NI = 32, 
    	AVX    = 64, 
    	RDRAND = 128, 
    	AVX2   = 256, 
    	SHA_NI = 512, 
    }
     

    The bit flags corresponding to the output of android_getCpuFeatures() * when android_getCpuFamily() returns ANDROID_CPU_FAMILY_X86 or * ANDROID_CPU_FAMILY_X86_64.

    Constants

    This section is empty.

    Variables

    This section is empty.

    Procedures

    android_getCpuCount ¶

    android_getCpuCount :: proc "c" () -> i32 ---
     

    Return the number of CPU cores detected on this device.

    android_getCpuFamily ¶

    android_getCpuFamily :: proc "c" () -> Android_Cpu_Family ---
     

    Return the CPU family of the current process.

    *
    * Note that this matches the bitness of the current process. I.e. when
    * running a 32-bit binary on a 64-bit capable CPU, this will return the
    * 32-bit CPU family value.
    

    android_getCpuFeatures ¶

    android_getCpuFeatures :: proc "c" () -> u64 ---
     

    Return a bitmap describing a set of optional CPU features that are

    * supported by the current device's CPU. The exact bit-flags returned
    * depend on the value returned by android_getCpuFamily(). See the
    * documentation for the ANDROID_CPU_*_FEATURE_* flags below for details.
    

    android_setCpu ¶

    android_setCpu :: proc "c" (cpu_count: i32, cpu_features: u64) -> i32 ---
     

    The following is used to force the CPU count and features

    * mask in sandboxed processes. Under 4.1 and higher, these processes
    * cannot access /proc, which is the only way to get information from
    * the kernel about the current hardware (at least on ARM).
    *
    * It _must_ be called only once, and before any android_getCpuXXX
    * function, any other case will fail.
    *
    * This function return 1 on success, and 0 on failure.
    

    Procedure Groups

    This section is empty.

    Source Files

    Generation Information

    Generated with odin version dev-v0.0.1 (vendor "odin") Linux_amd64 @ 2026-01-30 10:23:17.489179271 +0000 UTC