Similar to <http://gcc.gnu.org/ml/gcc-patches/2011-04/msg00265.html>,
this patch converts legacy m68k options for non-ColdFire CPUs into
aliases for the corresponding -mcpu= options.  (Note that -mcpu32 is
an alias for -mcpu=68332 rather than -mcpu=cpu32, to match the old
code in m68k_handle_option.)  This significantly simplifies the
multilibs code in t-mlibs, since it no longer needs to handle those
old-style options (and all cases where two -mcpu= options get the same
multilib are already handled by the generic logic there rather than
needing to be listed specially).  The requirement for binutils 2.17 or
later (to support these options to the assembler) is documented.

Tested building cc1 and xgcc for cross to m68k-elf.  Will commit to
trunk in the absence of target maintainer objections.

2011-04-06  Joseph Myers  <jos...@codesourcery.com>

        * config/m68k/m68k.c (m68k_handle_option): Don't handle
        OPT_m68000, OPT_mc68000, OPT_m68010, OPT_m68020, OPT_mc68020,
        OPT_m68030, OPT_m68040, OPT_m68060, OPT_m68302, OPT_m68332 and
        OPT_mcpu32.
        * config/m68k/m68k.h (OPTION_DEFAULT_SPECS, ASM_CPU_SPEC): Don't
        handle -mc68000, -m68000, -m68302, -m68010, -mc68020, -m68020,
        -m68030, -m68040, -m68060, -mcpu32 and -m68332.
        * config/m68k/m68k.opt (m68000, m68010, m68020, m68030, m68040,
        m68060, m68302, m68332, mc68000, mc68020, mcpu32): Use Alias.
        * config/m68k/t-mlibs (CANONICALIZE_OPTIONS): Remove.
        (MULTILIB_OPTIONS): Don't use $(CANONICALIZE_OPTIONS).
        (MULTILIB_MATCHES): Map -march= options to corresponding -mcpu=
        options.  Don't map other m68k options manually.  Don't handle
        old-style options as canonical.
        (MULTILIB_EXCEPTIONS): Don't use $(CANONICALIZE_OPTIONS).
        * doc/install.texi (m68k-*-*): Document binutils version
        requirement.

Index: gcc/doc/install.texi
===================================================================
--- gcc/doc/install.texi        (revision 172035)
+++ gcc/doc/install.texi        (working copy)
@@ -3773,6 +3773,8 @@ be a @option{-mcpu} argument or one of t
 @samp{m68000}, @samp{m68010}, @samp{m68020}, @samp{m68030},
 @samp{m68040}, @samp{m68060}, @samp{m68020-40} and @samp{m68020-60}.
 
+GCC requires at least binutils version 2.17 on these targets.
+
 @html
 <hr />
 @end html
