2009-05-13 Uros Bizjak PR target/37179 * config/i386/driver-i386.c (processor_signatures): New enum. (SIG_GEODE): Move from vendor_signatures to processor_signatures. (host_detect_local_cpu): For SIG_AMD vendor, check for SIG_GEODE processor signature to detect geode processor. Index: branches/gcc-4_4-branch/gcc/config/i386/driver-i386.c =================================================================== --- branches/gcc-4_4-branch/gcc/config/i386/driver-i386.c (revision 147468) +++ branches/gcc-4_4-branch/gcc/config/i386/driver-i386.c (revision 147469) @@ -336,7 +336,11 @@ enum vendor_signatures { SIG_INTEL = 0x756e6547 /* Genu */, - SIG_AMD = 0x68747541 /* Auth */, + SIG_AMD = 0x68747541 /* Auth */ +}; + +enum processor_signatures +{ SIG_GEODE = 0x646f6547 /* Geod */ }; @@ -433,19 +437,27 @@ if (vendor == SIG_AMD) { - processor = PROCESSOR_PENTIUM; + unsigned int name; - if (has_mmx) + /* Detect geode processor by its processor signature. */ + if (ext_level > 0x80000001) + __cpuid (0x80000002, name, ebx, ecx, edx); + else + name = 0; + + if (name == SIG_GEODE) + processor = PROCESSOR_GEODE; + else if (has_sse4a) + processor = PROCESSOR_AMDFAM10; + else if (has_sse2 || has_longmode) + processor = PROCESSOR_K8; + else if (has_3dnowp) + processor = PROCESSOR_ATHLON; + else if (has_mmx) processor = PROCESSOR_K6; - if (has_3dnowp) - processor = PROCESSOR_ATHLON; - if (has_sse2 || has_longmode) - processor = PROCESSOR_K8; - if (has_sse4a) - processor = PROCESSOR_AMDFAM10; + else + processor = PROCESSOR_PENTIUM; } - else if (vendor == SIG_GEODE) - processor = PROCESSOR_GEODE; else { switch (family)