Patchwork Support -m{cpu,tune}=native on Linux/Sparc

login
register
mail settings
Submitter David Miller
Date Sept. 5, 2011, 1:24 a.m.
Message ID <20110904.212448.1952992983929823827.davem@davemloft.net>
Download mbox | patch
Permalink /patch/113302/
State New
Headers show

Comments

David Miller - Sept. 5, 2011, 1:24 a.m.
gcc/

2011-09-04  David S. Miller  <davem@davemloft.net>

	* config.host: Add driver-sparc.o and sparc/x-sparc on
	native sparc*-*-linux* builds.
	* config/sparc/driver-sparc.c: Correct Linux strings.
	* gcc/config/sparc/linux.h: Add DRIVER_SELF_SPECS.
	* gcc/config/sparc/linux64.h: Likewise.
	* gcc/doc/invoke.texi: Document that Linux also supports
	-mcpu=native and -mtune=native on sparc.
Eric Botcazou - Sept. 5, 2011, 7:16 a.m.
> 2011-09-04  David S. Miller  <davem@davemloft.net>
>
> 	* config.host: Add driver-sparc.o and sparc/x-sparc on
> 	native sparc*-*-linux* builds.
> 	* config/sparc/driver-sparc.c: Correct Linux strings.
> 	* gcc/config/sparc/linux.h: Add DRIVER_SELF_SPECS.
> 	* gcc/config/sparc/linux64.h: Likewise.
> 	* gcc/doc/invoke.texi: Document that Linux also supports
> 	-mcpu=native and -mtune=native on sparc.

Nice, thanks (superfluous gcc/ in the last 3 ChangeLog entries though).
Gerald Pfeifer - Sept. 5, 2011, 10:57 p.m.
On Sun, 4 Sep 2011, David Miller wrote:
> 	* gcc/doc/invoke.texi: Document that Linux also supports
> 	-mcpu=native and -mtune=native on sparc.
:
> -Native Solaris toolchains also support the value @samp{native},
> +Native Solaris and Linux toolchains also support the value @samp{native},
:
> +@samp{niagara}, and @samp{niagara2}.  With native Solaris and Linux
> +toolchains, @samp{native} can also be used.

Should we use GNU/Linux in those three cases per the standing request
from RMS?  I can make the change if so.

Gerald
David Miller - Sept. 5, 2011, 11:25 p.m.
From: Gerald Pfeifer <gerald@pfeifer.com>
Date: Tue, 6 Sep 2011 00:57:08 +0200 (CEST)

> Should we use GNU/Linux in those three cases per the standing request
> from RMS?  I can make the change if so.

I'm completely ambivalent, feel free to make the change.

Patch

diff --git a/gcc/config.host b/gcc/config.host
index 61a00b5..df8ba8f 100644
--- a/gcc/config.host
+++ b/gcc/config.host
@@ -165,6 +165,14 @@  case ${host} in
 	;;
     esac
     ;;
+  sparc*-*-linux*)
+    case ${target} in
+      sparc*-*-linux*)
+	host_extra_gcc_objs="driver-sparc.o"
+	host_xmake_file="${host_xmake_file} sparc/x-sparc"
+	;;
+    esac
+    ;;
 esac
 
 # Machine-specific settings.
diff --git a/gcc/config/sparc/driver-sparc.c b/gcc/config/sparc/driver-sparc.c
index e5b91bc..f6a4e7c 100644
--- a/gcc/config/sparc/driver-sparc.c
+++ b/gcc/config/sparc/driver-sparc.c
@@ -58,7 +58,21 @@  static const struct cpu_names {
   { "SPARC-T3",		"niagara2" },
   { "SPARC-T4",		"niagara2" },
 #else
-  /* FIXME: Provide Linux/SPARC values.  */
+  { "SuperSPARC",	"supersparc" },
+  { "HyperSparc",	"hypersparc" },
+  { "SpitFire",		"ultrasparc" },
+  { "BlackBird",	"ultrasparc" },
+  { "Sabre",		"ultrasparc" },
+  { "Hummingbird",	"ultrasparc" },
+  { "Cheetah",		"ultrasparc3" },
+  { "Jalapeno",		"ultrasparc3" },
+  { "Jaguar",		"ultrasparc3" },
+  { "Panther",		"ultrasparc3" },
+  { "Serrano",		"ultrasparc3" },
+  { "UltraSparc T1",	"niagara" },
+  { "UltraSparc T2",	"niagara2" },
+  { "UltraSparc T3",	"niagara2" },
+  { "UltraSparc T4",	"niagara2" },
 #endif
   { NULL,	NULL }
   };