Index: gcc/config/m68k/t-mlibs
===================================================================
--- gcc/config/m68k/t-mlibs     (revision 172035)
+++ gcc/config/m68k/t-mlibs     (working copy)
@@ -45,15 +45,9 @@ ifeq ($(filter m$(M68K_MLIB_DEFAULT),$(M
 $(error Error default cpu '$(target_cpu_default)' is not in multilib set 
'$(M68K_MLIB_CPUS)')
 endif
 
-# Sed arguments that convert mcpu=* arguments into canonical forms.
-# We want to use the legacy m68* options instead of the new -mcpu=68*
-# options when compiling multilibs because the former are recognised
-# by older binutils.
-CANONICALIZE_OPTIONS = -e 's|mcpu=68|m68|g' -e 's|mcpu=cpu32|mcpu32|g'
-
 MULTILIB_DIRNAMES := $(filter-out m$(M68K_MLIB_DEFAULT),$(M68K_MLIB_CPUS))
 MULTILIB_OPTIONS := $(shell echo $(MULTILIB_DIRNAMES:m%=mcpu=%) \
-                     | sed -e 's| |/|g' $(CANONICALIZE_OPTIONS))
+                     | sed -e 's| |/|g' )
 
 # Add subtarget specific options & dirs.
 MULTILIB_DIRNAMES += $(M68K_MLIB_DIRNAMES)
@@ -62,14 +56,13 @@ MULTILIB_OPTIONS += $(M68K_MLIB_OPTIONS)
 MULTILIB_MATCHES :=
 
 ifneq ($(M68K_ARCH),cf)
-# Map the new-style options to the legacy m68k ones.
-MULTILIB_MATCHES += m68000=mcpu?68000 m68000=march?68000 m68000=mc68000 \
-                   m68000=m68302 \
-                   m68020=mcpu?68020 m68020=march?68020 m68020=mc68020 \
-                   m68030=mcpu?68030 m68030=march?68030 \
-                   m68040=mcpu?68040 m68040=march?68040 \
-                   m68060=mcpu?68060 m68060=march?68060 \
-                   mcpu32=mcpu?cpu32 mcpu32=march?cpu32 mcpu32=m68332
+# Map -march=* options to the representative -mcpu=* option.
+MULTILIB_MATCHES += mcpu?68000=march?68000 \
+                   mcpu?68020=march?68020 \
+                   mcpu?68030=march?68030 \
+                   mcpu?68040=march?68040 \
+                   mcpu?68060=march?68060 \
+                   mcpu?cpu32=march?cpu32
 endif
 
 ifneq ($(M68K_ARCH),m68k)
@@ -82,9 +75,7 @@ endif
 MULTILIB_MATCHES += \
   $(call M68K_AWK, \
         (CPU_NAME != MLIB) $(M68K_MLIB_CPU), \
-        (match(MLIB, "^68") || MLIB == "cpu32" \
-         ? "m"MLIB"=mcpu?"CPU_NAME \
-         : "mcpu?"MLIB"=mcpu?"CPU_NAME))
+        ("mcpu?"MLIB"=mcpu?"CPU_NAME))
 
 MULTILIB_EXCEPTIONS :=
 
@@ -102,9 +93,5 @@ endif
 MULTILIB_EXCEPTIONS := \
        $(patsubst mcpu=$(M68K_MLIB_DEFAULT)/%,%,$(MULTILIB_EXCEPTIONS))
 
-# Convert all options to canonical form.
-MULTILIB_EXCEPTIONS := $(shell echo $(MULTILIB_EXCEPTIONS) | \
-                        sed $(CANONICALIZE_OPTIONS))
-
 LIBGCC = stmp-multilib
 INSTALL_LIBGCC = install-multilib
Index: gcc/config/m68k/m68k.opt
===================================================================
--- gcc/config/m68k/m68k.opt    (revision 172035)
+++ gcc/config/m68k/m68k.opt    (working copy)
@@ -40,15 +40,15 @@ Target RejectNegative Alias(mcpu=, 5407)
 Generate code for a 5407
 
 m68000
-Target RejectNegative
+Target RejectNegative Alias(mcpu=, 68000)
 Generate code for a 68000
 
 m68010
-Target RejectNegative
+Target RejectNegative Alias(mcpu=, 68010)
 Generate code for a 68010
 
 m68020
-Target RejectNegative
+Target RejectNegative Alias(mcpu=, 68020)
 Generate code for a 68020
 
 m68020-40
@@ -60,23 +60,23 @@ Target RejectNegative
 Generate code for a 68060, without any new instructions
 
 m68030
-Target RejectNegative
+Target RejectNegative Alias(mcpu=, 68030)
 Generate code for a 68030
 
 m68040
-Target RejectNegative
+Target RejectNegative Alias(mcpu=, 68040)
 Generate code for a 68040
 
 m68060
-Target RejectNegative
+Target RejectNegative Alias(mcpu=, 68060)
 Generate code for a 68060
 
 m68302
-Target RejectNegative
+Target RejectNegative Alias(mcpu=, 68302)
 Generate code for a 68302
 
 m68332
-Target RejectNegative
+Target RejectNegative Alias(mcpu=, 68332)
 Generate code for a 68332
 
 ; Has no effect on gcc
@@ -101,11 +101,11 @@ Target Report Mask(BITFIELD)
 Use the bit-field instructions
 
 mc68000
-Target RejectNegative
+Target RejectNegative Alias(mcpu=, 68000)
 Generate code for a 68000
 
 mc68020
-Target RejectNegative
+Target RejectNegative Alias(mcpu=, 68020)
 Generate code for a 68020
 
 mcfv4e
@@ -117,7 +117,7 @@ Target RejectNegative Joined
 Specify the target CPU
 
 mcpu32
-Target RejectNegative
+Target RejectNegative Alias(mcpu=, 68332)
 Generate code for a cpu32
 
 mdiv
Index: gcc/config/m68k/m68k.c
===================================================================
--- gcc/config/m68k/m68k.c      (revision 172035)
+++ gcc/config/m68k/m68k.c      (working copy)
@@ -499,17 +499,6 @@ m68k_handle_option (struct gcc_options *
     case OPT_mtune_:
       return m68k_find_selection (&m68k_tune_entry, all_microarchs, arg);
 
-    case OPT_m68000:
-    case OPT_mc68000:
-      return m68k_find_selection (&m68k_cpu_entry, all_devices, "68000");
-
-    case OPT_m68010:
-      return m68k_find_selection (&m68k_cpu_entry, all_devices, "68010");
-
-    case OPT_m68020:
-    case OPT_mc68020:
-      return m68k_find_selection (&m68k_cpu_entry, all_devices, "68020");
-
     case OPT_m68020_40:
       return (m68k_find_selection (&m68k_tune_entry, all_microarchs,
                                   "68020-40")
@@ -520,22 +509,6 @@ m68k_handle_option (struct gcc_options *
                                   "68020-60")
              && m68k_find_selection (&m68k_cpu_entry, all_devices, "68020"));
 
-    case OPT_m68030:
-      return m68k_find_selection (&m68k_cpu_entry, all_devices, "68030");
-
-    case OPT_m68040:
-      return m68k_find_selection (&m68k_cpu_entry, all_devices, "68040");
-
-    case OPT_m68060:
-      return m68k_find_selection (&m68k_cpu_entry, all_devices, "68060");
-
-    case OPT_m68302:
-      return m68k_find_selection (&m68k_cpu_entry, all_devices, "68302");
-
-    case OPT_m68332:
-    case OPT_mcpu32:
-      return m68k_find_selection (&m68k_cpu_entry, all_devices, "68332");
-
     case OPT_mshared_library_id_:
       if (value > MAX_LIBRARY_ID)
        error ("-mshared-library-id=%s is not between 0 and %d",
Index: gcc/config/m68k/m68k.h
===================================================================
--- gcc/config/m68k/m68k.h      (revision 172035)
+++ gcc/config/m68k/m68k.h      (working copy)
@@ -30,9 +30,8 @@ along with GCC; see the file COPYING3.  
 
 /* Handle --with-cpu default option from configure script.  */
 #define OPTION_DEFAULT_SPECS                                           \
-  { "cpu",   "%{!mc68000:%{!m68000:%{!m68302:%{!m68010:%{!mc68020:%{!m68020:\
-%{!m68030:%{!m68040:%{!m68020-40:%{!m68020-60:%{!m68060:%{!mcpu32:%{!m68332:\
-%{!mcpu=*:%{!march=*:-%(VALUE)}}}}}}}}}}}}}}}" },
+  { "cpu",   "%{!m68020-40:%{!m68020-60:\
+%{!mcpu=*:%{!march=*:-%(VALUE)}}}}" },
 
 /* Pass flags to gas indicating which type of processor we have.  This
    can be simplified when we can rely on the assembler supporting .cpu
@@ -40,9 +39,7 @@ along with GCC; see the file COPYING3.  
 
 #define ASM_CPU_SPEC "\
 %{m68851}%{mno-68851} %{m68881}%{mno-68881} %{msoft-float:-mno-float} \
-%{m68000}%{m68302}%{mc68000}%{m68010}%{m68020}%{mc68020}%{m68030}\
-%{m68040}%{m68020-40:-m68040}%{m68020-60:-m68040}\
-%{m68060}%{mcpu32}%{m68332}\
+%{m68020-40:-m68040}%{m68020-60:-m68040}\
 %{mcpu=*:-mcpu=%*}%{march=*:-march=%*}\
 "
 #define ASM_PCREL_SPEC "%{fPIC|fpic|mpcrel:--pcrel} \

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to