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,

>> Where are the error messages ?  If error_explicit_parallel_conflicts
>> is true, then shouldn't an error message be generated rather than a
>> warning ?
> If error_explicit_parallel_conflicts is true, then any error will happen any
> where.
>
>> > +   if ( check_outputs && !error_explicit_parallel_conflicts )
>> > +     return 0;
>>
>> What is the purpose of this ?  It appears to mean that if
>> error_explicit_parallel_conflicts is not true, then the code will not
>> check for parallel conflicts, even if warn_explicit_parallel_conflicts
>> it true.
> This means that if error_explicit_parallel_conflicts is not true,
> then the code will not check for any parallel conflicts.
> This code will be wrong for general users, but we use it for error case
> to test of  developing chips. (same destination register .etc)
> If they use -no-error-explicit-parallel-conflicts option, the code will not
> work.
>
> The case of parallel warning works correctly.
>     mv r1,r0 || mv r2,r1
> Warning: output of 1st instruction is the same as an input to  2nd
> instruction - is this intentional?
>
> The case of parallel error doesn't work.
>     mv r1,r0 || mv r1,r2
> Error: Instructions write to the same destination register.


I am sorry, but I still do not understand this.  Surely the assembler
is generating the correct error message for the "mv r1,r0 || mv r1,r2"
test ?  The two move instructions are writing to the same destination
register.

At the moment, (without applying your latest patches) I get the
following (slightly trimmed) results when compiling this test program:

  % cat parallel.s
	.text
	.global parallel
  parallel:
	mv r1,r0 || mv r2,r1
	mv r1,r0 || mv r1,r2

  % m32r-elf-gas parallel.s -m32rx
  parallel.s:4: Error: mv r1,r0||mv r2,r1: output of 1st instruction is the same as an input to 2nd instruction
  parallel.s:5: Error: 'mv r1,r0||mv r1,r2': Instructions write to the same destination register.

  % m32r-elf-gas parallel.s -m32rx -Ep
  parallel.s:4: Error: mv r1,r0||mv r2,r1: output of 1st instruction is the same as an input to 2nd instruction
  parallel.s:5: Error: 'mv r1,r0||mv r1,r2': Instructions write to the same destination register.

  % m32r-elf-gas parallel.s -m32rx -Enp
  parallel.s:5: Error: 'mv r1,r0||mv r1,r2': Instructions write to the same destination register.

  % m32r-elf-gas parallel.s -m32rx -Wp
  parallel.s:4: Warning: mv r1,r0||mv r2,r1: output of 1st instruction is the same as an input to 2nd instruction
  parallel.s:5: Error: 'mv r1,r0||mv r1,r2': Instructions write to the same destination register.

  % m32r-elf-gas parallel.s -m32rx -Wnp
  parallel.s:5: Error: 'mv r1,r0||mv r1,r2': Instructions write to the same destination register.

This appears to be correct to me.  In all case the move instructions
at line 5 are flagged as an error.  By default the move instructions
at line 4 are also flagged as errors, but if the -Enp or -Wnp switches
are used they are ignored and if the -Wp switch is used, they are
flagged as a warning, not an error.

How do you think that the assembler should behave ?

Cheers
        Nick
        


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