OSDN Git Service

2009-05-20 H.J. Lu <hongjiu.lu@intel.com>
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 May 2009 13:32:14 +0000 (13:32 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 May 2009 13:32:14 +0000 (13:32 +0000)
* config/i386/driver-i386.c (host_detect_local_cpu): Check
extended family and model for Intel processors.  Support Intel
Atom.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147736 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/driver-i386.c

index 59721f4..4ac176d 100644 (file)
@@ -1,3 +1,9 @@
+2009-05-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/i386/driver-i386.c (host_detect_local_cpu): Check
+       extended family and model for Intel processors.  Support Intel
+       Atom.
+
 2009-05-20  Olivier Hainque  <hainque@adacore.com>
 
        * gstab.h (stab_code_type): Define, to be used instead of the
index cb66937..d4ba466 100644 (file)
@@ -395,9 +395,22 @@ const char *host_detect_local_cpu (int argc, const char **argv)
 
   __cpuid (1, eax, ebx, ecx, edx);
 
-  /* We don't care for extended family.  */
   model = (eax >> 4) & 0x0f;
   family = (eax >> 8) & 0x0f;
+  if (vendor == SIG_INTEL)
+    {
+      unsigned int extended_model, extended_family;
+
+      extended_model = (eax >> 12) & 0xf0;
+      extended_family = (eax >> 20) & 0xff;
+      if (family == 0x0f)
+       {
+         family += extended_family;
+         model += extended_model;
+       }
+      else if (family == 0x06)
+       model += extended_model;
+    }
 
   has_sse3 = ecx & bit_SSE3;
   has_ssse3 = ecx & bit_SSSE3;
@@ -496,8 +509,8 @@ const char *host_detect_local_cpu (int argc, const char **argv)
       break;
     case PROCESSOR_PENTIUMPRO:
       if (has_longmode)
-       /* It is Core 2 Duo.  */
-       cpu = "core2";
+       /* It is Core 2 or Atom.  */
+       cpu = (model == 28) ? "atom" : "core2";
       else if (arch)
        {
          if (has_sse3)