gcc/
authorRichard Sandiford <richard@codesourcery.com>
Mon, 2 Jul 2007 10:11:56 +0000 (10:11 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 2 Jul 2007 10:11:56 +0000 (10:11 +0000)
* 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

gcc/ChangeLog
gcc/config.gcc
gcc/config/mips/elfoabi.h [new file with mode: 0644]
gcc/config/mips/mips.h
gcc/config/mips/t-isa3264

index 31e1b425bea975f91a8d22127784451518d946e1..f1452ac2a195c88de7ab2061a65e728f4708490d 100644 (file)
@@ -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 ...
index 9700c046e3ced42596b4348ebc37bfaae907ba5f..d3358c3fad430ece1de87ece073a3ada42a08b0b 100644 (file)
@@ -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 (file)
index 0000000..a6cffe1
--- /dev/null
@@ -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}"
index 0e90d030d3478d9c0538ab8d95b87cded38082fc..ffd913068770e519dc8fd73a1cc57c7d484a0d1b 100644 (file)
@@ -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}}" }, \
index be1fc867540f09a02036dde49015834110e0a15b..fb5a55da8fb92593c3b02f4e7d8e8dc3994b0e0f 100644 (file)
@@ -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