reuse x86_cpuid from performance.c

This commit is contained in:
twinaphex 2015-12-25 06:10:29 +01:00
parent 8da07f277b
commit 8ecae597e9
2 changed files with 15 additions and 31 deletions

View File

@ -49,6 +49,17 @@
#include "../../verbosity.h"
#include "platform_linux.h"
/* This small data type is used to represent a CPU list / mask, as read
* from sysfs on Linux. See http://www.kernel.org/doc/Documentation/cputopology.txt
*
* For now, we don't expect more than 32 cores on mobile devices, so keep
* everything simple.
*/
typedef struct
{
uint32_t mask;
} CpuList;
static bool cpu_inited_once;
static cpu_family g_cpuFamily;
static uint64_t g_cpuFeatures;
@ -63,24 +74,7 @@ static int g_cpuCount;
#endif
#ifdef __i386__
static void cpu_x86_cpuid(int func, int values[4])
{
int a, b, c, d;
/* We need to preserve ebx since we're compiling PIC code */
/* this means we can't use "=b" for the second output register */
__asm__ __volatile__ ( \
"push %%ebx\n"
"cpuid\n" \
"mov %1, %%ebx\n"
"pop %%ebx\n"
: "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
: "a" (func) \
);
values[0] = a;
values[1] = b;
values[2] = c;
values[3] = d;
}
void x86_cpuid(int func, int flags[4]);
#endif
#ifdef __ARM_ARCH__
@ -203,16 +197,6 @@ static const char *parse_decimal(const char* input, const char* limit, int* resu
return p;
}
/* This small data type is used to represent a CPU list / mask, as read
* from sysfs on Linux. See http://www.kernel.org/doc/Documentation/cputopology.txt
*
* For now, we don't expect more than 32 cores on mobile devices, so keep
* everything simple.
*/
typedef struct
{
uint32_t mask;
} CpuList;
/* Parse a textual list of cpus and store the result inside a CpuList object.
* Input format is the following:
@ -431,12 +415,12 @@ static void linux_cpu_init(void)
#define VENDOR_INTEL_c 0x6c65746e
#define VENDOR_INTEL_d 0x49656e69
cpu_x86_cpuid(0, regs);
x86_cpuid(0, regs);
int vendorIsIntel = (regs[1] == VENDOR_INTEL_b &&
regs[2] == VENDOR_INTEL_c &&
regs[3] == VENDOR_INTEL_d);
cpu_x86_cpuid(1, regs);
x86_cpuid(1, regs);
if ((regs[2] & (1 << 9)) != 0)
g_cpuFeatures |= CPU_X86_FEATURE_SSSE3;
if ((regs[2] & (1 << 23)) != 0)

View File

@ -305,7 +305,7 @@ retro_time_t retro_get_time_usec(void)
#endif
#ifdef CPU_X86
static void x86_cpuid(int func, int flags[4])
void x86_cpuid(int func, int flags[4])
{
/* On Android, we compile RetroArch with PIC, and we
* are not allowed to clobber the ebx register. */