173aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner/* 273aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * Copyright (C) 2010 The Android Open Source Project 373aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * 473aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * Licensed under the Apache License, Version 2.0 (the "License"); 573aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * you may not use this file except in compliance with the License. 673aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * You may obtain a copy of the License at 773aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * 873aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * http://www.apache.org/licenses/LICENSE-2.0 973aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * 1073aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * Unless required by applicable law or agreed to in writing, software 1173aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * distributed under the License is distributed on an "AS IS" BASIS, 1273aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1373aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * See the License for the specific language governing permissions and 1473aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner * limitations under the License. 1573aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner */ 1673aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner#include <cpu-features.h> 1773aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner#include <stdio.h> 1873aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner 1973aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turnerint main(void) 2073aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner{ 2173aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner AndroidCpuFamily family = android_getCpuFamily(); 2273aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner switch (family) { 2373aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner case ANDROID_CPU_FAMILY_ARM: 2473aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner printf("CPU family is ARM\n"); 2573aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner break; 2673aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner case ANDROID_CPU_FAMILY_X86: 2773aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner printf("CPU family is x86\n"); 2873aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner break; 29097812d190ebd3539c82c9c2b24161ae5e75cbb8Chao-Ying Fu case ANDROID_CPU_FAMILY_MIPS: 30097812d190ebd3539c82c9c2b24161ae5e75cbb8Chao-Ying Fu printf("CPU family is MIPS\n"); 31097812d190ebd3539c82c9c2b24161ae5e75cbb8Chao-Ying Fu break; 3273aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner default: 3373aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner fprintf(stderr, "Unsupported CPU family: %d\n", family); 3473aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner return 1; 3573aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner } 3673aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner 3773aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner if (family == ANDROID_CPU_FAMILY_ARM) { 3873aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner uint64_t features = android_getCpuFeatures(); 3973aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner printf( "Supported ARM features:\n"); 4073aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner if ((features & ANDROID_CPU_ARM_FEATURE_ARMv7) != 0) { 4173aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner printf( " ARMv7\n" ); 4273aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner } 4373aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner if ((features & ANDROID_CPU_ARM_FEATURE_VFPv3) != 0) { 4473aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner printf( " VFPv3\n" ); 4573aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner } 4673aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner if ((features & ANDROID_CPU_ARM_FEATURE_NEON) != 0) { 4773aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner printf( " NEON\n" ); 4873aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner } 49914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner if ((features & ANDROID_CPU_ARM_FEATURE_LDREX_STREX) != 0) { 50914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner printf( " ldrex/strex\n" ); 51914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner } 52914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner } 53914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner 54914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner if (family == ANDROID_CPU_FAMILY_X86) { 55914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner uint64_t features = android_getCpuFeatures(); 56914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner printf( "Supported x86 features:\n"); 57914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner if ((features & ANDROID_CPU_X86_FEATURE_SSSE3) != 0) { 58914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner printf( " SSSE3\n"); 59914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner } 60914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner if ((features & ANDROID_CPU_X86_FEATURE_POPCNT) != 0) { 61914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner printf( " POPCNT\n"); 62914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner } 63914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner if ((features & ANDROID_CPU_X86_FEATURE_MOVBE) != 0) { 64914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner printf( " MOVBE\n"); 65914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner } 6673aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner } 67914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner 68914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner int count = android_getCpuCount(); 69914c9a4d759d07188c789a27cfe9c7306d7c731aDavid 'Digit' Turner printf( "Number of CPU cores: %d\n", count); 7073aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner return 0; 7173aed82e574b59039cd85be912ffe20b2c75bca0David 'Digit' Turner} 72