summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJosé Fonseca <[email protected]>2009-10-04 12:49:31 +0100
committerJosé Fonseca <[email protected]>2009-10-04 22:03:15 +0100
commit7a7dfb09aadf0509db4c1e2752fff5b75c59406b (patch)
treeb2d29ffae8fbee04c1b9ad54a3279ee7065dfd2c /src
parenteb2e41f0c636eb77634ec7ada93b869a43f11e9f (diff)
util: Fix cpuid invocation for x86_64.
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/util/u_cpu_detect.c34
1 files changed, 23 insertions, 11 deletions
diff --git a/src/gallium/auxiliary/util/u_cpu_detect.c b/src/gallium/auxiliary/util/u_cpu_detect.c
index ecfb96138d6..e26214cb918 100644
--- a/src/gallium/auxiliary/util/u_cpu_detect.c
+++ b/src/gallium/auxiliary/util/u_cpu_detect.c
@@ -336,23 +336,35 @@ cpuid(unsigned int ax, unsigned int *p)
{
int ret = -1;
-#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
-#if defined(PIPE_CC_GCC)
- __asm __volatile
- ("movl %%ebx, %%esi\n\t"
- "cpuid\n\t"
- "xchgl %%ebx, %%esi"
- : "=a" (p[0]), "=S" (p[1]),
- "=c" (p[2]), "=d" (p[3])
- : "0" (ax));
-
+#if defined(PIPE_CC_GCC) && defined(PIPE_ARCH_X86)
+ __asm __volatile (
+ "movl %%ebx, %%esi\n\t"
+ "cpuid\n\t"
+ "xchgl %%ebx, %%esi"
+ : "=a" (p[0]),
+ "=S" (p[1]),
+ "=c" (p[2]),
+ "=d" (p[3])
+ : "0" (ax)
+ );
+ ret = 0;
+#elif defined(PIPE_CC_GCC) && defined(PIPE_ARCH_X86_64)
+ __asm __volatile (
+ "movq %%rbx, %%rsi\n\t"
+ "cpuid\n\t"
+ "xchgq %%rbx, %%rsi"
+ : "=a" (p[0]),
+ "=S" (p[1]),
+ "=c" (p[2]),
+ "=d" (p[3])
+ : "0" (ax)
+ );
ret = 0;
#elif defined(PIPE_CC_MSVC)
__cpuid(ax, p);
ret = 0;
#endif
-#endif
return ret;
}