From 4bdf739d7146908d64d9a2020df5263a10bedb9c Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Wed, 1 Jun 2016 15:44:37 +0200 Subject: [PATCH] re PR target/67310 ([PATCH] gcc 4.8.4 fails to compile with -march=native on VIA nano CPU) PR target/67310 * config/i386/driver-i386.c (host_detect_local_cpu): Correctly detect processor family for signature_CENTAUR_ebx. : Pass c3, winchip2 or winchip-c6 for signature_CENTAUR_ebx. : Pass c3-2 for signature_CENTAUR_ebx. : Pass x86-64 for has_longmode. Co-Authored-By: Jocelyn Mayer From-SVN: r236991 --- gcc/ChangeLog | 11 ++++++ gcc/config/i386/driver-i386.c | 73 +++++++++++++++++++++-------------- 2 files changed, 55 insertions(+), 29 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5d10b0eea08..59dda4df200 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2016-06-01 Uros Bizjak + Jocelyn Mayer + + PR target/67310 + * config/i386/driver-i386.c (host_detect_local_cpu): Correctly + detect processor family for signature_CENTAUR_ebx. + : Pass c3, winchip2 or winchip-c6 for + signature_CENTAUR_ebx. + : Pass c3-2 for signature_CENTAUR_ebx. + : Pass x86-64 for has_longmode. + 2016-06-01 Nathan Sidwell * config/nvptx/nvptx.c (nvptx_assemble_undefined_decl): Reject diff --git a/gcc/config/i386/driver-i386.c b/gcc/config/i386/driver-i386.c index b12146663e4..a9d5135f678 100644 --- a/gcc/config/i386/driver-i386.c +++ b/gcc/config/i386/driver-i386.c @@ -637,33 +637,27 @@ const char *host_detect_local_cpu (int argc, const char **argv) } else if (vendor == signature_CENTAUR_ebx) { - if (arch) + processor = PROCESSOR_GENERIC; + + switch (family) { - switch (family) - { - case 6: - if (model > 9) - /* Use the default detection procedure. */ - processor = PROCESSOR_GENERIC; - else if (model == 9) - cpu = "c3-2"; - else if (model >= 6) - cpu = "c3"; - else - processor = PROCESSOR_GENERIC; - break; - case 5: - if (has_3dnow) - cpu = "winchip2"; - else if (has_mmx) - cpu = "winchip2-c6"; - else - processor = PROCESSOR_GENERIC; - break; - default: - /* We have no idea. */ - processor = PROCESSOR_GENERIC; - } + default: + /* We have no idea. */ + break; + + case 5: + if (has_3dnow || has_mmx) + processor = PROCESSOR_I486; + break; + + case 6: + if (model > 9 || has_longmode) + /* Use the default detection procedure. */ + ; + else if (model == 9) + processor = PROCESSOR_PENTIUMPRO; + else if (model >= 6) + processor = PROCESSOR_I486; } } else @@ -694,7 +688,18 @@ const char *host_detect_local_cpu (int argc, const char **argv) /* Default. */ break; case PROCESSOR_I486: - cpu = "i486"; + if (arch && vendor == signature_CENTAUR_ebx) + { + if (model >= 6) + cpu = "c3"; + else if (has_3dnow) + cpu = "winchip2"; + else + /* Assume WinChip C6. */ + cpu = "winchip-c6"; + } + else + cpu = "i486"; break; case PROCESSOR_PENTIUM: if (arch && has_mmx) @@ -817,8 +822,13 @@ const char *host_detect_local_cpu (int argc, const char **argv) /* It is Pentium M. */ cpu = "pentium-m"; else if (has_sse) - /* It is Pentium III. */ - cpu = "pentium3"; + { + if (vendor == signature_CENTAUR_ebx) + cpu = "c3-2"; + else + /* It is Pentium III. */ + cpu = "pentium3"; + } else if (has_mmx) /* It is Pentium II. */ cpu = "pentium2"; @@ -902,6 +912,11 @@ const char *host_detect_local_cpu (int argc, const char **argv) else cpu = "prescott"; } + else if (has_longmode) + /* Perhaps some emulator? Assume x86-64, otherwise gcc + -march=native would be unusable for 64-bit compilations, + as all the CPUs below are 32-bit only. */ + cpu = "x86-64"; else if (has_sse2) cpu = "pentium4"; else if (has_cmov) -- 2.30.2