@@ -137,7 +151,7 @@  host_detect_local_cpu (int argc, const char **argv)
     return NULL;
 
   while (fgets (buf, sizeof (buf), f) != NULL)
-    if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0)
+    if (strncmp (buf, "cpu\t\t:", sizeof ("cpu\t\t:") - 1) == 0)
       {
         for (i = 0; cpu_names [i].name; i++)
           if (strstr (buf, cpu_names [i].name) != NULL)
diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h
index a9b630e..0ad4b34 100644
--- a/gcc/config/sparc/linux.h
+++ b/gcc/config/sparc/linux.h
@@ -39,6 +39,22 @@  along with GCC; see the file COPYING3.  If not see
   "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s\
    %{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"
 
+/* -mcpu=native handling only makes sense with compiler running on
+   a SPARC chip.  */
+#if defined(__sparc__)
+extern const char *host_detect_local_cpu (int argc, const char **argv);
+# define EXTRA_SPEC_FUNCTIONS						\
+  { "local_cpu_detect", host_detect_local_cpu },
+
+# define MCPU_MTUNE_NATIVE_SPECS					\
+   " %{mcpu=native:%<mcpu=native %:local_cpu_detect(cpu)}"		\
+   " %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
+#else
+# define MCPU_MTUNE_NATIVE_SPECS ""
+#endif
+
+#define DRIVER_SELF_SPECS MCPU_MTUNE_NATIVE_SPECS
+
 /* This is for -profile to use -lc_p instead of -lc.  */
 #undef	CC1_SPEC
 #define	CC1_SPEC "%{profile:-p} \
diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h
index 7f8b378..0ad1a52 100644
--- a/gcc/config/sparc/linux64.h
+++ b/gcc/config/sparc/linux64.h
@@ -142,6 +142,22 @@  along with GCC; see the file COPYING3.  If not see
 %{!mno-relax:%{!r:-relax}} \
 "
 
+/* -mcpu=native handling only makes sense with compiler running on
+   a SPARC chip.  */
+#if defined(__sparc__)
+extern const char *host_detect_local_cpu (int argc, const char **argv);
+# define EXTRA_SPEC_FUNCTIONS						\
+  { "local_cpu_detect", host_detect_local_cpu },
+
+# define MCPU_MTUNE_NATIVE_SPECS					\
+   " %{mcpu=native:%<mcpu=native %:local_cpu_detect(cpu)}"		\
+   " %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
+#else
+# define MCPU_MTUNE_NATIVE_SPECS ""
+#endif
+
+#define DRIVER_SELF_SPECS MCPU_MTUNE_NATIVE_SPECS
+
 #undef	CC1_SPEC
 #if DEFAULT_ARCH32_P
 #define CC1_SPEC "%{profile:-p} \
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index d5474fe..66d9fc5 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -17285,7 +17285,7 @@  for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
 @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
 @samp{ultrasparc3}, @samp{niagara} and @samp{niagara2}.
 
-Native Solaris toolchains also support the value @samp{native},
+Native Solaris and Linux toolchains also support the value @samp{native},
 which selects the best architecture option for the host processor.
 @option{-mcpu=native} has no effect if GCC does not recognize
 the processor.
@@ -17354,8 +17354,8 @@  The same values for @option{-mcpu=@var{cpu_type}} can be used for
 that select a particular CPU implementation.  Those are @samp{cypress},
 @samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{f930}, @samp{f934},
 @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, @samp{ultrasparc3},
-@samp{niagara}, and @samp{niagara2}.  With native Solaris toolchains,
-@samp{native} can also be used.
+@samp{niagara}, and @samp{niagara2}.  With native Solaris and Linux
+toolchains, @samp{native} can also be used.
 
 @item -mv8plus
 @itemx -mno-v8plus