1538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* 2538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * 4538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * Use of this source code is governed by a BSD-style license 5538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * that can be found in the LICENSE file in the root of the source 6538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * tree. An additional intellectual property rights grant can be found 7538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * in the file PATENTS. All contributing project authors may 8538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * be found in the AUTHORS file in the root of the source tree. 9538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber */ 10538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 11538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#include <string.h> 12538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#include "x86.h" 13538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 14538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberstruct cpuid_vendors 15538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber{ 16538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber char vendor_string[12]; 17538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber vpx_cpu_t vendor_id; 18538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber}; 19538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 20538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberstatic struct cpuid_vendors cpuid_vendor_list[VPX_CPU_LAST] = 21538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber{ 22538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "AuthenticAMD", VPX_CPU_AMD }, 23538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "AMDisbetter!", VPX_CPU_AMD_OLD }, 24538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "CentaurHauls", VPX_CPU_CENTAUR }, 25538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "CyrixInstead", VPX_CPU_CYRIX }, 26538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "GenuineIntel", VPX_CPU_INTEL }, 27538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "NexGenDriven", VPX_CPU_NEXGEN }, 28538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "Geode by NSC", VPX_CPU_NSC }, 29538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "RiseRiseRise", VPX_CPU_RISE }, 30538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "SiS SiS SiS ", VPX_CPU_SIS }, 31538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "GenuineTMx86", VPX_CPU_TRANSMETA }, 32538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "TransmetaCPU", VPX_CPU_TRANSMETA_OLD }, 33538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "UMC UMC UMC ", VPX_CPU_UMC }, 34538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { "VIA VIA VIA ", VPX_CPU_VIA }, 35538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber}; 36538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 37538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubervpx_cpu_t vpx_x86_vendor(void) 38538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber{ 39538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int reg_eax; 40538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int vs[3]; 41538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int i; 42538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 43538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber /* Get the Vendor String from the CPU */ 44538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber cpuid(0, reg_eax, vs[0], vs[2], vs[1]); 45538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 46538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber for (i = 0; i < VPX_CPU_LAST; i++) 47538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber { 48538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (strncmp ((const char *)vs, cpuid_vendor_list[i].vendor_string, 12) == 0) 49538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber return (cpuid_vendor_list[i].vendor_id); 50538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 51538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 52538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber return VPX_CPU_UNKNOWN; 53538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} 54