From: guerby Date: Tue, 24 Mar 2009 10:33:57 +0000 (+0000) Subject: 2009-03-24 Arthur Loiret X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=68ecbaec2d9fbafda31edac7495152785f6db433 2009-03-24 Arthur Loiret * config.host (alpha*-*-linux*): Use driver-alpha.o and alpha/x-alpha. * config/alpha/linux.h (host_detect_local_cpu): Declare, add to EXTRA_SPEC_FUNCTIONS. (MCPU_MTUNE_NATIVE_SPECS, DRIVER_SELF_SPECS): New macros. * config/alpha/driver-alpha.c, config/alpha/x-alpha: New. * doc/invoke.texi (DEC Alpha Options): Document 'native' value for -march and -mtune options. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145028 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 25c07ea3c5b..6974b1f802a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2009-03-24 Arthur Loiret + + * config.host (alpha*-*-linux*): Use driver-alpha.o and + alpha/x-alpha. + * config/alpha/linux.h (host_detect_local_cpu): Declare, add to + EXTRA_SPEC_FUNCTIONS. + (MCPU_MTUNE_NATIVE_SPECS, DRIVER_SELF_SPECS): New macros. + * config/alpha/driver-alpha.c, config/alpha/x-alpha: New. + * doc/invoke.texi (DEC Alpha Options): Document 'native' value for + -march and -mtune options. + 2009-03-24 Ralf Corsépius * config/m68k/t-rtems: Add m5329 multilib. diff --git a/gcc/config.host b/gcc/config.host index 0cd57ed87f9..b06d1648c73 100644 --- a/gcc/config.host +++ b/gcc/config.host @@ -94,6 +94,14 @@ case ${host} in esac case ${host} in + alpha*-*-linux*) + case ${target} in + alpha*-*-linux*) + host_extra_gcc_objs="driver-alpha.o" + host_xmake_file="${host_xmake_file} alpha/x-alpha" + ;; + esac + ;; i[34567]86-*-* \ | x86_64-*-* ) case ${target} in @@ -112,9 +120,6 @@ case ${host} in ;; esac ;; -esac - -case ${host} in rs6000-*-* \ | powerpc*-*-* ) case ${target} in diff --git a/gcc/config/alpha/driver-alpha.c b/gcc/config/alpha/driver-alpha.c new file mode 100644 index 00000000000..d787886d172 --- /dev/null +++ b/gcc/config/alpha/driver-alpha.c @@ -0,0 +1,100 @@ +/* Subroutines for the gcc driver. + Copyright (C) 2009 Free Software Foundation, Inc. + Contributed by Arthur Loiret + +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 +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "tm.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 "cpu" or "tune" as argument depending on if -mcpu=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. "-mcpu=ev6" on an Alpha 21264 for + -mcpu=native. If the routine can't detect a known processor, + the -mcpu 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; + + static const struct cpu_names { + const char *const name; + const char *const cpu; + } cpu_names[] = { + { "EV79", "ev67" }, + { "EV7", "ev67" }, + { "EV69", "ev67" }, + { "EV68CX", "ev67" }, + { "EV68CB", "ev67" }, + { "EV68AL", "ev67" }, + { "EV67", "ev67" }, + { "EV6", "ev6" }, + { "PCA57", "pca56" }, + { "PCA56", "pca56" }, + { "EV56", "ev56" }, + { "EV5", "ev5" }, + { "LCA45", "ev45" }, + { "EV45", "ev45" }, + { "LCA4", "ev4" }, + { "EV4", "ev4" }, +/* { "EV3", "ev3" }, */ + { 0, 0 } + }; + + int i; + + if (argc < 1) + return NULL; + + if (strcmp (argv[0], "cpu") && 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) + { + for (i = 0; cpu_names [i].name; i++) + if (strstr (buf, cpu_names [i].name) != NULL) + { + cpu = cpu_names [i].cpu; + break; + } + break; + } + + fclose (f); + + if (cpu == NULL) + return NULL; + + return concat ("-m", argv[0], "=", cpu, NULL); +} diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h index 94876f646de..0a32479d5d7 100644 --- a/gcc/config/alpha/linux.h +++ b/gcc/config/alpha/linux.h @@ -85,3 +85,19 @@ along with GCC; see the file COPYING3. If not see /* Define if long doubles should be mangled as 'g'. */ #define TARGET_ALTERNATE_LONG_DOUBLE_MANGLING + +/* -mcpu=native handling only makes sense with compiler running on + an Alpha chip. */ +#if defined(__alpha__) || defined(__alpha) +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:%