Skip to content
Snippets Groups Projects
Commit 0f5c63e4 authored by Fritz Koenig's avatar Fritz Koenig
Browse files

Add processor dectection for x86.

Use cpuid to check the vendor string against known
architectures.

Change-Id: I3fbd7f73638d71857a0c4a44a6275eb295fb4cef
parent e50f5d40
No related branches found
No related tags found
No related merge requests found
......@@ -91,6 +91,7 @@ ifeq ($(ARCH_X86)$(ARCH_X86_64),yes)
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/emms.asm
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86.h
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86_abi_support.asm
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86_cpuid.c
endif
CODEC_SRCS-$(ARCH_ARM) += $(BUILD_PFX)vpx_config.asm
CODEC_EXPORTS-$(BUILD_LIBVPX) += vpx/exports_com
......
......@@ -14,6 +14,26 @@
#include <stdlib.h>
#include "config.h"
typedef enum
{
VPX_CPU_UNKNOWN = -1,
VPX_CPU_AMD,
VPX_CPU_AMD_OLD,
VPX_CPU_CENTAUR,
VPX_CPU_CYRIX,
VPX_CPU_INTEL,
VPX_CPU_NEXGEN,
VPX_CPU_NSC,
VPX_CPU_RISE,
VPX_CPU_SIS,
VPX_CPU_TRANSMETA,
VPX_CPU_TRANSMETA_OLD,
VPX_CPU_UMC,
VPX_CPU_VIA,
VPX_CPU_LAST
} vpx_cpu_t;
#if defined(__GNUC__) && __GNUC__
#if ARCH_X86_64
#define cpuid(func,ax,bx,cx,dx)\
......@@ -100,6 +120,7 @@ x86_simd_caps(void)
return flags & mask;
}
vpx_cpu_t vpx_x86_vendor(void);
#if ARCH_X86_64 && defined(_MSC_VER)
unsigned __int64 __rdtsc(void);
......
/*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include <string.h>
#include "x86.h"
struct cpuid_vendors
{
char vendor_string[12];
vpx_cpu_t vendor_id;
};
static struct cpuid_vendors cpuid_vendor_list[VPX_CPU_LAST] =
{
{ "AuthenticAMD", VPX_CPU_AMD },
{ "AMDisbetter!", VPX_CPU_AMD_OLD },
{ "CentaurHauls", VPX_CPU_CENTAUR },
{ "CyrixInstead", VPX_CPU_CYRIX },
{ "GenuineIntel", VPX_CPU_INTEL },
{ "NexGenDriven", VPX_CPU_NEXGEN },
{ "Geode by NSC", VPX_CPU_NSC },
{ "RiseRiseRise", VPX_CPU_RISE },
{ "SiS SiS SiS ", VPX_CPU_SIS },
{ "GenuineTMx86", VPX_CPU_TRANSMETA },
{ "TransmetaCPU", VPX_CPU_TRANSMETA_OLD },
{ "UMC UMC UMC ", VPX_CPU_UMC },
{ "VIA VIA VIA ", VPX_CPU_VIA },
};
vpx_cpu_t vpx_x86_vendor(void)
{
unsigned int reg_eax;
unsigned int vs[3];
int i;
/* Get the Vendor String from the CPU */
cpuid(0, reg_eax, vs[0], vs[2], vs[1]);
for (i = 0; i < VPX_CPU_LAST; i++)
{
if (strncmp ((const char *)vs, cpuid_vendor_list[i].vendor_string, 12) == 0)
return (cpuid_vendor_list[i].vendor_id);
}
return VPX_CPU_UNKNOWN;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment