diff options
author | Daniel Jacobowitz <dan@codesourcery.com> | 2008-06-18 08:28:07 +0000 |
---|---|---|
committer | Maxim Kuvyrkov <mkuvyrkov@gcc.gnu.org> | 2008-06-18 08:28:07 +0000 |
commit | 900e3ae581fac0fa5fb79b790f4be57501fba319 (patch) | |
tree | 08ad1899ff895eecff141825004ddfce771bcfae /gcc/config | |
parent | b51469a5d825a43e376a647f71cbf1da28149ae1 (diff) | |
download | gcc-900e3ae581fac0fa5fb79b790f4be57501fba319.zip gcc-900e3ae581fac0fa5fb79b790f4be57501fba319.tar.gz gcc-900e3ae581fac0fa5fb79b790f4be57501fba319.tar.bz2 |
config.gcc (mips64el-st-linux-gnu): Use mips/st.h and mips/t-st.
* config.gcc (mips64el-st-linux-gnu): Use mips/st.h and mips/t-st.
* config.host: Use driver-native.o and mips/x-native for mips*-linux*.
* config/mips/linux.h (host_detect_local_cpu): Declare, add to
EXTRA_SPEC_FUNCTIONS.
(MARCH_MTUNE_NATIVE_SPECS, BASE_DRIVER_SELF_SPECS): New macros.
(DRIVER_SELF_SPECS): Adjust.
* config/mips/linux64.h (DRIVER_SELF_SPECS): Update.
* config/mips/st.h, config/mips/t-st: New.
* config/mips/driver-native.c, config/mips/x-native: New.
* doc/invoke.texi (MIPS): Document 'native' value for -march and
-mtune options.
Co-Authored-By: Kazu Hirata <kazu@codesourcery.com>
From-SVN: r136888
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/mips/driver-native.c | 73 | ||||
-rw-r--r-- | gcc/config/mips/linux.h | 24 | ||||
-rw-r--r-- | gcc/config/mips/linux64.h | 2 | ||||
-rw-r--r-- | gcc/config/mips/st.h | 31 | ||||
-rw-r--r-- | gcc/config/mips/t-st | 14 | ||||
-rw-r--r-- | gcc/config/mips/x-native | 3 |
6 files changed, 143 insertions, 4 deletions
diff --git a/gcc/config/mips/driver-native.c b/gcc/config/mips/driver-native.c new file mode 100644 index 0000000..22b0893 --- /dev/null +++ b/gcc/config/mips/driver-native.c @@ -0,0 +1,73 @@ +/* Subroutines for the gcc driver. + Copyright (C) 2008 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#include "config.h" +#include "system.h" + +/* This will be called by the spec parser in gcc.c when it sees + a %:local_cpu_detect(args) construct. Currently it will be called + with either "arch" or "tune" as argument depending on if -march=native + or -mtune=native is to be substituted. + + It returns a string containing new command line parameters to be + put at the place of the above two options, depending on what CPU + this is executed. E.g. "-march=loongson2f" on a Loongson 2F for + -march=native. If the routine can't detect a known processor, + the -march or -mtune option is discarded. + + ARGC and ARGV are set depending on the actual arguments given + in the spec. */ +const char * +host_detect_local_cpu (int argc, const char **argv) +{ + const char *cpu = NULL; + char buf[128]; + FILE *f; + bool arch; + + if (argc < 1) + return NULL; + + arch = strcmp (argv[0], "arch") == 0; + if (!arch && strcmp (argv[0], "tune")) + return NULL; + + f = fopen ("/proc/cpuinfo", "r"); + if (f == NULL) + return NULL; + + while (fgets (buf, sizeof (buf), f) != NULL) + if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0) + { + if (strstr (buf, "Godson2 V0.2") != NULL + || strstr (buf, "Loongson-2 V0.2") != NULL) + cpu = "loongson2e"; + else if (strstr (buf, "Godson2 V0.3") != NULL + || strstr (buf, "Loongson-2 V0.3") != NULL) + cpu = "loongson2f"; + break; + } + + fclose (f); + + if (cpu == NULL) + return NULL; + + return concat ("-m", argv[0], "=", cpu, NULL); +} diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h index 4ee046a..2e7b102 100644 --- a/gcc/config/mips/linux.h +++ b/gcc/config/mips/linux.h @@ -143,9 +143,27 @@ along with GCC; see the file COPYING3. If not see #ifdef HAVE_AS_NO_SHARED /* Default to -mno-shared for non-PIC. */ -#define NO_SHARED_SPECS \ +# define NO_SHARED_SPECS \ "%{mshared|mno-shared|fpic|fPIC|fpie|fPIE:;:-mno-shared}" -#define DRIVER_SELF_SPECS NO_SHARED_SPECS #else -#define NO_SHARED_SPECS +# define NO_SHARED_SPECS "" #endif + +/* -march=native handling only makes sense with compiler running on + a MIPS chip. */ +#if defined(__mips__) +extern const char *host_detect_local_cpu (int argc, const char **argv); +# define EXTRA_SPEC_FUNCTIONS \ + { "local_cpu_detect", host_detect_local_cpu }, + +# define MARCH_MTUNE_NATIVE_SPECS \ + " %{march=native:%<march=native %:local_cpu_detect(arch)}" \ + " %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}" +#else +# define MARCH_MTUNE_NATIVE_SPECS "" +#endif + +#define BASE_DRIVER_SELF_SPECS \ + NO_SHARED_SPECS \ + MARCH_MTUNE_NATIVE_SPECS +#define DRIVER_SELF_SPECS BASE_DRIVER_SELF_SPECS diff --git a/gcc/config/mips/linux64.h b/gcc/config/mips/linux64.h index 36b67d6..5a2c6ce 100644 --- a/gcc/config/mips/linux64.h +++ b/gcc/config/mips/linux64.h @@ -22,7 +22,7 @@ along with GCC; see the file COPYING3. If not see in order to make the other specs easier to write. */ #undef DRIVER_SELF_SPECS #define DRIVER_SELF_SPECS \ -NO_SHARED_SPECS \ +BASE_DRIVER_SELF_SPECS \ " %{!EB:%{!EL:%(endian_spec)}}" \ " %{!mabi=*: -mabi=n32}" diff --git a/gcc/config/mips/st.h b/gcc/config/mips/st.h new file mode 100644 index 0000000..363e797 --- /dev/null +++ b/gcc/config/mips/st.h @@ -0,0 +1,31 @@ +/* ST 2e / 2f GNU/Linux Configuration. + Copyright (C) 2008 + Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +/* The various C libraries each have their own subdirectory. */ +#undef SYSROOT_SUFFIX_SPEC +#define SYSROOT_SUFFIX_SPEC \ + "%{march=loongson2e:/2e ; \ + march=loongson2f:/2f}" + +#undef STARTFILE_PREFIX_SPEC +#define STARTFILE_PREFIX_SPEC \ + "%{mabi=32: /usr/local/lib/ /lib/ /usr/lib/} \ + %{mabi=n32: /usr/local/lib32/ /lib32/ /usr/lib32/} \ + %{mabi=64: /usr/local/lib64/ /lib64/ /usr/lib64/}" diff --git a/gcc/config/mips/t-st b/gcc/config/mips/t-st new file mode 100644 index 0000000..8fa6790 --- /dev/null +++ b/gcc/config/mips/t-st @@ -0,0 +1,14 @@ +MULTILIB_OPTIONS = march=loongson2e/march=loongson2f mabi=n32/mabi=32/mabi=64 +MULTILIB_DIRNAMES = 2e 2f lib32 lib lib64 + +MULTILIB_OSDIRNAMES = march.loongson2e/mabi.n32=../lib32/2e +MULTILIB_OSDIRNAMES += march.loongson2e/mabi.32=../lib/2e +MULTILIB_OSDIRNAMES += march.loongson2e/mabi.64=../lib64/2e +MULTILIB_OSDIRNAMES += march.loongson2f/mabi.n32=../lib32/2f +MULTILIB_OSDIRNAMES += march.loongson2f/mabi.32=../lib/2f +MULTILIB_OSDIRNAMES += march.loongson2f/mabi.64=../lib64/2f +MULTILIB_OSDIRNAMES += mabi.n32=../lib32 +MULTILIB_OSDIRNAMES += mabi.32=../lib +MULTILIB_OSDIRNAMES += mabi.64=../lib64 + +EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o diff --git a/gcc/config/mips/x-native b/gcc/config/mips/x-native new file mode 100644 index 0000000..6820e73 --- /dev/null +++ b/gcc/config/mips/x-native @@ -0,0 +1,3 @@ +driver-native.o : $(srcdir)/config/mips/driver-native.c \ + $(CONFIG_H) $(SYSTEM_H) + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< |