diff options
-rw-r--r-- | src/cpu.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
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) |