11e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora/*
21e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
31e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora *
41e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora *  Use of this source code is governed by a BSD-style license
51e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora *  that can be found in the LICENSE file in the root of the source
61e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora *  tree. An additional intellectual property rights grant can be found
71e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora *  in the file PATENTS.  All contributing project authors may
81e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora *  be found in the AUTHORS file in the root of the source tree.
91e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora */
101e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
111e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora// You can download Android source at
121e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora// http://source.android.com/source/downloading.html
131e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora// Original files are in ndk/sources/android/cpufeatures
141e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora// Revision is Change-Id: I9a0629efba36a6023f05e5f092e7addcc1b7d2a9
151e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
161e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora#ifndef CPU_FEATURES_H
171e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora#define CPU_FEATURES_H
181e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
191e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora#include <sys/cdefs.h>
201e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora#include <stdint.h>
211e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
221e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora__BEGIN_DECLS
231e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
241e7bf8805bd030c19924a5306837ecd72c295751Vikas Aroratypedef enum {
251e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora    ANDROID_CPU_FAMILY_UNKNOWN = 0,
261e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora    ANDROID_CPU_FAMILY_ARM,
271e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora    ANDROID_CPU_FAMILY_X86,
281e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
291e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora    ANDROID_CPU_FAMILY_MAX  /* do not remove */
301e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
311e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora} AndroidCpuFamily;
321e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
331e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora/* Return family of the device's CPU */
341e7bf8805bd030c19924a5306837ecd72c295751Vikas Aroraextern AndroidCpuFamily   android_getCpuFamily(void);
351e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
361e7bf8805bd030c19924a5306837ecd72c295751Vikas Aroraenum {
371e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora    ANDROID_CPU_ARM_FEATURE_ARMv7       = (1 << 0),
381e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora    ANDROID_CPU_ARM_FEATURE_VFPv3       = (1 << 1),
391e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora    ANDROID_CPU_ARM_FEATURE_NEON        = (1 << 2),
401e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora    ANDROID_CPU_ARM_FEATURE_LDREX_STREX = (1 << 3),
411e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora};
421e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
431e7bf8805bd030c19924a5306837ecd72c295751Vikas Aroraenum {
441e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora    ANDROID_CPU_X86_FEATURE_SSSE3  = (1 << 0),
451e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora    ANDROID_CPU_X86_FEATURE_POPCNT = (1 << 1),
461e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora    ANDROID_CPU_X86_FEATURE_MOVBE  = (1 << 2),
471e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora};
481e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
491e7bf8805bd030c19924a5306837ecd72c295751Vikas Aroraextern uint64_t    android_getCpuFeatures(void);
501e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
511e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora/* Return the number of CPU cores detected on this device. */
521e7bf8805bd030c19924a5306837ecd72c295751Vikas Aroraextern int         android_getCpuCount(void);
531e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
541e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora__END_DECLS
551e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora
561e7bf8805bd030c19924a5306837ecd72c295751Vikas Arora#endif /* CPU_FEATURES_H */
57