[binutils][arm] Implement Custom Datapath Extensions for MVE
authorMatthew Malcomson <matthew.malcomson@arm.com>
Mon, 10 Feb 2020 16:39:02 +0000 (16:39 +0000)
committerMatthew Malcomson <matthew.malcomson@arm.com>
Mon, 10 Feb 2020 16:50:14 +0000 (16:50 +0000)
commit5aae9ae97f65f6651cf91db856a1f8b4bef5e896
tree47e5e20c08d9b53251ea7b624a9aeec5ac23e61c
parent4934a27c8c1d5c8623366f5dbafae8af60b96bc0
[binutils][arm] Implement Custom Datapath Extensions for MVE

Here we implement the custom datapath extensions for MVE.

This required the following changes:

- Adding a new register argument type (that takes either an MVE vector or
  a Neon S or D register).
- Adding two new immediate operands types (0-127 and 0-4095).
- Using the Neon type machinery to distinguish between instruction
  types.  This required the introduction of new neon shapes to account
  for the coprocessor operands to these instructions.
- Adding a new disassembly character to `print_insn_cde` to handle the
  new register types.

Specification can be found at
https://developer.arm.com/docs/ddi0607/latest

Successfully regression tested on arm-none-eabi, and arm-wince-pe.

gas/ChangeLog:

2020-02-10  Matthew Malcomson  <matthew.malcomson@arm.com>

* config/tc-arm.c (NEON_MAX_TYPE_ELS): Increment to account for
instructions that can have 5 arguments.
(enum operand_parse_code): Add new operands.
(parse_operands): Account for new operands.
(S5): New macro.
(enum neon_shape_el): Introduce P suffixes for coprocessor.
(neon_select_shape): Account for P suffix.
(LOW1): Move macro to global position.
(HI4): Move macro to global position.
(vcx_assign_vec_d): New.
(vcx_assign_vec_m): New.
(vcx_assign_vec_n): New.
(enum vcx_reg_type): New.
(vcx_get_reg_type): New.
(vcx_size_pos): New.
(vcx_vec_pos): New.
(vcx_handle_shape): New.
(vcx_ensure_register_in_range): New.
(vcx_handle_register_arguments): New.
(vcx_handle_insn_block): New.
(vcx_handle_common_checks): New.
(do_vcx1): New.
(do_vcx2): New.
(do_vcx3): New.
* testsuite/gas/arm/cde-missing-fp.d: New test.
* testsuite/gas/arm/cde-missing-fp.l: New test.
* testsuite/gas/arm/cde-missing-mve.d: New test.
* testsuite/gas/arm/cde-missing-mve.l: New test.
* testsuite/gas/arm/cde-mve-or-neon.d: New test.
* testsuite/gas/arm/cde-mve-or-neon.s: New test.
* testsuite/gas/arm/cde-mve.s: New test.
* testsuite/gas/arm/cde-warnings.l:
* testsuite/gas/arm/cde-warnings.s:
* testsuite/gas/arm/cde.d:
* testsuite/gas/arm/cde.s:

opcodes/ChangeLog:

2020-02-10  Matthew Malcomson  <matthew.malcomson@arm.com>

* arm-dis.c (print_insn_cde): Define 'V' parse character.
(cde_opcodes): Add VCX* instructions.
15 files changed:
gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/gas/arm/cde-missing-fp.d [new file with mode: 0644]
gas/testsuite/gas/arm/cde-missing-fp.l [new file with mode: 0644]
gas/testsuite/gas/arm/cde-missing-mve.d [new file with mode: 0644]
gas/testsuite/gas/arm/cde-missing-mve.l [new file with mode: 0644]
gas/testsuite/gas/arm/cde-mve-or-neon.d [new file with mode: 0644]
gas/testsuite/gas/arm/cde-mve-or-neon.s [new file with mode: 0644]
gas/testsuite/gas/arm/cde-mve.s [new file with mode: 0644]
gas/testsuite/gas/arm/cde-warnings.l
gas/testsuite/gas/arm/cde-warnings.s
gas/testsuite/gas/arm/cde.d
gas/testsuite/gas/arm/cde.s
opcodes/ChangeLog
opcodes/arm-dis.c