instruction might have constraint violations. */
static int warn_explicit_parallel_conflicts = 1;
-/* Non-zero if the programmer should receive an error message when an
- explicit parallel instruction might have constraint violations. */
-static int error_explicit_parallel_conflicts = 1;
+/* Non-zero if the programmer should not receive any messages about
+ parallel instruction with potential or real constraint violations.
+ The ability to suppress these messages is intended only for hardware
+ vendors testing the chip. It superceedes
+ warn_explicit_parallel_conflicts. */
+static int ignore_parallel_conflicts = 0;
/* Non-zero if insns can be made parallel. */
static int use_parallel = 1;
struct option md_longopts[] =
{
-#define OPTION_M32R (OPTION_MD_BASE)
-#define OPTION_M32RX (OPTION_M32R + 1)
-#define OPTION_M32R2 (OPTION_M32RX + 1)
-#define OPTION_BIG (OPTION_M32R2 + 1)
-#define OPTION_LITTLE (OPTION_BIG + 1)
-#define OPTION_PARALLEL (OPTION_LITTLE + 1)
-#define OPTION_NO_PARALLEL (OPTION_PARALLEL + 1)
-#define OPTION_WARN_PARALLEL (OPTION_NO_PARALLEL + 1)
-#define OPTION_NO_WARN_PARALLEL (OPTION_WARN_PARALLEL + 1)
-#define OPTION_ERROR_PARALLEL (OPTION_NO_WARN_PARALLEL + 1)
-#define OPTION_NO_ERROR_PARALLEL (OPTION_ERROR_PARALLEL + 1)
-#define OPTION_SPECIAL (OPTION_NO_ERROR_PARALLEL + 1)
-#define OPTION_SPECIAL_M32R (OPTION_SPECIAL + 1)
-#define OPTION_SPECIAL_FLOAT (OPTION_SPECIAL_M32R + 1)
-#define OPTION_WARN_UNMATCHED (OPTION_SPECIAL_FLOAT + 1)
-#define OPTION_NO_WARN_UNMATCHED (OPTION_WARN_UNMATCHED + 1)
+#define OPTION_M32R (OPTION_MD_BASE)
+#define OPTION_M32RX (OPTION_M32R + 1)
+#define OPTION_M32R2 (OPTION_M32RX + 1)
+#define OPTION_BIG (OPTION_M32R2 + 1)
+#define OPTION_LITTLE (OPTION_BIG + 1)
+#define OPTION_PARALLEL (OPTION_LITTLE + 1)
+#define OPTION_NO_PARALLEL (OPTION_PARALLEL + 1)
+#define OPTION_WARN_PARALLEL (OPTION_NO_PARALLEL + 1)
+#define OPTION_NO_WARN_PARALLEL (OPTION_WARN_PARALLEL + 1)
+#define OPTION_IGNORE_PARALLEL (OPTION_NO_WARN_PARALLEL + 1)
+#define OPTION_NO_IGNORE_PARALLEL (OPTION_IGNORE_PARALLEL + 1)
+#define OPTION_SPECIAL (OPTION_NO_IGNORE_PARALLEL + 1)
+#define OPTION_SPECIAL_M32R (OPTION_SPECIAL + 1)
+#define OPTION_SPECIAL_FLOAT (OPTION_SPECIAL_M32R + 1)
+#define OPTION_WARN_UNMATCHED (OPTION_SPECIAL_FLOAT + 1)
+#define OPTION_NO_WARN_UNMATCHED (OPTION_WARN_UNMATCHED + 1)
{"m32r", no_argument, NULL, OPTION_M32R},
{"m32rx", no_argument, NULL, OPTION_M32RX},
{"m32r2", no_argument, NULL, OPTION_M32R2},
{"Wp", no_argument, NULL, OPTION_WARN_PARALLEL},
{"no-warn-explicit-parallel-conflicts", no_argument, NULL, OPTION_NO_WARN_PARALLEL},
{"Wnp", no_argument, NULL, OPTION_NO_WARN_PARALLEL},
- {"error-explicit-parallel-conflicts", no_argument, NULL, OPTION_ERROR_PARALLEL},
- {"Ep", no_argument, NULL, OPTION_ERROR_PARALLEL},
- {"no-error-explicit-parallel-conflicts", no_argument, NULL, OPTION_NO_ERROR_PARALLEL},
- {"Enp", no_argument, NULL, OPTION_NO_ERROR_PARALLEL},
+ {"ignore-parallel-conflicts", no_argument, NULL, OPTION_IGNORE_PARALLEL},
+ {"Ip", no_argument, NULL, OPTION_IGNORE_PARALLEL},
+ {"no-ignore-parallel-conflicts", no_argument, NULL, OPTION_NO_IGNORE_PARALLEL},
+ {"nIp", no_argument, NULL, OPTION_NO_IGNORE_PARALLEL},
{"hidden", no_argument, NULL, OPTION_SPECIAL},
{"bitinst", no_argument, NULL, OPTION_SPECIAL_M32R},
{"float", no_argument, NULL, OPTION_SPECIAL_FLOAT},
case OPTION_WARN_PARALLEL:
warn_explicit_parallel_conflicts = 1;
- error_explicit_parallel_conflicts = 0;
break;
case OPTION_NO_WARN_PARALLEL:
warn_explicit_parallel_conflicts = 0;
- error_explicit_parallel_conflicts = 0;
break;
- case OPTION_ERROR_PARALLEL:
- warn_explicit_parallel_conflicts = 1;
- error_explicit_parallel_conflicts = 1;
+ case OPTION_IGNORE_PARALLEL:
+ ignore_parallel_conflicts = 1;
break;
- case OPTION_NO_ERROR_PARALLEL:
- error_explicit_parallel_conflicts = 0;
- warn_explicit_parallel_conflicts = 0;
+ case OPTION_NO_IGNORE_PARALLEL:
+ ignore_parallel_conflicts = 0;
break;
case OPTION_SPECIAL:
fprintf (stream, _("\
-warn-explicit-parallel-conflicts warn when parallel instructions\n"));
fprintf (stream, _("\
- violate contraints\n"));
+ might violate contraints\n"));
fprintf (stream, _("\
-no-warn-explicit-parallel-conflicts do not warn when parallel\n"));
fprintf (stream, _("\
- instructions violate contraints\n"));
+ instructions might violate contraints\n"));
fprintf (stream, _("\
-Wp synonym for -warn-explicit-parallel-conflicts\n"));
fprintf (stream, _("\
-Wnp synonym for -no-warn-explicit-parallel-conflicts\n"));
fprintf (stream, _("\
- -error-explicit-parallel-conflicts error when parallel instructions\n"));
+ -ignore-parallel-conflicts do not check parallel instructions\n"));
fprintf (stream, _("\
- violate contraints\n"));
+ fo contraint violations\n"));
fprintf (stream, _("\
- -no-error-explicit-parallel-conflicts do not error when parallel\n"));
+ -no-ignore-parallel-conflicts check parallel instructions for\n"));
fprintf (stream, _("\
- instructions violate contraints\n"));
+ contraint violations\n"));
fprintf (stream, _("\
- -Ep synonym for -error-explicit-parallel-conflicts\n"));
+ -Ip synonym for -ignore-parallel-conflicts\n"));
fprintf (stream, _("\
- -Enp synonym for -no-error-explicit-parallel-conflicts\n"));
+ -nIp synonym for -no-ignore-parallel-conflicts\n"));
fprintf (stream, _("\
-warn-unmatched-high warn when an (s)high reloc has no matching low reloc\n"));
const CGEN_OPINST *b_ops = CGEN_INSN_OPERANDS (b->insn);
int a_index;
+ if (ignore_parallel_conflicts)
+ return 0;
+
/* If at least one of the instructions takes no operands, then there is
nothing to check. There really are instructions without operands,
eg 'nop'. */
abort ();
if (first_writes_to_seconds_operands (a, b, TRUE))
- return _("Instructions write to the same destination register.");
+ return _("instructions write to the same destination register.");
a_pipe = CGEN_INSN_ATTR_VALUE (a->insn, CGEN_INSN_PIPE);
b_pipe = CGEN_INSN_ATTR_VALUE (b->insn, CGEN_INSN_PIPE);
if (parallel_p && warn_explicit_parallel_conflicts)
{
- void (* func)(const char *, ...);
-
- func = error_explicit_parallel_conflicts ? as_bad : as_warn;
-
if (first_writes_to_seconds_operands (&first, &second, FALSE))
/* xgettext:c-format */
- func (_("%s: output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?"), str2);
+ as_warn (_("%s: output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?"), str2);
if (first_writes_to_seconds_operands (&second, &first, FALSE))
/* xgettext:c-format */
- func (_("%s: output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?"), str2);
+ as_warn (_("%s: output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?"), str2);
}
if (!parallel_p
This is a shorter synonym for the @emph{-no-warn-explicit-parallel-conflicts}
option.
-@item -error-explicit-parallel-conflicts
-@cindex @samp{-error-explicit-parallel-conflicts} option, M32RX
-This option performs the same thing as the
-@emph{-warn-explicit-parallel-conflicts} expcept that instead of
-warning messages being produced, error messages will be produced. If
-any error messages are generated then GAS will not produce an output
-file.
-
-@item -no-error-explicit-parallel-conflicts
-@cindex @samp{-no-error-explicit-parallel-conflicts} option, M32RX
-This option disables a previously enabled
-@emph{-error-explicit-parallel-conflicts} option.
-
-@item -Ep
-@cindex @samp{-Ep} option, M32RX
-This is a shorter synonym for the @emph{-error-explicit-parallel-conflicts}
+@item -ignore-parallel-conflicts
+@cindex @samp{-ignore-parallel-conflicts} option, M32RX
+This option tells the assembler's to stop checking parallel
+instructions for contraint violations. This ability is provided for
+hardware vendors testing chip designs and should not be used under
+normal circumstances.
+
+@item -no-ignore-parallel-conflicts
+@cindex @samp{-no-ignore-parallel-conflicts} option, M32RX
+This option restores the assembler's default behaviour of checking
+parallel instructions to detect constraint violations.
+
+@item -Ip
+@cindex @samp{-Ip} option, M32RX
+This is a shorter synonym for the @emph{-ignore-parallel-conflicts}
option.
-@item -Enp
-@cindex @samp{-Enp} option, M32RX
-This is a shorter synonym for the @emph{-no-error-explicit-parallel-conflicts}
+@item -nIp
+@cindex @samp{-nIp} option, M32RX
+This is a shorter synonym for the @emph{-no-ignore-parallel-conflicts}
option.
@item -warn-unmatched-high