From patchwork Tue Oct 19 12:12:17 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 0001-Basic-support-for-Core-i7 From: Maxim Kuvyrkov X-Patchwork-Id: 68327 Message-Id: <4CBD8B21.7070001@codesourcery.com> To: "H.J. Lu" Cc: gcc-patches , Richard Henderson , Bernd Schmidt , "H.J. Lu" Date: Tue, 19 Oct 2010 16:12:17 +0400 On 10/19/10 3:31 PM, H.J. Lu wrote: > On Tue, Oct 19, 2010 at 4:26 AM, Maxim Kuvyrkov wrote: >> This patch adds handling of "corei7" to -mtune= and -march= options. Tuning >> for -mtune=corei7 is set to that of -mtune=generic or -mtune=generic64 >> depending on the selected ABI. >> >> Tested by bootstrapping on i686-pc-linux-gnu. >> >> OK to commit? >> > > I suggest you use > > if (TARGET_64BIT) > { > } > else > switch (ix86_tune) > { > case PROCESSOR_GENERIC64: Good suggestion. Here is an updated patch. OK to commit? Thank you, diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 33510a7..71e0242 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -2894,6 +2894,9 @@ ix86_option_override_internal (bool main_args_p) {"core2", PROCESSOR_CORE2, CPU_CORE2, PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_SSSE3 | PTA_CX16}, + {"corei7", PROCESSOR_GENERIC64, CPU_GENERIC64, + PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 + | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_CX16}, {"atom", PROCESSOR_ATOM, CPU_ATOM, PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_SSSE3 | PTA_CX16 | PTA_MOVBE}, @@ -3233,23 +3236,40 @@ ix86_option_override_internal (bool main_args_p) { ix86_schedule = processor_alias_table[i].schedule; ix86_tune = processor_alias_table[i].processor; - if (TARGET_64BIT && !(processor_alias_table[i].flags & PTA_64BIT)) + if (TARGET_64BIT) { - if (ix86_tune_defaulted) + if (!(processor_alias_table[i].flags & PTA_64BIT)) { - ix86_tune_string = "x86-64"; - for (i = 0; i < pta_size; i++) - if (! strcmp (ix86_tune_string, - processor_alias_table[i].name)) - break; - ix86_schedule = processor_alias_table[i].schedule; - ix86_tune = processor_alias_table[i].processor; + if (ix86_tune_defaulted) + { + ix86_tune_string = "x86-64"; + for (i = 0; i < pta_size; i++) + if (! strcmp (ix86_tune_string, + processor_alias_table[i].name)) + break; + ix86_schedule = processor_alias_table[i].schedule; + ix86_tune = processor_alias_table[i].processor; + } + else + error ("CPU you selected does not support x86-64 " + "instruction set"); + } + } + else + { + /* Adjust tuning when compiling for 32-bit ABI. */ + switch (ix86_tune) + { + case PROCESSOR_GENERIC64: + ix86_tune = PROCESSOR_GENERIC32; + ix86_schedule = CPU_PENTIUMPRO; + break; + + default: + break; } - else - error ("CPU you selected does not support x86-64 " - "instruction set"); } - /* Intel CPUs have always interpreted SSE prefetch instructions as + /* Intel CPUs have always interpreted SSE prefetch instructions as NOPs; so, we can enable SSE prefetch instructions even when -mtune (rather than -march) points us to a processor that has them. However, the VIA C3 gives a SIGILL, so we only do that for i686 and