aboutsummaryrefslogtreecommitdiff
path: root/gas/testsuite
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2023-03-30 11:09:12 +0100
committerRichard Sandiford <richard.sandiford@arm.com>2023-03-30 11:09:12 +0100
commitcbd11b8818335007cf960e0cecc4dec445f80327 (patch)
tree0c93cdb222610d90df1b5d74fd31c55b3c6db96f /gas/testsuite
parent99e01a66b4c619fb8c7d6f978038eb7a3661c160 (diff)
downloadgdb-cbd11b8818335007cf960e0cecc4dec445f80327.zip
gdb-cbd11b8818335007cf960e0cecc4dec445f80327.tar.gz
gdb-cbd11b8818335007cf960e0cecc4dec445f80327.tar.bz2
aarch64: Add the SME2 ZT0 instructions
SME2 adds lookup table instructions for quantisation. They use a new lookup table register called ZT0. LUTI2 takes an unsuffixed SVE vector index of the form Zn[<imm>], which is the first time that this syntax has been used.
Diffstat (limited to 'gas/testsuite')
-rw-r--r--gas/testsuite/gas/aarch64/sme-4-illegal.l6
-rw-r--r--gas/testsuite/gas/aarch64/sme2-8-invalid.d3
-rw-r--r--gas/testsuite/gas/aarch64/sme2-8-invalid.l208
-rw-r--r--gas/testsuite/gas/aarch64/sme2-8-invalid.s116
-rw-r--r--gas/testsuite/gas/aarch64/sme2-8-noarch.d3
-rw-r--r--gas/testsuite/gas/aarch64/sme2-8-noarch.l104
-rw-r--r--gas/testsuite/gas/aarch64/sme2-8.d112
-rw-r--r--gas/testsuite/gas/aarch64/sme2-8.s124
-rw-r--r--gas/testsuite/gas/aarch64/sve-invalid.l8
-rw-r--r--gas/testsuite/gas/aarch64/sve-invalid.s1
10 files changed, 682 insertions, 3 deletions
diff --git a/gas/testsuite/gas/aarch64/sme-4-illegal.l b/gas/testsuite/gas/aarch64/sme-4-illegal.l
index 86e3154..a9e9852 100644
--- a/gas/testsuite/gas/aarch64/sme-4-illegal.l
+++ b/gas/testsuite/gas/aarch64/sme-4-illegal.l
@@ -22,11 +22,11 @@
[^:]*:[0-9]+: Error: syntax error in register list at operand 1 -- `zero {za,}'
[^:]*:[0-9]+: Error: unexpected character `}' in element size at operand 1 -- `zero {za.}'
[^:]*:[0-9]+: Error: expected '}' at operand 1 -- `zero {za-}'
-[^:]*:[0-9]+: Error: expected 'za' or a ZA tile at operand 1 -- `zero {za_}'
+[^:]*:[0-9]+: Error: expected ZT0 or a ZA mask at operand 1 -- `zero {za_}'
[^:]*:[0-9]+: Error: expected '}' at operand 1 -- `zero {za#}'
-[^:]*:[0-9]+: Error: expected 'za' or a ZA tile at operand 1 -- `zero {zaX}'
+[^:]*:[0-9]+: Error: expected ZT0 or a ZA mask at operand 1 -- `zero {zaX}'
[^:]*:[0-9]+: Error: missing ZA tile size at operand 1 -- `zero {za0}'
-[^:]*:[0-9]+: Error: expected 'za' or a ZA tile at operand 1 -- `zero {zax}'
+[^:]*:[0-9]+: Error: expected ZT0 or a ZA mask at operand 1 -- `zero {zax}'
[^:]*:[0-9]+: Error: expected '}' at operand 1 -- `zero {za{}'
[^:]*:[0-9]+: Error: unexpected characters following instruction at operand 1 -- `zero {za}}'
[^:]*:[0-9]+: Error: ZA tile masks do not operate at .Q granularity at operand 1 -- `zero {za0\.q}'
diff --git a/gas/testsuite/gas/aarch64/sme2-8-invalid.d b/gas/testsuite/gas/aarch64/sme2-8-invalid.d
new file mode 100644
index 0000000..d9f587d
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-8-invalid.d
@@ -0,0 +1,3 @@
+#as: -march=armv8-a
+#source: sme2-8-invalid.s
+#error_output: sme2-8-invalid.l
diff --git a/gas/testsuite/gas/aarch64/sme2-8-invalid.l b/gas/testsuite/gas/aarch64/sme2-8-invalid.l
new file mode 100644
index 0000000..afea8bb
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-8-invalid.l
@@ -0,0 +1,208 @@
+[^ :]+: Assembler messages:
+[^ :]+:[0-9]+: Error: expected '{' at operand 1 -- `zero 0'
+[^ :]+:[0-9]+: Error: expected '{' at operand 1 -- `zero zt0'
+[^ :]+:[0-9]+: Error: syntax error in register list at operand 1 -- `zero {'
+[^ :]+:[0-9]+: Error: expected ZT0 or a ZA mask at operand 1 -- `zero {foo}'
+[^ :]+:[0-9]+: Error: expected ZT0 or a ZA mask at operand 1 -- `zero {zt}'
+[^ :]+:[0-9]+: Error: expected ZT0 or a ZA mask at operand 1 -- `zero {x0}'
+[^ :]+:[0-9]+: Error: expected ZT0 or a ZA mask at operand 1 -- `zero {z0}'
+[^ :]+:[0-9]+: Error: expected '}' after ZT0 at operand 1 -- `zero {zt0'
+[^ :]+:[0-9]+: Error: expected '}' after ZT0 at operand 1 -- `zero {zt0\.b}'
+[^ :]+:[0-9]+: Error: expected '}' after ZT0 at operand 1 -- `zero {zt0,zt0}'
+[^ :]+:[0-9]+: Error: expected a register at operand 1 -- `movt 0,zt0\[0\]'
+[^ :]+:[0-9]+: Error: expected a register at operand 2 -- `movt x0,0'
+[^ :]+:[0-9]+: Error: missing register index at operand 1 -- `movt zt0,x0'
+[^ :]+:[0-9]+: Error: unexpected register type at operand 1 -- `movt za\[0\],x0'
+[^ :]+:[0-9]+: Error: unexpected register type at operand 1 -- `movt za0\[0\],x0'
+[^ :]+:[0-9]+: Error: bad expression at operand 1 -- `movt zt0\[#0\],x0'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 56 at operand 1 -- `movt zt0\[-1\],x0'
+[^ :]+:[0-9]+: Error: byte index must be a multiple of 8 at operand 1 -- `movt zt0\[1\],x0'
+[^ :]+:[0-9]+: Error: byte index must be a multiple of 8 at operand 1 -- `movt zt0\[2\],x0'
+[^ :]+:[0-9]+: Error: byte index must be a multiple of 8 at operand 1 -- `movt zt0\[4\],x0'
+[^ :]+:[0-9]+: Error: byte index must be a multiple of 8 at operand 1 -- `movt zt0\[7\],x0'
+[^ :]+:[0-9]+: Error: byte index must be a multiple of 8 at operand 1 -- `movt zt0\[49\],x0'
+[^ :]+:[0-9]+: Error: byte index must be a multiple of 8 at operand 1 -- `movt zt0\[50\],x0'
+[^ :]+:[0-9]+: Error: byte index must be a multiple of 8 at operand 1 -- `movt zt0\[52\],x0'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 56 at operand 1 -- `movt zt0\[57\],x0'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 56 at operand 1 -- `movt zt0\[64\],x0'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 56 at operand 1 -- `movt zt0\[1<<32\],x0'
+[^ :]+:[0-9]+: Error: missing register index at operand 1 -- `movt zt0\.b\[0\],x0'
+[^ :]+:[0-9]+: Error: missing register index at operand 1 -- `movt zt0/z\[0\],x0'
+[^ :]+:[0-9]+: Error: expected an integer or zero register at operand 2 -- `movt zt0\[0\],sp'
+[^ :]+:[0-9]+: Error: operand mismatch -- `movt zt0\[0\],w0'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: movt zt0\[0\], x0
+[^ :]+:[0-9]+: Error: expected an integer or zero register at operand 2 -- `movt zt0\[0\],wsp'
+[^ :]+:[0-9]+: Error: operand mismatch -- `movt zt0\[0\],wzr'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: movt zt0\[0\], xzr
+[^ :]+:[0-9]+: Error: expected an integer or zero register at operand 2 -- `movt zt0\[0\],0'
+[^ :]+:[0-9]+: Error: expected a register at operand 1 -- `ldr 0,\[x0\]'
+[^ :]+:[0-9]+: Error: invalid addressing mode at operand 2 -- `ldr zt0,0'
+[^ :]+:[0-9]+: Error: operand 2 must be an address with base register \(no offset\) -- `ldr zt0,\[x0,#0\]'
+[^ :]+:[0-9]+: Error: expected a register at operand 1 -- `ldr Zt0,\[x0\]'
+[^ :]+:[0-9]+: Error: expected a register at operand 1 -- `ldr zT0,\[x0\]'
+[^ :]+:[0-9]+: Error: '\]' expected at operand 2 -- `ldr zt0,\[x0,#0,mul vl\]'
+[^ :]+:[0-9]+: Error: expected a 64-bit base register at operand 2 -- `ldr zt0,\[w0\]'
+[^ :]+:[0-9]+: Error: missing offset in the pre-indexed address at operand 2 -- `ldr zt0,\[x0\]!'
+[^ :]+:[0-9]+: Error: invalid base register at operand 2 -- `ldr zt0,\[xzr\]'
+[^ :]+:[0-9]+: Error: expected a 64-bit base register at operand 2 -- `ldr zt0,\[wsp\]'
+[^ :]+:[0-9]+: Error: invalid addressing mode at operand 2 -- `ldr zt0,\[x0,xzr\]'
+[^ :]+:[0-9]+: Error: invalid addressing mode at operand 2 -- `ldr zt0,\[x1,x2\]'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 15 at operand 3 -- `luti2 z0\.b,zt0,z0\[-1\]'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 15 at operand 3 -- `luti2 z0\.b,zt0,z0\[16\]'
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti2 z0\.b,zt0,z0\.b\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti2 z0\.b, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti2 z0\.h, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti2 z0\.s, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti2 z0,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti2 z0\.b, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti2 z0\.h, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti2 z0\.s, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti2 z0\.d,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti2 z0\.b, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti2 z0\.h, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti2 z0\.s, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti2 z0\.q,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti2 z0\.b, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti2 z0\.h, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti2 z0\.s, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 3 -- `luti2 z0\.b,zt0,zt0'
+[^ :]+:[0-9]+: Error: expected a register or register list at operand 1 -- `luti2 0,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: expected a register at operand 2 -- `luti2 z0\.b,0,z0\[0\]'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 3 -- `luti2 z0\.b,zt0,0'
+[^ :]+:[0-9]+: Error: start register out of range at operand 1 -- `luti2 {z1\.b-z2\.b},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: unexpected register type at operand 2 -- `luti2 {z0\.b-z1\.b},z0,z0\[0\]'
+[^ :]+:[0-9]+: Error: unexpected register type at operand 2 -- `luti2 {z0\.b-z1\.b},za,z0\[0\]'
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti2 {z0\.h-z1\.h},zt0,z0\.h\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti2 {z0\.h-z1\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti2 {z0\.b-z1\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti2 {z0\.s-z1\.s}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 7 at operand 3 -- `luti2 {z0\.h-z1\.h},zt0,z0\[-1\]'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 7 at operand 3 -- `luti2 {z0\.h-z1\.h},zt0,z0\[8\]'
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti2 {z0\.d-z1\.d},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti2 {z0\.b-z1\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti2 {z0\.h-z1\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti2 {z0\.s-z1\.s}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti2 {z0\.q-z1\.q},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti2 {z0\.b-z1\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti2 {z0\.h-z1\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti2 {z0\.s-z1\.s}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: start register out of range at operand 1 -- `luti2 {z1\.s-z4\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: start register out of range at operand 1 -- `luti2 {z2\.s-z5\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: start register out of range at operand 1 -- `luti2 {z3\.s-z6\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: unexpected register type at operand 2 -- `luti2 {z0\.s-z3\.s},z0,z0\[0\]'
+[^ :]+:[0-9]+: Error: unexpected register type at operand 2 -- `luti2 {z0\.b-z3\.b},za,z0\[0\]'
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti2 {z0\.b-z3\.b},zt0,z0\.b\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti2 {z0\.b-z3\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti2 {z0\.h-z3\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti2 {z0\.s-z3\.s}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 3 at operand 3 -- `luti2 {z0\.b-z3\.b},zt0,z0\[-1\]'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 3 at operand 3 -- `luti2 {z0\.b-z3\.b},zt0,z0\[4\]'
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti2 {z0\.d-z3\.d},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti2 {z0\.b-z3\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti2 {z0\.h-z3\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti2 {z0\.s-z3\.s}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti2 {z0\.q-z3\.q},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti2 {z0\.b-z3\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti2 {z0\.h-z3\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti2 {z0\.s-z3\.s}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: expected a register or register list at operand 1 -- `luti4 0,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: expected a register at operand 2 -- `luti4 z0\.b,0,z0\[0\]'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 3 -- `luti4 z0\.b,zt0,0'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 7 at operand 3 -- `luti4 z0\.h,zt0,z0\[-1\]'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 7 at operand 3 -- `luti4 z0\.h,zt0,z0\[8\]'
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti4 z0\.h,zt0,z0\.h\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti4 z0\.h, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti4 z0\.b, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti4 z0\.s, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti4 z0,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti4 z0\.b, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti4 z0\.h, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti4 z0\.s, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti4 z0\.d,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti4 z0\.b, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti4 z0\.h, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti4 z0\.s, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti4 z0\.q,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti4 z0\.b, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti4 z0\.h, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti4 z0\.s, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 3 -- `luti4 z0\.h,zt0,zt0'
+[^ :]+:[0-9]+: Error: start register out of range at operand 1 -- `luti4 {z1\.h-z2\.h},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: unexpected register type at operand 2 -- `luti4 {z0\.h-z1\.h},z0,z0\[0\]'
+[^ :]+:[0-9]+: Error: unexpected register type at operand 2 -- `luti4 {z0\.h-z1\.h},za,z0\[0\]'
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti4 {z0\.h-z1\.h},zt0,z0\.h\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti4 {z0\.h-z1\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti4 {z0\.b-z1\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti4 {z0\.s-z1\.s}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 3 at operand 3 -- `luti4 {z0\.h-z1\.h},zt0,z0\[-1\]'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 3 at operand 3 -- `luti4 {z0\.h-z1\.h},zt0,z0\[4\]'
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti4 {z0\.d-z1\.d},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti4 {z0\.b-z1\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti4 {z0\.h-z1\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti4 {z0\.s-z1\.s}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti4 {z0\.q-z1\.q},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti4 {z0\.b-z1\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti4 {z0\.h-z1\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti4 {z0\.s-z1\.s}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: start register out of range at operand 1 -- `luti4 {z1\.s-z4\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: start register out of range at operand 1 -- `luti4 {z2\.s-z5\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: start register out of range at operand 1 -- `luti4 {z3\.s-z6\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: unexpected register type at operand 2 -- `luti4 {z0\.s-z3\.s},z0,z0\[0\]'
+[^ :]+:[0-9]+: Error: unexpected register type at operand 2 -- `luti4 {z0\.s-z3\.s},za,z0\[0\]'
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti4 {z0\.s-z3\.s},zt0,z0\.s\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti4 {z0\.s-z3\.s}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti4 {z0\.b-z3\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti4 {z0\.h-z3\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 1 at operand 3 -- `luti4 {z0\.s-z3\.s},zt0,z0\[-1\]'
+[^ :]+:[0-9]+: Error: register element index out of range 0 to 1 at operand 3 -- `luti4 {z0\.s-z3\.s},zt0,z0\[2\]'
+[^ :]+:[0-9]+: Error: expected a list of 2 registers at operand 1 -- `luti4 {z0\.b-z3\.b},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti4 {z0\.d-z3\.d},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti4 {z0\.b-z3\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti4 {z0\.h-z3\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti4 {z0\.s-z3\.s}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Error: operand mismatch -- `luti4 {z0\.q-z3\.q},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: luti4 {z0\.b-z3\.b}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: luti4 {z0\.h-z3\.h}, zt0, z0\[0\]
+[^ :]+:[0-9]+: Info: luti4 {z0\.s-z3\.s}, zt0, z0\[0\]
diff --git a/gas/testsuite/gas/aarch64/sme2-8-invalid.s b/gas/testsuite/gas/aarch64/sme2-8-invalid.s
new file mode 100644
index 0000000..a9712c7
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-8-invalid.s
@@ -0,0 +1,116 @@
+ zero 0
+
+ zero zt0
+ zero {
+ zero { foo }
+ zero { zt }
+ zero { x0 }
+ zero { z0 }
+ zero { zt0
+ zero { zt0.b }
+ zero { zt0, zt0 }
+
+ movt 0, zt0[0]
+ movt x0, 0
+
+ movt zt0, x0
+ movt za[0], x0
+ movt za0[0], x0
+ movt zt0[#0], x0
+ movt zt0[-1], x0
+ movt zt0[1],x0
+ movt zt0[2],x0
+ movt zt0[4],x0
+ movt zt0[7],x0
+ movt zt0[49],x0
+ movt zt0[50],x0
+ movt zt0[52],x0
+ movt zt0[57],x0
+ movt zt0[64], x0
+ movt zt0[1<<32], x0
+ movt zt0.b[0], x0
+ movt zt0/z[0], x0
+ movt zt0[0], sp
+ movt zt0[0], w0
+ movt zt0[0], wsp
+ movt zt0[0], wzr
+ movt zt0[0], 0
+
+ ldr 0, [x0]
+ ldr zt0, 0
+
+ ldr zt0, [x0, #0]
+ ldr Zt0, [x0]
+ ldr zT0, [x0]
+ ldr zt0, [x0, #0, mul vl]
+ ldr zt0, [w0]
+ ldr zt0, [x0]!
+ ldr zt0, [xzr]
+ ldr zt0, [wsp]
+ ldr zt0, [x0, xzr]
+ ldr zt0, [x1, x2]
+
+ luti2 z0.b, zt0, z0[-1]
+ luti2 z0.b, zt0, z0[16]
+ luti2 z0.b, zt0, z0.b[0]
+ luti2 z0, zt0, z0[0]
+ luti2 z0.d, zt0, z0[0]
+ luti2 z0.q, zt0, z0[0]
+ luti2 z0.b, zt0, zt0
+
+ luti2 0, zt0, z0[0]
+ luti2 z0.b, 0, z0[0]
+ luti2 z0.b, zt0, 0
+
+ luti2 { z1.b - z2.b }, zt0, z0[0]
+ luti2 { z0.b - z1.b }, z0, z0[0]
+ luti2 { z0.b - z1.b }, za, z0[0]
+ luti2 { z0.h - z1.h }, zt0, z0.h[0]
+ luti2 { z0.h - z1.h }, zt0, z0[-1]
+ luti2 { z0.h - z1.h }, zt0, z0[8]
+ luti2 { z0.d - z1.d }, zt0, z0[0]
+ luti2 { z0.q - z1.q }, zt0, z0[0]
+
+ luti2 { z1.s - z4.s }, zt0, z0[0]
+ luti2 { z2.s - z5.s }, zt0, z0[0]
+ luti2 { z3.s - z6.s }, zt0, z0[0]
+ luti2 { z0.s - z3.s }, z0, z0[0]
+ luti2 { z0.b - z3.b }, za, z0[0]
+ luti2 { z0.b - z3.b }, zt0, z0.b[0]
+ luti2 { z0.b - z3.b }, zt0, z0[-1]
+ luti2 { z0.b - z3.b }, zt0, z0[4]
+ luti2 { z0.d - z3.d }, zt0, z0[0]
+ luti2 { z0.q - z3.q }, zt0, z0[0]
+
+ luti4 0, zt0, z0[0]
+ luti4 z0.b, 0, z0[0]
+ luti4 z0.b, zt0, 0
+
+ luti4 z0.h, zt0, z0[-1]
+ luti4 z0.h, zt0, z0[8]
+ luti4 z0.h, zt0, z0.h[0]
+ luti4 z0, zt0, z0[0]
+ luti4 z0.d, zt0, z0[0]
+ luti4 z0.q, zt0, z0[0]
+ luti4 z0.h, zt0, zt0
+
+ luti4 { z1.h - z2.h }, zt0, z0[0]
+ luti4 { z0.h - z1.h }, z0, z0[0]
+ luti4 { z0.h - z1.h }, za, z0[0]
+ luti4 { z0.h - z1.h }, zt0, z0.h[0]
+ luti4 { z0.h - z1.h }, zt0, z0[-1]
+ luti4 { z0.h - z1.h }, zt0, z0[4]
+ luti4 { z0.d - z1.d }, zt0, z0[0]
+ luti4 { z0.q - z1.q }, zt0, z0[0]
+
+ luti4 { z1.s - z4.s }, zt0, z0[0]
+ luti4 { z2.s - z5.s }, zt0, z0[0]
+ luti4 { z3.s - z6.s }, zt0, z0[0]
+ luti4 { z0.s - z3.s }, z0, z0[0]
+ luti4 { z0.s - z3.s }, za, z0[0]
+ luti4 { z0.s - z3.s }, zt0, z0.s[0]
+ luti4 { z0.s - z3.s }, zt0, z0[-1]
+ luti4 { z0.s - z3.s }, zt0, z0[2]
+ luti4 { z0.b - z3.b }, zt0, z0[0]
+ luti4 { z0.d - z3.d }, zt0, z0[0]
+ luti4 { z0.q - z3.q }, zt0, z0[0]
diff --git a/gas/testsuite/gas/aarch64/sme2-8-noarch.d b/gas/testsuite/gas/aarch64/sme2-8-noarch.d
new file mode 100644
index 0000000..116e9d6
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-8-noarch.d
@@ -0,0 +1,3 @@
+#as: -march=armv8-a+sme
+#source: sme2-8.s
+#error_output: sme2-8-noarch.l
diff --git a/gas/testsuite/gas/aarch64/sme2-8-noarch.l b/gas/testsuite/gas/aarch64/sme2-8-noarch.l
new file mode 100644
index 0000000..994b359
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-8-noarch.l
@@ -0,0 +1,104 @@
+[^ :]+: Assembler messages:
+[^ :]+:[0-9]+: Error: selected processor does not support `zero {zt0}'
+[^ :]+:[0-9]+: Error: selected processor does not support `zero {ZT0}'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt x0,zt0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt X0,ZT0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt x30,zt0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt xzr,zt0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt x0,zt0\[56\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt x9,zt0\[24\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt x15,zt0\[40\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt x22,zt0\[48\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt zt0\[0\],x0'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt ZT0\[0\],X0'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt zt0\[56\],x0'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt zt0\[0\],x30'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt zt0\[0\],xzr'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt zt0\[8\],x20'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt zt0\[16\],x25'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt zt0\[32\],x27'
+[^ :]+:[0-9]+: Error: selected processor does not support `movt zt0\[24\],x29'
+[^ :]+:[0-9]+: Error: selected processor does not support `ldr zt0,\[x0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `ldr ZT0,\[X0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `ldr zt0,\[x30\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `ldr zt0,\[sp\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `str zt0,\[x0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `str ZT0,\[X0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `str zt0,\[x30\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `str zt0,\[sp\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z0\.b,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 Z0\.B,ZT0,Z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z31\.b,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z0\.b,zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z0\.b,zt0,z0\[15\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z0\.h,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z31\.h,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z0\.h,zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z0\.h,zt0,z0\[15\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z0\.s,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z31\.s,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z0\.s,zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 z0\.s,zt0,z0\[15\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.b-z1\.b},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {Z0\.B-Z1\.B},ZT0,Z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z30\.b-z31\.b},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.b-z1\.b},zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.b-z1\.b},zt0,z0\[7\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.h-z1\.h},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z30\.h-z31\.h},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.h-z1\.h},zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.h-z1\.h},zt0,z0\[7\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.s-z1\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z30\.s-z31\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.s-z1\.s},zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.s-z1\.s},zt0,z0\[7\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.b-z3\.b},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {Z0\.B-Z3\.B},ZT0,Z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z28\.b-z31\.b},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.b-z3\.b},zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.b-z3\.b},zt0,z0\[3\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.h-z3\.h},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z28\.h-z31\.h},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.h-z3\.h},zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.h-z3\.h},zt0,z0\[3\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.s-z3\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z28\.s-z31\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.s-z3\.s},zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti2 {z0\.s-z3\.s},zt0,z0\[3\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z0\.b,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 Z0\.b,ZT0,Z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z31\.b,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z0\.b,zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z0\.b,zt0,z0\[7\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z0\.h,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 Z0\.H,ZT0,Z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z31\.h,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z0\.h,zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z0\.h,zt0,z0\[7\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z0\.s,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z31\.s,zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z0\.s,zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 z0\.s,zt0,z0\[7\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.b-z1\.b},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {Z0\.b-Z1\.b},ZT0,Z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z30\.b-z31\.b},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.b-z1\.b},zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.b-z1\.b},zt0,z0\[3\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.h-z1\.h},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {Z0\.H-Z1\.H},ZT0,Z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z30\.h-z31\.h},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.h-z1\.h},zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.h-z1\.h},zt0,z0\[3\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.s-z1\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z30\.s-z31\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.s-z1\.s},zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.s-z1\.s},zt0,z0\[3\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.h-z3\.h},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {Z0\.H-Z3\.H},ZT0,Z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z28\.h-z31\.h},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.h-z3\.h},zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.h-z3\.h},zt0,z0\[1\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.s-z3\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z28\.s-z31\.s},zt0,z0\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.s-z3\.s},zt0,z31\[0\]'
+[^ :]+:[0-9]+: Error: selected processor does not support `luti4 {z0\.s-z3\.s},zt0,z0\[1\]'
diff --git a/gas/testsuite/gas/aarch64/sme2-8.d b/gas/testsuite/gas/aarch64/sme2-8.d
new file mode 100644
index 0000000..a129dff
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-8.d
@@ -0,0 +1,112 @@
+#as: -march=armv8-a+sme2
+#objdump: -dr
+
+[^:]+: file format .*
+
+
+[^:]+:
+
+[^:]+:
+[^:]+: c0480001 zero {zt0}
+[^:]+: c0480001 zero {zt0}
+[^:]+: c04c03e0 movt x0, zt0\[0\]
+[^:]+: c04c03e0 movt x0, zt0\[0\]
+[^:]+: c04c03fe movt x30, zt0\[0\]
+[^:]+: c04c03ff movt xzr, zt0\[0\]
+[^:]+: c04c73e0 movt x0, zt0\[56\]
+[^:]+: c04c33e9 movt x9, zt0\[24\]
+[^:]+: c04c53ef movt x15, zt0\[40\]
+[^:]+: c04c63f6 movt x22, zt0\[48\]
+[^:]+: c04e03e0 movt zt0\[0\], x0
+[^:]+: c04e03e0 movt zt0\[0\], x0
+[^:]+: c04e73e0 movt zt0\[56\], x0
+[^:]+: c04e03fe movt zt0\[0\], x30
+[^:]+: c04e03ff movt zt0\[0\], xzr
+[^:]+: c04e13f4 movt zt0\[8\], x20
+[^:]+: c04e23f9 movt zt0\[16\], x25
+[^:]+: c04e43fb movt zt0\[32\], x27
+[^:]+: c04e33fd movt zt0\[24\], x29
+[^:]+: e11f8000 ldr zt0, \[x0\]
+[^:]+: e11f8000 ldr zt0, \[x0\]
+[^:]+: e11f83c0 ldr zt0, \[x30\]
+[^:]+: e11f83e0 ldr zt0, \[sp\]
+[^:]+: e13f8000 str zt0, \[x0\]
+[^:]+: e13f8000 str zt0, \[x0\]
+[^:]+: e13f83c0 str zt0, \[x30\]
+[^:]+: e13f83e0 str zt0, \[sp\]
+[^:]+: c0cc0000 luti2 z0\.b, zt0, z0\[0\]
+[^:]+: c0cc0000 luti2 z0\.b, zt0, z0\[0\]
+[^:]+: c0cc001f luti2 z31\.b, zt0, z0\[0\]
+[^:]+: c0cc03e0 luti2 z0\.b, zt0, z31\[0\]
+[^:]+: c0cfc000 luti2 z0\.b, zt0, z0\[15\]
+[^:]+: c0cc1000 luti2 z0\.h, zt0, z0\[0\]
+[^:]+: c0cc101f luti2 z31\.h, zt0, z0\[0\]
+[^:]+: c0cc13e0 luti2 z0\.h, zt0, z31\[0\]
+[^:]+: c0cfd000 luti2 z0\.h, zt0, z0\[15\]
+[^:]+: c0cc2000 luti2 z0\.s, zt0, z0\[0\]
+[^:]+: c0cc201f luti2 z31\.s, zt0, z0\[0\]
+[^:]+: c0cc23e0 luti2 z0\.s, zt0, z31\[0\]
+[^:]+: c0cfe000 luti2 z0\.s, zt0, z0\[15\]
+[^:]+: c08c4000 luti2 {z0\.b-z1\.b}, zt0, z0\[0\]
+[^:]+: c08c4000 luti2 {z0\.b-z1\.b}, zt0, z0\[0\]
+[^:]+: c08c401e luti2 {z30\.b-z31\.b}, zt0, z0\[0\]
+[^:]+: c08c43e0 luti2 {z0\.b-z1\.b}, zt0, z31\[0\]
+[^:]+: c08fc000 luti2 {z0\.b-z1\.b}, zt0, z0\[7\]
+[^:]+: c08c5000 luti2 {z0\.h-z1\.h}, zt0, z0\[0\]
+[^:]+: c08c501e luti2 {z30\.h-z31\.h}, zt0, z0\[0\]
+[^:]+: c08c53e0 luti2 {z0\.h-z1\.h}, zt0, z31\[0\]
+[^:]+: c08fd000 luti2 {z0\.h-z1\.h}, zt0, z0\[7\]
+[^:]+: c08c6000 luti2 {z0\.s-z1\.s}, zt0, z0\[0\]
+[^:]+: c08c601e luti2 {z30\.s-z31\.s}, zt0, z0\[0\]
+[^:]+: c08c63e0 luti2 {z0\.s-z1\.s}, zt0, z31\[0\]
+[^:]+: c08fe000 luti2 {z0\.s-z1\.s}, zt0, z0\[7\]
+[^:]+: c08c8000 luti2 {z0\.b-z3\.b}, zt0, z0\[0\]
+[^:]+: c08c8000 luti2 {z0\.b-z3\.b}, zt0, z0\[0\]
+[^:]+: c08c801c luti2 {z28\.b-z31\.b}, zt0, z0\[0\]
+[^:]+: c08c83e0 luti2 {z0\.b-z3\.b}, zt0, z31\[0\]
+[^:]+: c08f8000 luti2 {z0\.b-z3\.b}, zt0, z0\[3\]
+[^:]+: c08c9000 luti2 {z0\.h-z3\.h}, zt0, z0\[0\]
+[^:]+: c08c901c luti2 {z28\.h-z31\.h}, zt0, z0\[0\]
+[^:]+: c08c93e0 luti2 {z0\.h-z3\.h}, zt0, z31\[0\]
+[^:]+: c08f9000 luti2 {z0\.h-z3\.h}, zt0, z0\[3\]
+[^:]+: c08ca000 luti2 {z0\.s-z3\.s}, zt0, z0\[0\]
+[^:]+: c08ca01c luti2 {z28\.s-z31\.s}, zt0, z0\[0\]
+[^:]+: c08ca3e0 luti2 {z0\.s-z3\.s}, zt0, z31\[0\]
+[^:]+: c08fa000 luti2 {z0\.s-z3\.s}, zt0, z0\[3\]
+[^:]+: c0ca0000 luti4 z0\.b, zt0, z0\[0\]
+[^:]+: c0ca0000 luti4 z0\.b, zt0, z0\[0\]
+[^:]+: c0ca001f luti4 z31\.b, zt0, z0\[0\]
+[^:]+: c0ca03e0 luti4 z0\.b, zt0, z31\[0\]
+[^:]+: c0cbc000 luti4 z0\.b, zt0, z0\[7\]
+[^:]+: c0ca1000 luti4 z0\.h, zt0, z0\[0\]
+[^:]+: c0ca1000 luti4 z0\.h, zt0, z0\[0\]
+[^:]+: c0ca101f luti4 z31\.h, zt0, z0\[0\]
+[^:]+: c0ca13e0 luti4 z0\.h, zt0, z31\[0\]
+[^:]+: c0cbd000 luti4 z0\.h, zt0, z0\[7\]
+[^:]+: c0ca2000 luti4 z0\.s, zt0, z0\[0\]
+[^:]+: c0ca201f luti4 z31\.s, zt0, z0\[0\]
+[^:]+: c0ca23e0 luti4 z0\.s, zt0, z31\[0\]
+[^:]+: c0cbe000 luti4 z0\.s, zt0, z0\[7\]
+[^:]+: c08a4000 luti4 {z0\.b-z1\.b}, zt0, z0\[0\]
+[^:]+: c08a4000 luti4 {z0\.b-z1\.b}, zt0, z0\[0\]
+[^:]+: c08a401e luti4 {z30\.b-z31\.b}, zt0, z0\[0\]
+[^:]+: c08a43e0 luti4 {z0\.b-z1\.b}, zt0, z31\[0\]
+[^:]+: c08bc000 luti4 {z0\.b-z1\.b}, zt0, z0\[3\]
+[^:]+: c08a5000 luti4 {z0\.h-z1\.h}, zt0, z0\[0\]
+[^:]+: c08a5000 luti4 {z0\.h-z1\.h}, zt0, z0\[0\]
+[^:]+: c08a501e luti4 {z30\.h-z31\.h}, zt0, z0\[0\]
+[^:]+: c08a53e0 luti4 {z0\.h-z1\.h}, zt0, z31\[0\]
+[^:]+: c08bd000 luti4 {z0\.h-z1\.h}, zt0, z0\[3\]
+[^:]+: c08a6000 luti4 {z0\.s-z1\.s}, zt0, z0\[0\]
+[^:]+: c08a601e luti4 {z30\.s-z31\.s}, zt0, z0\[0\]
+[^:]+: c08a63e0 luti4 {z0\.s-z1\.s}, zt0, z31\[0\]
+[^:]+: c08be000 luti4 {z0\.s-z1\.s}, zt0, z0\[3\]
+[^:]+: c08a9000 luti4 {z0\.h-z3\.h}, zt0, z0\[0\]
+[^:]+: c08a9000 luti4 {z0\.h-z3\.h}, zt0, z0\[0\]
+[^:]+: c08a901c luti4 {z28\.h-z31\.h}, zt0, z0\[0\]
+[^:]+: c08a93e0 luti4 {z0\.h-z3\.h}, zt0, z31\[0\]
+[^:]+: c08b9000 luti4 {z0\.h-z3\.h}, zt0, z0\[1\]
+[^:]+: c08aa000 luti4 {z0\.s-z3\.s}, zt0, z0\[0\]
+[^:]+: c08aa01c luti4 {z28\.s-z31\.s}, zt0, z0\[0\]
+[^:]+: c08aa3e0 luti4 {z0\.s-z3\.s}, zt0, z31\[0\]
+[^:]+: c08ba000 luti4 {z0\.s-z3\.s}, zt0, z0\[1\]
diff --git a/gas/testsuite/gas/aarch64/sme2-8.s b/gas/testsuite/gas/aarch64/sme2-8.s
new file mode 100644
index 0000000..2bd5449
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-8.s
@@ -0,0 +1,124 @@
+ zero { zt0 }
+ ZERO { ZT0 }
+
+ movt x0, zt0[0]
+ MOVT X0, ZT0[0]
+ movt x30, zt0[0]
+ movt xzr, zt0[0]
+ movt x0, zt0[56]
+ movt x9, zt0[24]
+ movt x15, zt0[40]
+ movt x22, zt0[48]
+
+ movt zt0[0], x0
+ MOVT ZT0[0], X0
+ movt zt0[56], x0
+ movt zt0[0], x30
+ movt zt0[0], xzr
+ movt zt0[8], x20
+ movt zt0[16], x25
+ movt zt0[32], x27
+ movt zt0[24], x29
+
+ ldr zt0, [x0]
+ LDR ZT0, [X0]
+ ldr zt0, [x30]
+ ldr zt0, [sp]
+
+ str zt0, [x0]
+ STR ZT0, [X0]
+ str zt0, [x30]
+ str zt0, [sp]
+
+ luti2 z0.b, zt0, z0[0]
+ LUTI2 Z0.B, ZT0, Z0[0]
+ luti2 z31.b, zt0, z0[0]
+ luti2 z0.b, zt0, z31[0]
+ luti2 z0.b, zt0, z0[15]
+
+ luti2 z0.h, zt0, z0[0]
+ luti2 z31.h, zt0, z0[0]
+ luti2 z0.h, zt0, z31[0]
+ luti2 z0.h, zt0, z0[15]
+
+ luti2 z0.s, zt0, z0[0]
+ luti2 z31.s, zt0, z0[0]
+ luti2 z0.s, zt0, z31[0]
+ luti2 z0.s, zt0, z0[15]
+
+ luti2 { z0.b - z1.b }, zt0, z0[0]
+ LUTI2 { Z0.B - Z1.B }, ZT0, Z0[0]
+ luti2 { z30.b - z31.b }, zt0, z0[0]
+ luti2 { z0.b - z1.b }, zt0, z31[0]
+ luti2 { z0.b - z1.b }, zt0, z0[7]
+
+ luti2 { z0.h - z1.h }, zt0, z0[0]
+ luti2 { z30.h - z31.h }, zt0, z0[0]
+ luti2 { z0.h - z1.h }, zt0, z31[0]
+ luti2 { z0.h - z1.h }, zt0, z0[7]
+
+ luti2 { z0.s - z1.s }, zt0, z0[0]
+ luti2 { z30.s - z31.s }, zt0, z0[0]
+ luti2 { z0.s - z1.s }, zt0, z31[0]
+ luti2 { z0.s - z1.s }, zt0, z0[7]
+
+ luti2 { z0.b - z3.b }, zt0, z0[0]
+ LUTI2 { Z0.B - Z3.B }, ZT0, Z0[0]
+ luti2 { z28.b - z31.b }, zt0, z0[0]
+ luti2 { z0.b - z3.b }, zt0, z31[0]
+ luti2 { z0.b - z3.b }, zt0, z0[3]
+
+ luti2 { z0.h - z3.h }, zt0, z0[0]
+ luti2 { z28.h - z31.h }, zt0, z0[0]
+ luti2 { z0.h - z3.h }, zt0, z31[0]
+ luti2 { z0.h - z3.h }, zt0, z0[3]
+
+ luti2 { z0.s - z3.s }, zt0, z0[0]
+ luti2 { z28.s - z31.s }, zt0, z0[0]
+ luti2 { z0.s - z3.s }, zt0, z31[0]
+ luti2 { z0.s - z3.s }, zt0, z0[3]
+
+ luti4 z0.b, zt0, z0[0]
+ LUTI4 Z0.b, ZT0, Z0[0]
+ luti4 z31.b, zt0, z0[0]
+ luti4 z0.b, zt0, z31[0]
+ luti4 z0.b, zt0, z0[7]
+
+ luti4 z0.h, zt0, z0[0]
+ LUTI4 Z0.H, ZT0, Z0[0]
+ luti4 z31.h, zt0, z0[0]
+ luti4 z0.h, zt0, z31[0]
+ luti4 z0.h, zt0, z0[7]
+
+ luti4 z0.s, zt0, z0[0]
+ luti4 z31.s, zt0, z0[0]
+ luti4 z0.s, zt0, z31[0]
+ luti4 z0.s, zt0, z0[7]
+
+ luti4 { z0.b - z1.b }, zt0, z0[0]
+ LUTI4 { Z0.b - Z1.b }, ZT0, Z0[0]
+ luti4 { z30.b - z31.b }, zt0, z0[0]
+ luti4 { z0.b - z1.b }, zt0, z31[0]
+ luti4 { z0.b - z1.b }, zt0, z0[3]
+
+ luti4 { z0.h - z1.h }, zt0, z0[0]
+ LUTI4 { Z0.H - Z1.H }, ZT0, Z0[0]
+ luti4 { z30.h - z31.h }, zt0, z0[0]
+ luti4 { z0.h - z1.h }, zt0, z31[0]
+ luti4 { z0.h - z1.h }, zt0, z0[3]
+
+ luti4 { z0.s - z1.s }, zt0, z0[0]
+ luti4 { z30.s - z31.s }, zt0, z0[0]
+ luti4 { z0.s - z1.s }, zt0, z31[0]
+ luti4 { z0.s - z1.s }, zt0, z0[3]
+
+ luti4 { z0.h - z3.h }, zt0, z0[0]
+ LUTI4 { Z0.H - Z3.H }, ZT0, Z0[0]
+ luti4 { z28.h - z31.h }, zt0, z0[0]
+ luti4 { z0.h - z3.h }, zt0, z31[0]
+ luti4 { z0.h - z3.h }, zt0, z0[1]
+
+ luti4 { z0.s - z3.s }, zt0, z0[0]
+ luti4 { z28.s - z31.s }, zt0, z0[0]
+ luti4 { z0.s - z3.s }, zt0, z31[0]
+ luti4 { z0.s - z3.s }, zt0, z0[1]
diff --git a/gas/testsuite/gas/aarch64/sve-invalid.l b/gas/testsuite/gas/aarch64/sve-invalid.l
index 00352f8..a02fbfe 100644
--- a/gas/testsuite/gas/aarch64/sve-invalid.l
+++ b/gas/testsuite/gas/aarch64/sve-invalid.l
@@ -932,6 +932,14 @@
.*: Error: register element index out of range 0 to 63 at operand 2 -- `dup z0\.b,z1\.b\[-1\]'
.*: Error: register element index out of range 0 to 63 at operand 2 -- `dup z0\.b,z1\.b\[64\]'
.*: Error: constant expression required at operand 2 -- `dup z0\.b,z1\.b\[x0\]'
+.*: Error: operand mismatch -- `dup z0\.b,z1\[0\]'
+.*: Info: did you mean this\?
+.*: Info: dup z0\.b, z1\.b\[0\]
+.*: Info: other valid variant\(s\):
+.*: Info: dup z0\.h, z1\.h\[0\]
+.*: Info: dup z0\.s, z1\.s\[0\]
+.*: Info: dup z0\.d, z1\.d\[0\]
+.*: Info: dup z0\.q, z1\.q\[0\]
.*: Error: register element index out of range 0 to 31 at operand 2 -- `dup z0\.h,z1\.h\[-1\]'
.*: Error: register element index out of range 0 to 31 at operand 2 -- `dup z0\.h,z1\.h\[32\]'
.*: Error: constant expression required at operand 2 -- `dup z0\.h,z1\.h\[x0\]'
diff --git a/gas/testsuite/gas/aarch64/sve-invalid.s b/gas/testsuite/gas/aarch64/sve-invalid.s
index b56a08d..c374396 100644
--- a/gas/testsuite/gas/aarch64/sve-invalid.s
+++ b/gas/testsuite/gas/aarch64/sve-invalid.s
@@ -1143,6 +1143,7 @@
dup z0.b, z1.b[63] // OK
dup z0.b, z1.b[64]
dup z0.b, z1.b[x0]
+ dup z0.b, z1[0]
dup z0.h, z1.h[-1]
dup z0.h, z1.h[0] // OK