Patchwork 0001-Basic-support-for-Core-i7

login
register
mail settings
Submitter Maxim Kuvyrkov
Date Oct. 19, 2010, 12:12 p.m.
Message ID <4CBD8B21.7070001@codesourcery.com>
Download mbox | patch
Permalink /patch/68327/
State New
Headers show

Comments

Maxim Kuvyrkov - Oct. 19, 2010, 12:12 p.m.
On 10/19/10 3:31 PM, H.J. Lu wrote:
> On Tue, Oct 19, 2010 at 4:26 AM, Maxim Kuvyrkov<maxim@codesourcery.com>  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,
Richard Henderson - Oct. 19, 2010, 5:15 p.m.
> 	Basic support for Intel Core i7
> 
> 	* i386.c (ix86_option_override_internal): Add entry for corei7, use
> 	generic tuning.  Use generic32 when compiling for 32-bit ABI.

Ok, except

> +	      case  PROCESSOR_GENERIC64:

Watch the double space after "case".


r~

Patch

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