[ARC] Update disassembler opcode selection

New instruction are added, and some of them are overlapping. Update
disassembler to correctly recognize them. Introduce nps400 option.

opcodes/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

	* arc-dis.c (skip_this_opcode): Check also for 0x07 major opcodes,
	and MPY class instructions.
	(parse_option): Add nps400 option.
	(print_arc_disassembler_options): Add nps400 info.

gas/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

	* testsuite/gas/arc/nps400-6.d: Update test.
This commit is contained in:
Claudiu Zissulescu 2019-07-24 16:52:23 +03:00
parent 7e126ba31a
commit 0f3f71676a
4 changed files with 35 additions and 2 deletions

View File

@ -1,3 +1,7 @@
2019-07-24 Claudiu Zissulescu <claziss@synopsys.com>
* testsuite/gas/arc/nps400-6.d: Update test.
2019-07-24 Alan Modra <amodra@gmail.com>
* config/obj-elf.c (obj_elf_section, obj_elf_type): Set has_gnu_osabi.

View File

@ -1,5 +1,5 @@
#as: -mcpu=arc700 -mnps400
#objdump: -dr
#objdump: -dr -Mnps400
.*: +file format .*arc.*

View File

@ -1,3 +1,10 @@
2019-07-24 Claudiu Zissulescu <claziss@synopsys.com>
* arc-dis.c (skip_this_opcode): Check also for 0x07 major opcodes,
and MPY class instructions.
(parse_option): Add nps400 option.
(print_arc_disassembler_options): Add nps400 info.
2019-07-24 Claudiu Zissulescu <claziss@synopsys.com>
* arc-ext-tbl.h (bspeek): Remove it, added to main table.

View File

@ -181,7 +181,9 @@ skip_this_opcode (const struct arc_opcode *opcode)
/* Check opcode for major 0x06, return if it is not in. */
if (arc_opcode_len (opcode) == 4
&& OPCODE_32BIT_INSN (opcode->opcode) != 0x06)
&& (OPCODE_32BIT_INSN (opcode->opcode) != 0x06
/* Can be an APEX extensions. */
&& OPCODE_32BIT_INSN (opcode->opcode) != 0x07))
return FALSE;
/* or not a known truble class. */
@ -190,6 +192,7 @@ skip_this_opcode (const struct arc_opcode *opcode)
case FLOAT:
case DSP:
case ARITH:
case MPY:
break;
default:
return FALSE;
@ -764,6 +767,23 @@ parse_option (const char *option)
else if (disassembler_options_cmp (option, "fpuda") == 0)
add_to_decodelist (FLOAT, DPA);
else if (disassembler_options_cmp (option, "nps400") == 0)
{
add_to_decodelist (ACL, NPS400);
add_to_decodelist (ARITH, NPS400);
add_to_decodelist (BITOP, NPS400);
add_to_decodelist (BMU, NPS400);
add_to_decodelist (CONTROL, NPS400);
add_to_decodelist (DMA, NPS400);
add_to_decodelist (DPI, NPS400);
add_to_decodelist (MEMORY, NPS400);
add_to_decodelist (MISC, NPS400);
add_to_decodelist (NET, NPS400);
add_to_decodelist (PMU, NPS400);
add_to_decodelist (PROTOCOL_DECODE, NPS400);
add_to_decodelist (ULTRAIP, NPS400);
}
else if (disassembler_options_cmp (option, "fpus") == 0)
{
add_to_decodelist (FLOAT, SP);
@ -1411,6 +1431,8 @@ with -M switch (multiple options should be separated by commas):\n"));
fprintf (stream, _("\
fpud Recognize double precision FPU instructions.\n"));
fprintf (stream, _("\
nps400 Recognize NPS400 instructions.\n"));
fprintf (stream, _("\
hex Use only hexadecimal number to print immediates.\n"));
}