This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [PATCH] MIPS gas: Allow simultan use of -mpu amd -mipsX again


Eric Christopher wrote:
> On 30 Jul 2001 11:12:48 +0200, Thiemo Seufer wrote:
> > Eric Christopher wrote:
> > > > As far as I understand, the -m<cpu> options are only useful when
> > > > they set both -march and -mtune to their value. Since I haven't found
> > > > a easy way to fix this, I introduced the warnings.
> > > 
> > > mips_arch = FOO;
> > > mips_tune = FOO;
> > > 
> > > or am I missing the point of this comment? :)
> > 
> > That is what I tried to say. :-)
> 
> Heh.  But I missed what you were really trying to say :)

Err, well, next try:

-m<FOO> sets both mips_arch and mips_tune, and is required to do so.
If there are conflicting options given, it's the usual strategy to
let the last option win. So if one of mips_arch and mips_tune is
changed by a later option, the other value should be adjusted
somehow, too, as long as it was set by an -m<FOO> immediately before.

To safeguard against all cases introduced with this logic is IMHO
way too complicated, and a warning about seemlingly unintended
use (indicated by different or conflicting -m<FOO>/-march/-tune/-mcpu)
is a good idea also.

> Anyhow, I believe that -m<FOO> and the -march/tune options should warn.
> IMHO the only reason that we should support the -m<FOO> at all is for
> gcc.

-mcpu should warn also, as in my patch. The warning for -m<FOO>
works there also, as long as it isn't given after an conflicting
option. It's easy to change this, what I did in the patch below.


Thiemo


2001-07-30  Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>

	/gas/ChangeLog
	* config/tc-mips.c (md_begin): Take -mcpu value into account even when
	-mipsX is specified. Make both -mcpu/-march and -mcpu/-mtune pairs
	mutually exclusive (if they are different).
	(md_parse_option): Warn if an -march/-mtune/-mcpu/-m<cpu> option is
	set more than once.


diff -BurPX /bigdisk/src/binutils-exclude src-orig/gas/config/tc-mips.c src/gas/config/tc-mips.c
--- src-orig/gas/config/tc-mips.c	Wed Jul  4 14:44:12 2001
+++ src/gas/config/tc-mips.c	Sun Jul 22 00:02:59 2001
@@ -939,6 +967,33 @@
   if (mips_opts.mips16 < 0)
     mips_opts.mips16 = target_cpu_had_mips16;
 
+  /* Backward compatibility for historic -mcpu= option.  Check for
+     incompatible options, warn if -mcpu is used.  */
+  if (mips_cpu != CPU_UNKNOWN
+      && mips_arch != CPU_UNKNOWN
+      && mips_cpu != mips_arch)
+    {
+      as_fatal (_("The -mcpu option can't be used together with -march. "
+		  "Use -mtune instead of -mcpu."));
+    }
+
+  if (mips_cpu != CPU_UNKNOWN
+      && mips_tune != CPU_UNKNOWN
+      && mips_cpu != mips_tune)
+    {
+      as_fatal (_("The -mcpu option can't be used together with -mtune. "
+		  "Use -march instead of -mcpu."));
+    }
+
+  if (mips_arch == CPU_UNKNOWN && mips_cpu != CPU_UNKNOWN)
+    {
+      ci = mips_cpu_info_from_cpu (mips_cpu);
+      assert (ci != NULL);
+      mips_arch = ci->cpu;
+      as_warn (_("The -mcpu option is deprecated.  Please use -march and "
+		 "-mtune instead."));
+    }
+
   /* At this point, mips_arch will either be CPU_UNKNOWN if no ARCH was
      specified on the command line, or some other value if one was.
      Similarly, mips_opts.isa will be ISA_UNKNOWN if not specified on
@@ -961,19 +1016,6 @@
       assert (ci != NULL);
       mips_arch = ci->cpu;
     }
-  else if (mips_arch == CPU_UNKNOWN
-	   && mips_opts.isa == ISA_UNKNOWN
-	   && mips_cpu != CPU_UNKNOWN)
-    {
-      /* Historic -mcpu= option.  Warn.  */
-      ci = mips_cpu_info_from_cpu (mips_cpu);
-      assert (ci != NULL);
-      mips_arch = ci->cpu;
-      mips_tune = ci->cpu;
-      mips_opts.isa = ci->isa;
-      as_warn (_("The -mcpu option is deprecated.  Please use -march and -mtune instead."));
-
-    }
   else
     {
       /* We need to set both ISA and ARCH from target cpu.  */
@@ -9080,18 +9219,31 @@
 	switch (c)
 	  {
 	  case OPTION_MTUNE:
+	    if (mips_tune != CPU_UNKNOWN && mips_tune != cpu)
+	      as_warn(_("A different -mtune= was already specified, is now "
+			"-mtune=%s"), arg);
 	    mips_tune = cpu;
 	    break;
 	  case OPTION_MARCH:
+	    if (mips_arch != CPU_UNKNOWN && mips_arch != cpu)
+	      as_warn(_("A different -march= was already specified, is now "
+			"-march=%s"), arg);
 	    mips_arch = cpu;
 	    break;
 	  case OPTION_MCPU:
+	    if (mips_cpu != CPU_UNKNOWN && mips_cpu != cpu)
+	      as_warn(_("A different -mcpu= was already specified, is now "
+			"-mcpu=%s"), arg);
 	    mips_cpu = cpu;
 	  }
       }
       break;
 
     case OPTION_M4650:
+      if ((mips_arch != CPU_UNKNOWN && mips_arch != CPU_R4650)
+	  || (mips_tune != CPU_UNKNOWN && mips_tune != CPU_R4650))
+        as_warn(_("A different -march= or -mtune= was already specified, "
+		  "is now -m4650"));
       mips_arch = CPU_R4650;
       mips_tune = CPU_R4650;
       break;
@@ -9100,6 +9252,10 @@
       break;
 
     case OPTION_M4010:
+      if ((mips_arch != CPU_UNKNOWN && mips_arch != CPU_R4010)
+	  || (mips_tune != CPU_UNKNOWN && mips_tune != CPU_R4010))
+        as_warn(_("A different -march= or -mtune= was already specified, "
+		  "is now -m4010"));
       mips_arch = CPU_R4010;
       mips_tune = CPU_R4010;
       break;
@@ -9108,6 +9264,10 @@
       break;
 
     case OPTION_M4100:
+      if ((mips_arch != CPU_UNKNOWN && mips_arch != CPU_VR4100)
+	  || (mips_tune != CPU_UNKNOWN && mips_tune != CPU_VR4100))
+        as_warn(_("A different -march= or -mtune= was already specified, "
+		  "is now -m4100"));
       mips_arch = CPU_VR4100;
       mips_tune = CPU_VR4100;
       break;
@@ -9116,6 +9276,10 @@
       break;
 
     case OPTION_M3900:
+      if ((mips_arch != CPU_UNKNOWN && mips_arch != CPU_R3900)
+	  || (mips_tune != CPU_UNKNOWN && mips_tune != CPU_R3900))
+        as_warn(_("A different -march= or -mtune= was already specified, "
+		  "is now -m3900"));
       mips_arch = CPU_R3900;
       mips_tune = CPU_R3900;
       break;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]