aarch64: Add the SME2 ADD and SUB instructions
authorRichard Sandiford <richard.sandiford@arm.com>
Thu, 30 Mar 2023 10:09:13 +0000 (11:09 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Thu, 30 Mar 2023 10:09:13 +0000 (11:09 +0100)
commite87ff6724fe32ecff11fc36a19a09ab8fbc66c13
tree823fcf67a24355b4f02e6455769a224a5a05a1d7
parentcbd11b8818335007cf960e0cecc4dec445f80327
aarch64: Add the SME2 ADD and SUB instructions

Add support for the SME2 ADD. SUB, FADD and FSUB instructions.
SUB and FSUB have the same form as ADD and FADD, except that
ADD also has a 2-operand accumulating form.

The 64-bit ADD/SUB instructions require FEAT_SME_I16I64 and the
64-bit FADD/FSUB instructions require FEAT_SME_F64F64.

These are the first instructions to have tied register list
operands, as opposed to tied single registers.

The parse_operands change prevents unsuffixed Z registers (width==-1)
from being treated as though they had an Advanced SIMD-style suffix
(.4s etc.).  It means that:

  Error: expected element type rather than vector type at operand 2 -- `add za\.s\[w8,0\],{z0-z1}'

becomes:

  Error: missing type suffix at operand 2 -- `add za\.s\[w8,0\],{z0-z1}'
31 files changed:
gas/config/tc-aarch64.c
gas/testsuite/gas/aarch64/sme2-9-invalid.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-9-invalid.l [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-9-invalid.s [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-9-noarch.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-9-noarch.l [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-9.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-9.s [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-f64f64-1-invalid.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-f64f64-1-invalid.l [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-f64f64-1-invalid.s [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-f64f64-1-noarch.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-f64f64-1-noarch.l [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-f64f64-1.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-f64f64-1.s [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-i16i64-1-invalid.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-i16i64-1-invalid.l [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-i16i64-1-invalid.s [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-i16i64-1-noarch.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-i16i64-1-noarch.l [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-i16i64-1.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/sme2-i16i64-1.s [new file with mode: 0644]
include/opcode/aarch64.h
opcodes/aarch64-asm-2.c
opcodes/aarch64-asm.c
opcodes/aarch64-dis-2.c
opcodes/aarch64-dis.c
opcodes/aarch64-opc-2.c
opcodes/aarch64-opc.c
opcodes/aarch64-opc.h
opcodes/aarch64-tbl.h