diff options
author | Richard Sandiford <richard@codesourcery.com> | 2007-07-02 10:11:56 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2007-07-02 10:11:56 +0000 |
commit | e2c14f5d512a5a5e8a658030789dea947c42068e (patch) | |
tree | 0032f4d9416bd1cb36c8e003f578b206cb2e73b1 /gcc | |
parent | 36618b93d0cbf25b1de5ec50998c3430e29c4585 (diff) | |
download | gcc-e2c14f5d512a5a5e8a658030789dea947c42068e.tar.gz |
gcc/
* config.gcc (mipsisa32-*-elf*, mipsisa32el-*-elf*)
(mipsisa32r2-*-elf*, mipsisa32r2el-*-elf*)
(mipsisa64-*-elf*, mipsisa64el-*-elf*): Combine top-level
stanzas. Use the first part of the triplet to set MIPS_ISA_DEFAULT.
Remove redundant setting of MASK_FLOAT64 and MASK_64BIT for the
64-bit targets. Add support for *-elfoabi*.
* config/mips/t-isa3264 (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Use
different settings if $(tm_defines) does not select the EABI.
(MULTILIB_EXCLUSIONS): Define in those circumstances.
* config/mips/mips.h (MIPS_ISA_LEVEL_OPTION_SPEC): New macro.
(MIPS_ARCH_OPTION_SPEC): Likewise.
(MIPS_ISA_LEVEL_SPEC): Likewise.
(OPTION_DEFAULT_SPECS): Use MIPS_ARCH_OPTION_SPEC.
* config/mips/elfoabi.h: New file.
From-SVN: r126195
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 17 | ||||
-rw-r--r-- | gcc/config.gcc | 41 | ||||
-rw-r--r-- | gcc/config/mips/elfoabi.h | 41 | ||||
-rw-r--r-- | gcc/config/mips/mips.h | 25 | ||||
-rw-r--r-- | gcc/config/mips/t-isa3264 | 10 |
5 files changed, 118 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 31e1b425bea..f1452ac2a19 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,20 @@ +2007-07-02 Richard Sandiford <richard@codesourcery.com> + + * config.gcc (mipsisa32-*-elf*, mipsisa32el-*-elf*) + (mipsisa32r2-*-elf*, mipsisa32r2el-*-elf*) + (mipsisa64-*-elf*, mipsisa64el-*-elf*): Combine top-level + stanzas. Use the first part of the triplet to set MIPS_ISA_DEFAULT. + Remove redundant setting of MASK_FLOAT64 and MASK_64BIT for the + 64-bit targets. Add support for *-elfoabi*. + * config/mips/t-isa3264 (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): Use + different settings if $(tm_defines) does not select the EABI. + (MULTILIB_EXCLUSIONS): Define in those circumstances. + * config/mips/mips.h (MIPS_ISA_LEVEL_OPTION_SPEC): New macro. + (MIPS_ARCH_OPTION_SPEC): Likewise. + (MIPS_ISA_LEVEL_SPEC): Likewise. + (OPTION_DEFAULT_SPECS): Use MIPS_ARCH_OPTION_SPEC. + * config/mips/elfoabi.h: New file. + 2007-07-02 Richard Guenther <rguenther@suse.de> * tree-flow.h (tree_ssa_useless_type_conversion_1): Rename to ... diff --git a/gcc/config.gcc b/gcc/config.gcc index 9700c046e3c..d3358c3fad4 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1673,24 +1673,35 @@ mips*-*-openbsd*) *) tm_defines="${tm_defines} TARGET_ENDIAN_DEFAULT=MASK_BIG_ENDIAN";; esac ;; -mipsisa32-*-elf* | mipsisa32el-*-elf*) - tm_file="elfos.h ${tm_file} mips/elf.h" - tmake_file=mips/t-isa3264 - tm_defines="${tm_defines} MIPS_ISA_DEFAULT=32 MIPS_ABI_DEFAULT=ABI_EABI" - use_fixproto=yes - ;; -mipsisa32r2-*-elf* | mipsisa32r2el-*-elf*) - tm_file="elfos.h ${tm_file} mips/elf.h" - tmake_file=mips/t-isa3264 - tm_defines="${tm_defines} MIPS_ISA_DEFAULT=33 MIPS_ABI_DEFAULT=ABI_EABI" - use_fixproto=yes - ;; +mipsisa32-*-elf* | mipsisa32el-*-elf* | \ +mipsisa32r2-*-elf* | mipsisa32r2el-*-elf* | \ mipsisa64-*-elf* | mipsisa64el-*-elf*) tm_file="elfos.h ${tm_file} mips/elf.h" tmake_file=mips/t-isa3264 - target_cpu_default="MASK_64BIT|MASK_FLOAT64" - tm_defines="${tm_defines} MIPS_ISA_DEFAULT=64 MIPS_ABI_DEFAULT=ABI_EABI" - use_fixproto=yes + case ${target} in + mipsisa32r2*) + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=33" + ;; + mipsisa32*) + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=32" + ;; + mipsisa64*) + tm_defines="${tm_defines} MIPS_ISA_DEFAULT=64" + ;; + esac + case ${target} in + mipsisa32*-*-elfoabi*) + tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_32" + tm_file="${tm_file} mips/elfoabi.h" + ;; + mipsisa64*-*-elfoabi*) + tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_O64" + tm_file="${tm_file} mips/elfoabi.h" + ;; + *-*-elf*) + tm_defines="${tm_defines} MIPS_ABI_DEFAULT=ABI_EABI" + ;; + esac ;; mipsisa64sr71k-*-elf*) tm_file="elfos.h ${tm_file} mips/elf.h" diff --git a/gcc/config/mips/elfoabi.h b/gcc/config/mips/elfoabi.h new file mode 100644 index 00000000000..a6cffe101e7 --- /dev/null +++ b/gcc/config/mips/elfoabi.h @@ -0,0 +1,41 @@ +/* Target macros for mips*-elf targets that selected between o32 and o64 + based on the target architecture. + Copyright (C) 1994, 1997, 1999, 2000, 2002, 2003, 2004 + 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 2, 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 COPYING. If not, write to +the Free Software Foundation, 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ + +#define DRIVER_SELF_SPECS \ + /* Infer a -mips option from a -march option. This makes \ + -march pick the right multilib, and also makes the later \ + specs easier to write. */ \ + MIPS_ISA_LEVEL_SPEC, \ + \ + /* If no architecture option is specified, force the default to \ + be listed explicitly. This too makes later specs easier to \ + write. */ \ + "%{" MIPS_ISA_LEVEL_OPTION_SPEC ":;: -" MULTILIB_ISA_DEFAULT "}", \ + \ + /* If no ABI option is specified, infer one from the ISA level \ + or -mgp setting. */ \ + "%{!mabi=*: %{mips1|mips2|mips32*|mgp32: -mabi=32;: -mabi=o64}}", \ + \ + /* Remove a redundant -mfp64 for -mabi=o64; we want the !mfp64 \ + multilibs. There's no need to check whether the architecture \ + is 64-bit; cc1 will complain if it isn't. */ \ + "%{mabi=o64: %<mfp64}" diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 0e90d030d34..ffd91306877 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -561,6 +561,29 @@ extern const struct mips_rtx_cost_data *mips_cost; #endif #endif +/* A spec condition that matches all non-mips16 -mips arguments. */ + +#define MIPS_ISA_LEVEL_OPTION_SPEC \ + "mips1|mips2|mips3|mips4|mips32*|mips64*" + +/* A spec condition that matches all non-mips16 architecture arguments. */ + +#define MIPS_ARCH_OPTION_SPEC \ + MIPS_ISA_LEVEL_OPTION_SPEC "|march=*" + +/* A spec that infers a -mips argument from an -march argument. */ + +#define MIPS_ISA_LEVEL_SPEC \ + "%{" MIPS_ISA_LEVEL_OPTION_SPEC ":;: \ + %{march=mips1|march=r2000|march=r3000|march=r3900:-mips1} \ + %{march=mips2|march=r6000:-mips2} \ + %{march=mips3|march=r4*|march=vr4*|march=orion:-mips3} \ + %{march=mips4|march=r8000|march=vr5*|march=rm7000|march=rm9000:-mips4} \ + %{march=mips32|march=4kc|march=4km|march=4kp:-mips32} \ + %{march=mips32r2|march=m4k|march=4ke*|march=24k* \ + |march=34k*|march=74k*: -mips32r2} \ + %{march=mips64|march=5k*|march=20k*|march=sb1*|march=sr71000: -mips64}}" + /* Support for a compile-time default CPU, et cetera. The rules are: --with-arch is ignored if -march is specified or a -mips is specified (other than -mips16). @@ -571,7 +594,7 @@ extern const struct mips_rtx_cost_data *mips_cost; --with-divide is ignored if -mdivide-traps or -mdivide-breaks are specified. */ #define OPTION_DEFAULT_SPECS \ - {"arch", "%{!march=*:%{mips16:-march=%(VALUE)}%{!mips*:-march=%(VALUE)}}" }, \ + {"arch", "%{" MIPS_ARCH_OPTION_SPEC ":;: -march=%(VALUE)}" }, \ {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \ {"abi", "%{!mabi=*:-mabi=%(VALUE)}" }, \ {"float", "%{!msoft-float:%{!mhard-float:-m%(VALUE)-float}}" }, \ diff --git a/gcc/config/mips/t-isa3264 b/gcc/config/mips/t-isa3264 index be1fc867540..fb5a55da8fb 100644 --- a/gcc/config/mips/t-isa3264 +++ b/gcc/config/mips/t-isa3264 @@ -36,8 +36,18 @@ TARGET_LIBGCC2_CFLAGS = -G 0 # Build the libraries for both hard and soft floating point +ifneq ($(filter MIPS_ABI_DEFAULT=ABI_EABI,$(tm_defines)),) MULTILIB_OPTIONS = msoft-float EL/EB mips32/mips32r2/mips64 MULTILIB_DIRNAMES = soft-float el eb mips32 mips32r2 mips64 +else +MULTILIB_OPTIONS = msoft-float/mfp64 EL/EB mips32/mips32r2/mips64 +MULTILIB_DIRNAMES = soft-float fp64 el eb mips32 mips32r2 mips64 +ifneq ($(filter MIPS_ISA_DEFAULT=33,$(tm_defines)),) +MULTILIB_EXCLUSIONS = mips32/mfp64 mips64/mfp64 +else +MULTILIB_EXCLUSIONS = !mips32r2/mfp64 +endif +endif MULTILIB_MATCHES = EL=mel EB=meb EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o |