diff --git a/frontend/drivers/platform_linux.c b/frontend/drivers/platform_linux.c index 20555ec000..321e793615 100644 --- a/frontend/drivers/platform_linux.c +++ b/frontend/drivers/platform_linux.c @@ -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) diff --git a/performance.c b/performance.c index 5a02a89d27..ce7e2103c2 100644 --- a/performance.c +++ b/performance.c @@ -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. */