MIPS/opcodes: Fix alias annotation for branch instructions
authorMaciej W. Rozycki <macro@orcam.me.uk>
Sun, 6 Mar 2022 18:30:58 +0000 (18:30 +0000)
committerMaciej W. Rozycki <macro@orcam.me.uk>
Sun, 6 Mar 2022 18:30:58 +0000 (18:30 +0000)
commitd17e797f5c67d3b73de0e387a83134add2b444fe
tree7abbda0f4ffb2b779a8537d0baa6162beb570d94
parent13835d88dc51497b9bd68dc1f394ca0de099a380
MIPS/opcodes: Fix alias annotation for branch instructions

Correct issues with INSN2_ALIAS annotation for branch instructions:

- regular MIPS BEQZ/L and BNEZ/L assembly instructions are idioms for
  BEQ/L and BNE/L respectively with the `rs' operand equal to $0,

- microMIPS 32-bit BEQZ and BNEZ assembly instructions are idioms for
  BEQ and BNE respectively with the `rt' operand equal to $0,

- regular MIPS BAL assembly instruction is an idiom for architecture
  levels of up to the MIPSr5 ISA and a machine instruction on its own
  from the MIPSr6 ISA up.

Add missing annotation to BEQZ/L and BNEZ/L accordingly then and add a
new entry for BAL for the MIPSr6 ISA, correcting a disassembly bug:

$ mips-linux-gnu-objdump -m mips:isa64r6 -M no-aliases -d bal.o

bal.o:     file format elf32-tradlittlemips

Disassembly of section .text:

00000000 <foo>:
   0: 04110000  0x4110000
...
$

Add test cases accordingly.

Parts for regular MIPS BEQZ/L and BNEZ/L instructions from Sagar Patel.

2022-03-06  Maciej W. Rozycki  <macro@orcam.me.uk>

binutils/
* testsuite/binutils-all/mips/mips1-branch-alias.d: New test.
* testsuite/binutils-all/mips/mips1-branch-noalias.d: New test.
* testsuite/binutils-all/mips/mips2-branch-alias.d: New test.
* testsuite/binutils-all/mips/mips2-branch-noalias.d: New test.
* testsuite/binutils-all/mips/mips32r6-branch-alias.d: New test.
* testsuite/binutils-all/mips/mips32r6-branch-noalias.d: New
test.
* testsuite/binutils-all/mips/micromips-branch-alias.d: New
test.
* testsuite/binutils-all/mips/micromips-branch-noalias.d: New
test.
* testsuite/binutils-all/mips/mips-branch-alias.s: New test
source.
* testsuite/binutils-all/mips/micromips-branch-alias.s: New test
source.
* testsuite/binutils-all/mips/mips.exp: Run the new tests.

2022-03-06  Sagar Patel  <sagarmp@cs.unc.edu>
    Maciej W. Rozycki  <macro@orcam.me.uk>

opcodes/
* mips-opc.c (mips_builtin_opcodes): Fix INSN2_ALIAS annotation
for "bal", "beqz", "beqzl", "bnez" and "bnezl" instructions.
* micromips-opc.c (micromips_opcodes): Likewise for "beqz" and
"bnez" instructions.
15 files changed:
binutils/ChangeLog
binutils/testsuite/binutils-all/mips/micromips-branch-alias.d [new file with mode: 0644]
binutils/testsuite/binutils-all/mips/micromips-branch-alias.s [new file with mode: 0644]
binutils/testsuite/binutils-all/mips/micromips-branch-noalias.d [new file with mode: 0644]
binutils/testsuite/binutils-all/mips/mips-branch-alias.s [new file with mode: 0644]
binutils/testsuite/binutils-all/mips/mips.exp
binutils/testsuite/binutils-all/mips/mips1-branch-alias.d [new file with mode: 0644]
binutils/testsuite/binutils-all/mips/mips1-branch-noalias.d [new file with mode: 0644]
binutils/testsuite/binutils-all/mips/mips2-branch-alias.d [new file with mode: 0644]
binutils/testsuite/binutils-all/mips/mips2-branch-noalias.d [new file with mode: 0644]
binutils/testsuite/binutils-all/mips/mips32r6-branch-alias.d [new file with mode: 0644]
binutils/testsuite/binutils-all/mips/mips32r6-branch-noalias.d [new file with mode: 0644]
opcodes/ChangeLog
opcodes/micromips-opc.c
opcodes/mips-opc.c