Add processor dectection for x86.
Use cpuid to check the vendor string against known architectures. Change-Id: I3fbd7f73638d71857a0c4a44a6275eb295fb4cef
This commit is contained in:
Родитель
e50f5d4037
Коммит
0f5c63e4f6
1
libs.mk
1
libs.mk
|
@ -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);
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* 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;
|
||||
}
|
Загрузка…
Ссылка в новой задаче