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]
Other format: [Raw text]

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
  
        


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