44 lines
1.2 KiB
Diff
44 lines
1.2 KiB
Diff
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.
|
|
|
|
--- gcc/config/i386/driver-i386.c (revision 147735)
|
|
+++ gcc/config/i386/driver-i386.c (revision 147736)
|
|
@@ -395,9 +395,22 @@ const char *host_detect_local_cpu (int a
|
|
|
|
__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 a
|
|
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)
|