From 9947bdb0c424c7d77dfbaac87390f34a3ac31b0f Mon Sep 17 00:00:00 2001 From: rubidium Date: Fri, 3 Jan 2014 15:09:55 +0000 Subject: (svn r26220) -Fix?: another attempt at getting cpuid to finally work "everywhere" --- src/cpu.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/cpu.cpp b/src/cpu.cpp index e6a8656c2..7776821ce 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -96,14 +96,22 @@ void ottd_cpuid(int info[4], int type) #elif defined(__x86_64__) || defined(__i386) void ottd_cpuid(int info[4], int type) { +#if defined(__i386) && defined(__PIC__) /* The easy variant would be just cpuid, however... ebx gets clobbered by PIC. */ __asm__ __volatile__ ( "xchgl %%ebx, %1 \n\t" "cpuid \n\t" "xchgl %%ebx, %1 \n\t" : "=a" (info[0]), "=r" (info[1]), "=c" (info[2]), "=d" (info[3]) - : "0" (type) + : "a" (type) ); +#else + __asm__ __volatile__ ( + "cpuid \n\t" + : "=a" (info[0]), "=b" (info[1]), "=c" (info[2]), "=d" (info[3]) + : "a" (type) + ); +#endif /* i386 PIC */ } #else void ottd_cpuid(int info[4], int type) -- cgit v1.2.3-70-g09d2