ref: e50f5d40376b3817fa2bf2e2b2fdf8a0084c3460
parent: 136857475ecbbcc4ae6fd24f8a9a82b5a2610e4a
author: Fritz Koenig <frkoenig@google.com>
date: Tue Oct 12 05:42:03 EDT 2010
GCC inline restrictions were not adequate. =r was not restrictive enough and the compiler was not returning ebx correctly. Change-Id: I7606e384067bd5fb69189802f1ff64ccc5aa02d6
--- a/vpx_ports/x86.h
+++ b/vpx_ports/x86.h
@@ -24,12 +24,11 @@
#else
#define cpuid(func,ax,bx,cx,dx)\
__asm__ __volatile__ (\
- "pushl %%ebx \n\t" \
- "cpuid \n\t" \
- "movl %%ebx, %1 \n\t" \
- "popl %%ebx \n\t" \
- : "=a" (ax), "=r" (bx), "=c" (cx), "=d" (dx) \
- : "a" (func));
+ "mov %%ebx, %%edi \n\t" \
+ "cpuid \n\t" \
+ "xchg %%edi, %%ebx \n\t" \
+ : "=a" (ax), "=D" (bx), "=c" (cx), "=d" (dx) \
+ : "a" (func));
#endif
#else
#if ARCH_X86_64