[llvm-commits] CVS: llvm/lib/Target/X86/X86Subtarget.cpp

Evan Cheng evan.cheng at apple.com
Fri Jan 27 11:30:42 PST 2006



Changes in directory llvm/lib/Target/X86:

X86Subtarget.cpp updated: 1.11 -> 1.12
---
Log message:

A better workaround

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

 X86Subtarget.cpp |   11 +++++------
 1 files changed, 5 insertions(+), 6 deletions(-)


Index: llvm/lib/Target/X86/X86Subtarget.cpp
diff -u llvm/lib/Target/X86/X86Subtarget.cpp:1.11 llvm/lib/Target/X86/X86Subtarget.cpp:1.12
--- llvm/lib/Target/X86/X86Subtarget.cpp:1.11	Fri Jan 27 12:30:50 2006
+++ llvm/lib/Target/X86/X86Subtarget.cpp	Fri Jan 27 13:30:30 2006
@@ -22,11 +22,10 @@
 #if defined(__GNUC__)
   asm ("pushl\t%%ebx\n\t"
        "cpuid\n\t"
+       "movl\t%%ebx, %%esi\n\t"
        "popl\t%%ebx"
        : "=a" (*EAX),
-#if !defined(__DYNAMIC__)  // This works around a gcc -fPIC bug
-         "=b" (*EBX),
-#endif
+         "=S" (*EBX),
          "=c" (*ECX),
          "=d" (*EDX)
        :  "a" (value));
@@ -35,11 +34,11 @@
 }
 
 static const char *GetCurrentX86CPU() {
-  unsigned EAX = 0, DUMMY = 0, ECX = 0, EDX = 0;
-  GetCpuIDAndInfo(0x1, &EAX, &DUMMY, &ECX, &EDX);
+  unsigned EAX = 0, EBX = 0, ECX = 0, EDX = 0;
+  GetCpuIDAndInfo(0x1, &EAX, &EBX, &ECX, &EDX);
   unsigned Family  = (EAX & (0xffffffff >> (32 - 4)) << 8) >> 8; // Bits 8 - 11
   unsigned Model   = (EAX & (0xffffffff >> (32 - 4)) << 4) >> 4; // Bits 4 - 7
-  GetCpuIDAndInfo(0x80000001, &EAX, &DUMMY, &ECX, &EDX);
+  GetCpuIDAndInfo(0x80000001, &EAX, &EBX, &ECX, &EDX);
   bool Em64T = EDX & (1 << 29);
 
   switch (Family) {






More information about the llvm-commits mailing list