aarch64: Add support for strided register lists
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 30 Mar 2023 10:09:10 +0000 (11:09 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Thu, 30 Mar 2023 10:09:10 +0000 (11:09 +0100)
commitf5b57feac2389eba64bea45f0115474fbbb13d8e
treeafbb46bf8da4e5bc451623cf340271fae73c4a38
parentb5c36ad2e03bc9b8a45a8e495b690c1424cf018f
aarch64: Add support for strided register lists

SME2 has instructions that accept strided register lists,
such as { z0.s, z4.s, z8.s, z12.s }.  The purpose of this
patch is to extend binutils to support such lists.

The parsing code already had (unused) support for strides of 2.
The idea here is instead to accept all strides during parsing
and reject invalid strides during constraint checking.

The SME2 instructions that accept strided operands also have
non-strided forms.  The errors about invalid strides therefore
take a bitmask of acceptable strides, which allows multiple
possibilities to be summed up in a single message.

I've tried to update all code that handles register lists.
gas/config/tc-aarch64.c
gas/testsuite/gas/aarch64/diagnostic.l
gas/testsuite/gas/aarch64/illegal-sve2.l
gas/testsuite/gas/aarch64/illegal-sve2.s
include/opcode/aarch64.h
opcodes/aarch64-dis.c
opcodes/aarch64-opc.c