This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: [PATCH] Add new model m32r2 of Renesas M32R.
Hi Kazuhiro,
>> % m32r-elf-gas -m32rx -Ep parallel.s
>> parallel.s:4: Warning: mv r1,r0||mv r2,r1: output of 1st instruction \
>> is the same as an input to 2nd instruction - is this intentional ?
>>
>> In this case an output file is produced. This shows how the -Ep
>> no longer has any affect on the warning message about input and output
>> operands overlapping. I believe that this is what you wanted ?
> In this case I don't want to show the warning message.
Ah - OK now I understand.
In which case I will apply the patch below, which is very similar to
the patch I posted yesterday, except that I have renamed the variable
"error_explicit_parallel_conflicts" to "ignore_parallel_conflicts" to
indicate that this variable now suppress all checks for parallel
constraint violations, not just those associated with both
instructions writing to the same destination register.
Cheers
Nick
gas/ChangeLog
2003-12-17 Nick Clifton <nickc@redhat.com>
* config/tc-m32r.c (error_explicit_parallel_conflicts): Rename
to 'ignore_parallel_conflicts'.
(md_longopts): Change option names as well.
(md_parse_option): Separate the warn_explicit and ignore
parallel conflicts options.
(md_show_usage): Update descriptions of these options.
(first_writes_to_seconds_operands): Do not run this check if
ignoring parallel conflicts.
(assemble_two_insns): Remove code that checked
error_explicit_parallel_conflicts.
* doc/c-m32r.texi: Update descriptions of the options.
gas/testsuite/ChangeLog
2003-12-17 Nick Clifton <nickc@redhat.com>
* gas/m32r/error.exp: Add parallel.s
* gas/m32r/parallel.s: New file: Test warning and error
messages produced for parallel conflicts.
Index: gas/config/tc-m32r.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-m32r.c,v
retrieving revision 1.32
diff -c -3 -p -r1.32 tc-m32r.c
*** gas/config/tc-m32r.c 3 Dec 2003 17:38:45 -0000 1.32
--- gas/config/tc-m32r.c 17 Dec 2003 09:33:12 -0000
*************** static int enable_special_float = 0;
*** 116,124 ****
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 insns can be made parallel. */
static int use_parallel = 1;
--- 116,127 ----
instruction might have constraint violations. */
static int warn_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;
*************** const char *md_shortopts = M32R_SHORTOPT
*** 197,218 ****
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)
{"m32r", no_argument, NULL, OPTION_M32R},
{"m32rx", no_argument, NULL, OPTION_M32RX},
{"m32r2", no_argument, NULL, OPTION_M32R2},
--- 200,221 ----
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_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},
*************** struct option md_longopts[] =
*** 226,235 ****
{"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},
{"hidden", no_argument, NULL, OPTION_SPECIAL},
{"bitinst", no_argument, NULL, OPTION_SPECIAL_M32R},
{"float", no_argument, NULL, OPTION_SPECIAL_FLOAT},
--- 229,238 ----
{"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},
! {"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},
*************** md_parse_option (c, arg)
*** 318,339 ****
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;
break;
! case OPTION_NO_ERROR_PARALLEL:
! error_explicit_parallel_conflicts = 0;
! warn_explicit_parallel_conflicts = 0;
break;
case OPTION_SPECIAL:
--- 321,338 ----
case OPTION_WARN_PARALLEL:
warn_explicit_parallel_conflicts = 1;
break;
case OPTION_NO_WARN_PARALLEL:
warn_explicit_parallel_conflicts = 0;
break;
! case OPTION_IGNORE_PARALLEL:
! ignore_parallel_conflicts = 1;
break;
! case OPTION_NO_IGNORE_PARALLEL:
! ignore_parallel_conflicts = 0;
break;
case OPTION_SPECIAL:
*************** md_show_usage (stream)
*** 406,432 ****
fprintf (stream, _("\
-warn-explicit-parallel-conflicts warn when parallel instructions\n"));
fprintf (stream, _("\
! violate contraints\n"));
fprintf (stream, _("\
-no-warn-explicit-parallel-conflicts do not warn when parallel\n"));
fprintf (stream, _("\
! instructions 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"));
fprintf (stream, _("\
! violate contraints\n"));
fprintf (stream, _("\
! -no-error-explicit-parallel-conflicts do not error when parallel\n"));
fprintf (stream, _("\
! instructions violate contraints\n"));
fprintf (stream, _("\
! -Ep synonym for -error-explicit-parallel-conflicts\n"));
fprintf (stream, _("\
! -Enp synonym for -no-error-explicit-parallel-conflicts\n"));
fprintf (stream, _("\
-warn-unmatched-high warn when an (s)high reloc has no matching low reloc\n"));
--- 405,431 ----
fprintf (stream, _("\
-warn-explicit-parallel-conflicts warn when parallel instructions\n"));
fprintf (stream, _("\
! might violate contraints\n"));
fprintf (stream, _("\
-no-warn-explicit-parallel-conflicts do not warn when parallel\n"));
fprintf (stream, _("\
! 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, _("\
! -ignore-parallel-conflicts do not check parallel instructions\n"));
fprintf (stream, _("\
! fo contraint violations\n"));
fprintf (stream, _("\
! -no-ignore-parallel-conflicts check parallel instructions for\n"));
fprintf (stream, _("\
! contraint violations\n"));
fprintf (stream, _("\
! -Ip synonym for -ignore-parallel-conflicts\n"));
fprintf (stream, _("\
! -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"));
*************** first_writes_to_seconds_operands (a, b,
*** 756,761 ****
--- 755,763 ----
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'. */
*************** can_make_parallel (a, b)
*** 870,876 ****
abort ();
if (first_writes_to_seconds_operands (a, b, TRUE))
! 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);
--- 872,878 ----
abort ();
if (first_writes_to_seconds_operands (a, b, TRUE))
! 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);
*************** assemble_two_insns (str, str2, parallel_
*** 1154,1170 ****
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);
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);
}
if (!parallel_p
--- 1156,1168 ----
if (parallel_p && warn_explicit_parallel_conflicts)
{
if (first_writes_to_seconds_operands (&first, &second, FALSE))
/* xgettext:c-format */
! 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 */
! as_warn (_("%s: output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?"), str2);
}
if (!parallel_p
Index: gas/doc/c-m32r.texi
===================================================================
RCS file: /cvs/src/src/gas/doc/c-m32r.texi,v
retrieving revision 1.7
diff -c -3 -p -r1.7 c-m32r.texi
*** gas/doc/c-m32r.texi 3 Dec 2003 17:38:46 -0000 1.7
--- gas/doc/c-m32r.texi 17 Dec 2003 09:33:13 -0000
*************** questionable parallel instructions are e
*** 119,145 ****
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}
option.
! @item -Enp
! @cindex @samp{-Enp} option, M32RX
! This is a shorter synonym for the @emph{-no-error-explicit-parallel-conflicts}
option.
@item -warn-unmatched-high
--- 119,144 ----
This is a shorter synonym for the @emph{-no-warn-explicit-parallel-conflicts}
option.
! @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 -nIp
! @cindex @samp{-nIp} option, M32RX
! This is a shorter synonym for the @emph{-no-ignore-parallel-conflicts}
option.
@item -warn-unmatched-high
Index: gas/testsuite/gas/m32r/error.exp
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/m32r/error.exp,v
retrieving revision 1.1
diff -c -3 -p -r1.1 error.exp
*** gas/testsuite/gas/m32r/error.exp 5 Oct 1999 01:27:35 -0000 1.1
--- gas/testsuite/gas/m32r/error.exp 17 Dec 2003 09:33:14 -0000
*************** if [istarget m32r-*-*] {
*** 9,14 ****
--- 9,15 ----
dg-runtest "$srcdir/$subdir/wrongsize.s" "" ""
dg-runtest "$srcdir/$subdir/interfere.s" "" ""
dg-runtest "$srcdir/$subdir/outofrange.s" "" ""
+ dg-runtest "$srcdir/$subdir/parallel.s" "" ""
dg-finish