1a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/*
2a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *
4a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  Use of this source code is governed by a BSD-style license
5a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  that can be found in the LICENSE file in the root of the source
6a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  tree. An additional intellectual property rights grant can be found
7a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  in the file PATENTS.  All contributing project authors may
8a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin *  be found in the AUTHORS file in the root of the source tree.
9a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */
10a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
11a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin// You can download Android source at
12a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin// http://source.android.com/source/downloading.html
13a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin// Original files are in ndk/sources/android/cpufeatures
14a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin// Revision is Change-Id: I9a0629efba36a6023f05e5f092e7addcc1b7d2a9
15a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
16a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#ifndef CPU_FEATURES_H
17a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#define CPU_FEATURES_H
18a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
19a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include <sys/cdefs.h>
20a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include <stdint.h>
21a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
22a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin__BEGIN_DECLS
23a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
24a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkintypedef enum {
25a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin    ANDROID_CPU_FAMILY_UNKNOWN = 0,
26a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin    ANDROID_CPU_FAMILY_ARM,
27a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin    ANDROID_CPU_FAMILY_X86,
28a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
29a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin    ANDROID_CPU_FAMILY_MAX  /* do not remove */
30a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
31a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} AndroidCpuFamily;
32a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
33a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* Return family of the device's CPU */
34a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinextern AndroidCpuFamily   android_getCpuFamily(void);
35a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
36a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinenum {
37a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin    ANDROID_CPU_ARM_FEATURE_ARMv7       = (1 << 0),
38a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin    ANDROID_CPU_ARM_FEATURE_VFPv3       = (1 << 1),
39a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin    ANDROID_CPU_ARM_FEATURE_NEON        = (1 << 2),
40a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin    ANDROID_CPU_ARM_FEATURE_LDREX_STREX = (1 << 3),
41a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin};
42a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
43a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinenum {
44a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin    ANDROID_CPU_X86_FEATURE_SSSE3  = (1 << 0),
45a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin    ANDROID_CPU_X86_FEATURE_POPCNT = (1 << 1),
46a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin    ANDROID_CPU_X86_FEATURE_MOVBE  = (1 << 2),
47a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin};
48a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
49a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinextern uint64_t    android_getCpuFeatures(void);
50a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
51a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* Return the number of CPU cores detected on this device. */
52a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinextern int         android_getCpuCount(void);
53a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
54a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin__END_DECLS
55a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin
56a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#endif /* CPU_FEATURES_H */
57