diff options
Diffstat (limited to 'audio/festalon/files/patch-src_cputest.c')
-rw-r--r-- | audio/festalon/files/patch-src_cputest.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/audio/festalon/files/patch-src_cputest.c b/audio/festalon/files/patch-src_cputest.c new file mode 100644 index 000000000000..c124c1c9eae9 --- /dev/null +++ b/audio/festalon/files/patch-src_cputest.c @@ -0,0 +1,48 @@ +--- src/cputest.c.orig 2005-02-28 00:26:01 UTC ++++ src/cputest.c +@@ -31,18 +31,33 @@ static int mm_support(void) + { + #ifdef ARCH_X86 + int rval; ++#ifdef __x86_64__ ++ int64_t eax, ebx, ecx, edx; ++#else + int eax, ebx, ecx, edx; ++#endif + char vendor[13] = "UnknownVndr"; + + __asm__ __volatile__ ( + /* See if CPUID instruction is supported ... */ + /* ... Get copies of EFLAGS into eax and ecx */ +- "pushf\n\t" + #ifdef __x86_64__ ++ "pushf\n\t" ++ "pop %0\n\t" ++ "mov %0, %1\n\t" ++ ++ /* ... Toggle the ID bit in one copy and store */ ++ /* to the EFLAGS reg */ ++ "xor $0x200000, %0\n\t" ++ "push %0\n\t" ++ "popf\n\t" ++ ++ /* ... Get the (hopefully modified) EFLAGS */ ++ "pushf\n\t" + "pop %0\n\t" + #else ++ "pushf\n\t" + "popl %0\n\t" +-#endif + "movl %0, %1\n\t" + + /* ... Toggle the ID bit in one copy and store */ +@@ -53,9 +68,6 @@ static int mm_support(void) + + /* ... Get the (hopefully modified) EFLAGS */ + "pushf\n\t" +-#ifdef __x86_64__ +- "pop %0\n\t" +-#else + "popl %0\n\t" + #endif + : "=a" (eax), "=c" (ecx) |