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

Chris Lattner lattner at cs.uiuc.edu
Fri Jan 27 22:05:53 PST 2006



Changes in directory llvm/lib/Target/X86:

X86Subtarget.cpp updated: 1.14 -> 1.15
---
Log message:

make this work on non-native hosts


---
Diffs of the changes:  (+7 -3)

 X86Subtarget.cpp |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)


Index: llvm/lib/Target/X86/X86Subtarget.cpp
diff -u llvm/lib/Target/X86/X86Subtarget.cpp:1.14 llvm/lib/Target/X86/X86Subtarget.cpp:1.15
--- llvm/lib/Target/X86/X86Subtarget.cpp:1.14	Fri Jan 27 16:37:09 2006
+++ llvm/lib/Target/X86/X86Subtarget.cpp	Sat Jan 28 00:05:41 2006
@@ -23,7 +23,9 @@
                           cl::desc("Enable sse on X86"));
 }
 
-static void GetCpuIDAndInfo(unsigned value, unsigned *EAX, unsigned *EBX,
+/// GetCpuIDAndInfo - Execute the specified cpuid and return the 4 values in the
+/// specified arguments.  If we can't run cpuid on the host, return true.
+static bool GetCpuIDAndInfo(unsigned value, unsigned *EAX, unsigned *EBX,
                             unsigned *ECX, unsigned *EDX) {
 #if defined(i386) || defined(__i386__) || defined(__x86__) || defined(_M_IX86)
 #if defined(__GNUC__)
@@ -36,13 +38,16 @@
          "=c" (*ECX),
          "=d" (*EDX)
        :  "a" (value));
+  return false;
 #endif
 #endif
+  return true;
 }
 
 static const char *GetCurrentX86CPU() {
   unsigned EAX = 0, EBX = 0, ECX = 0, EDX = 0;
-  GetCpuIDAndInfo(0x1, &EAX, &EBX, &ECX, &EDX);
+  if (GetCpuIDAndInfo(0x1, &EAX, &EBX, &ECX, &EDX))
+    return "generic";
   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, &EBX, &ECX, &EDX);
@@ -58,7 +63,6 @@
       case 4:  return "pentium-mmx";
       default: return "pentium";
       }
-      break;
     case 6:
       switch (Model) {
       case 1:  return "pentiumpro";






More information about the llvm-commits mailing list