Changes in directory llvm/lib/Target/X86:

X86Subtarget.cpp updated: 1.37 -> 1.38
---
Log message:

Proper fix.

---
Diffs of the changes:  (+4 -5)

 X86Subtarget.cpp |    9 ++++-----
 1 files changed, 4 insertions(+), 5 deletions(-)


Index: llvm/lib/Target/X86/X86Subtarget.cpp
diff -u llvm/lib/Target/X86/X86Subtarget.cpp:1.37 
llvm/lib/Target/X86/X86Subtarget.cpp:1.38
--- llvm/lib/Target/X86/X86Subtarget.cpp:1.37   Mon Oct 16 16:00:37 2006
+++ llvm/lib/Target/X86/X86Subtarget.cpp        Mon Oct 16 19:24:49 2006
@@ -32,16 +32,15 @@
 bool X86::GetCpuIDAndInfo(unsigned value, unsigned *rEAX, unsigned *rEBX,
                           unsigned *rECX, unsigned *rEDX) {
 #if defined(__x86_64__)
-  unsigned long long saveRBX;
-  asm ("nop" : "=b" (saveRBX));
-  asm ("cpuid\n\t"
-       "movl\t%%ebx, %%esi\n\t"
+  // gcc doesn't know cpuid would clobber ebx/rbx. Preseve it manually.
+  asm ("movq\t%%rbx, %%rsi\n\t"
+       "cpuid\n\t"
+       "xchgq\t%%rbx, %%rsi\n\t"
        : "=a" (*rEAX),
          "=S" (*rEBX),
          "=c" (*rECX),
          "=d" (*rEDX)
        :  "a" (value));
-  asm ("nop" :: "b" (saveRBX));
   return false;
 #elif defined(i386) || defined(__i386__) || defined(__x86__) || 
defined(_M_IX86)
 #if defined(__GNUC__)



_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to