]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
arc: Put DBNZ instruction to a separate class
authorYuriy Kolerov <Yuriy.Kolerov@synopsys.com>
Fri, 9 Feb 2024 14:27:06 +0000 (14:27 +0000)
committerShahab Vahedi <shahab@synopsys.com>
Wed, 14 Feb 2024 10:36:52 +0000 (11:36 +0100)
commitc0852af0565c7a83e17f1358fac52a68e7047002
tree861a4d3a8af806ff9a16bd7608e4dc8d8b9e5782
parentb235e90e740aa486e6bbe8243eedf109fed41a5c
arc: Put DBNZ instruction to a separate class

DBNZ instruction decrements its source register operand, and if
the result is non-zero it branches to the location defined by a signed
half-word displacement operand.

DBNZ instruction is in BRANCH class as other branch instrucitons
like B, Bcc, etc. However, DBNZ is the only branch instruction
that stores a branch offset in the second operand. Thus it must
be placed in a distinct class and treated differently.

For example, current logic of arc_insn_get_branch_target in GDB
assumes that a branch offset is always stored in the first operand
for BRANCH class and it's wrong for DBNZ.

include/ChangeLog:

2024-02-14  Yuriy Kolerov  <ykolerov@synopsys.com>

* opcode/arc.h (enum insn_class_t): Add DBNZ class.

opcodes/ChangeLog:

2024-02-14  Yuriy Kolerov  <ykolerov@synopsys.com>

* arc-tbl.h (dbnz): Use "DBNZ" class.
* arc-dis.c (arc_opcode_to_insn_type): Handle "DBNZ" class.

gas/ChangeLog:

2024-02-14  Yuriy Kolerov  <ykolerov@synopsys.com>

* config/tc-arc.c (is_br_jmp_insn_p): Add check against "DBNZ".
gas/ChangeLog
gas/config/tc-arc.c
include/ChangeLog
include/opcode/arc.h
opcodes/ChangeLog
opcodes/arc-dis.c
opcodes/arc-tbl.h