diff options
author | José Fonseca <[email protected]> | 2009-10-04 12:49:31 +0100 |
---|---|---|
committer | José Fonseca <[email protected]> | 2009-10-04 22:03:15 +0100 |
commit | 7a7dfb09aadf0509db4c1e2752fff5b75c59406b (patch) | |
tree | b2d29ffae8fbee04c1b9ad54a3279ee7065dfd2c /src/gallium/auxiliary/util | |
parent | eb2e41f0c636eb77634ec7ada93b869a43f11e9f (diff) |
util: Fix cpuid invocation for x86_64.
Diffstat (limited to 'src/gallium/auxiliary/util')
-rw-r--r-- | src/gallium/auxiliary/util/u_cpu_detect.c | 34 |
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; } |