From a202aef37b1b9f8c0dc67077d7a7b9434cd1af59 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 16 Dec 2009 16:42:04 +0000 Subject: [PATCH] Fixed cpuid assembly to work on PIC code --- src/cpuinfo/SDL_cpuinfo.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/cpuinfo/SDL_cpuinfo.c b/src/cpuinfo/SDL_cpuinfo.c index f4b5f0265..05e80ddca 100644 --- a/src/cpuinfo/SDL_cpuinfo.c +++ b/src/cpuinfo/SDL_cpuinfo.c @@ -122,16 +122,16 @@ CPUid by definition. But it's nice to be able to prove it. :) */ #elif defined(__sun) && defined(__i386) __asm ( " pushfl \n" -" popl %eax \n" -" movl %eax,%ecx \n" -" xorl $0x200000,%eax \n" -" pushl %eax \n" -" popfl \n" -" pushfl \n" -" popl %eax \n" -" xorl %ecx,%eax \n" -" jz 1f \n" -" movl $1,-8(%ebp) \n" +" popl %eax \n" +" movl %eax,%ecx \n" +" xorl $0x200000,%eax \n" +" pushl %eax \n" +" popfl \n" +" pushfl \n" +" popl %eax \n" +" xorl %ecx,%eax \n" +" jz 1f \n" +" movl $1,-8(%ebp) \n" "1: \n" ); #elif defined(__sun) && defined(__amd64) @@ -156,8 +156,12 @@ CPUid by definition. But it's nice to be able to prove it. :) */ #if defined(__GNUC__) && (defined(i386) || defined(__x86_64__)) #define cpuid(func, a, b, c, d) \ - __asm__ __volatile__ ("cpuid": \ - "=a" (a), "=b" (b), "=c" (c), "=d" (d) : "a" (func)) + __asm__ __volatile__ ( \ +" pushl %%ebx \n" \ +" cpuid \n" \ +" movl %%ebx, %%esi \n" \ +" popl %%ebx \n" : \ + "=a" (a), "=S" (b), "=c" (c), "=d" (d) : "a" (func)) #elif (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__) #define cpuid(func, a, b, c, d) \ __asm { \