[binutils-gdb] aarch64: Add support for FEAT_SME_TMOP

Alice Carlotti acarlotti@sourceware.org
Fri Oct 10 00:36:55 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0787e01a25d2a3497af2a6eabf7f67cc7b4bad6f

commit 0787e01a25d2a3497af2a6eabf7f67cc7b4bad6f
Author: Alice Carlotti <alice.carlotti@arm.com>
Date:   Tue Oct 7 23:38:01 2025 +0100

    aarch64: Add support for FEAT_SME_TMOP

Diff:
---
 gas/config/tc-aarch64.c                      |   2 +
 gas/doc/c-aarch64.texi                       |   2 +
 gas/testsuite/gas/aarch64/sme-tmop-b16b16.d  |  17 +
 gas/testsuite/gas/aarch64/sme-tmop-b16b16.s  |   8 +
 gas/testsuite/gas/aarch64/sme-tmop-f16f16.d  |  17 +
 gas/testsuite/gas/aarch64/sme-tmop-f16f16.s  |   8 +
 gas/testsuite/gas/aarch64/sme-tmop-f8f16.d   |  17 +
 gas/testsuite/gas/aarch64/sme-tmop-f8f16.s   |   8 +
 gas/testsuite/gas/aarch64/sme-tmop-f8f32.d   |  17 +
 gas/testsuite/gas/aarch64/sme-tmop-f8f32.s   |   8 +
 gas/testsuite/gas/aarch64/sme-tmop-invalid.d |   2 +
 gas/testsuite/gas/aarch64/sme-tmop-invalid.l |   6 +
 gas/testsuite/gas/aarch64/sme-tmop-invalid.s |   5 +
 gas/testsuite/gas/aarch64/sme-tmop.d         |  81 +++
 gas/testsuite/gas/aarch64/sme-tmop.s         |  80 +++
 include/opcode/aarch64.h                     |   3 +
 opcodes/aarch64-asm-2.c                      |   3 +-
 opcodes/aarch64-dis-2.c                      | 987 +++++++++++++++------------
 opcodes/aarch64-opc-2.c                      |   1 +
 opcodes/aarch64-opc.c                        |  13 +
 opcodes/aarch64-opc.h                        |   1 +
 opcodes/aarch64-tbl-2.h                      |  15 +-
 opcodes/aarch64-tbl.h                        |  64 ++
 23 files changed, 935 insertions(+), 430 deletions(-)

diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 8d7d750e046..4a66642cc04 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -6937,6 +6937,7 @@ parse_operands (char *str, const aarch64_opcode *opcode)
 	case AARCH64_OPND_SVE_Zm4_INDEX:
 	case AARCH64_OPND_SVE_Zn_INDEX:
 	case AARCH64_OPND_SVE_Zn_5_INDEX:
+	case AARCH64_OPND_SME_Zk_INDEX:
 	case AARCH64_OPND_SME_Zm_INDEX1:
 	case AARCH64_OPND_SME_Zm_INDEX2:
 	case AARCH64_OPND_SME_Zm_INDEX2_3:
@@ -10893,6 +10894,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
   {"sve2p2",		AARCH64_FEATURE (SVE2p2), AARCH64_FEATURE (SVE2p1)},
   {"sme2p2",		AARCH64_FEATURE (SME2p2), AARCH64_FEATURE (SME2p1)},
   {"gcie",		AARCH64_FEATURE (GCIE), AARCH64_NO_FEATURES},
+  {"sme-tmop",		AARCH64_FEATURE (SME_TMOP), AARCH64_FEATURE (SME2)},
   {NULL,		AARCH64_NO_FEATURES, AARCH64_NO_FEATURES},
 };
 
diff --git a/gas/doc/c-aarch64.texi b/gas/doc/c-aarch64.texi
index 1cbd97795fa..5176757c235 100644
--- a/gas/doc/c-aarch64.texi
+++ b/gas/doc/c-aarch64.texi
@@ -309,6 +309,8 @@ automatically cause those extensions to be disabled.
  @tab Enable SME I16I64 Extension.
 @item @code{sme-lutv2} @tab
  @tab Enable SME Lookup Table v2 (LUTv2) extension.
+@item @code{sme-tmop} @tab @code{sme2}
+ @tab Enable SME structured sparsity outer product instructions.
 @item @code{sme2} @tab @code{sme}
  @tab Enable SME2.
 @item @code{sme2p1} @tab @code{sme2}
diff --git a/gas/testsuite/gas/aarch64/sme-tmop-b16b16.d b/gas/testsuite/gas/aarch64/sme-tmop-b16b16.d
new file mode 100644
index 00000000000..665efd80741
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop-b16b16.d
@@ -0,0 +1,17 @@
+#as: -march=armv8-a+sme-tmop+sme-b16b16
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	81600008 	bftmopa	za0\.h, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	81600009 	bftmopa	za1\.h, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	816003c8 	bftmopa	za0\.h, {z30\.h-z31\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	817f0008 	bftmopa	za0\.h, {z0\.h-z1\.h}, z31\.h, z20\[0\]
+ *[0-9a-f]+:	81600c08 	bftmopa	za0\.h, {z0\.h-z1\.h}, z0\.h, z23\[0\]
+ *[0-9a-f]+:	81601008 	bftmopa	za0\.h, {z0\.h-z1\.h}, z0\.h, z28\[0\]
+ *[0-9a-f]+:	81601c08 	bftmopa	za0\.h, {z0\.h-z1\.h}, z0\.h, z31\[0\]
+ *[0-9a-f]+:	81600038 	bftmopa	za0\.h, {z0\.h-z1\.h}, z0\.h, z20\[3\]
diff --git a/gas/testsuite/gas/aarch64/sme-tmop-b16b16.s b/gas/testsuite/gas/aarch64/sme-tmop-b16b16.s
new file mode 100644
index 00000000000..b66ab7b0dbc
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop-b16b16.s
@@ -0,0 +1,8 @@
+	bftmopa	za0.h, { z0.h-z1.h }, z0.h, z20[0]
+	bftmopa	za1.h, { z0.h-z1.h }, z0.h, z20[0]
+	bftmopa	za0.h, { z30.h-z31.h }, z0.h, z20[0]
+	bftmopa	za0.h, { z0.h-z1.h }, z31.h, z20[0]
+	bftmopa	za0.h, { z0.h-z1.h }, z0.h, z23[0]
+	bftmopa	za0.h, { z0.h-z1.h }, z0.h, z28[0]
+	bftmopa	za0.h, { z0.h-z1.h }, z0.h, z31[0]
+	bftmopa	za0.h, { z0.h-z1.h }, z0.h, z20[3]
diff --git a/gas/testsuite/gas/aarch64/sme-tmop-f16f16.d b/gas/testsuite/gas/aarch64/sme-tmop-f16f16.d
new file mode 100644
index 00000000000..1ba801d1e86
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop-f16f16.d
@@ -0,0 +1,17 @@
+#as: -march=armv8-a+sme-tmop+sme-f16f16
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	81400008 	ftmopa	za0\.h, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	81400009 	ftmopa	za1\.h, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	814003c8 	ftmopa	za0\.h, {z30\.h-z31\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	815f0008 	ftmopa	za0\.h, {z0\.h-z1\.h}, z31\.h, z20\[0\]
+ *[0-9a-f]+:	81400c08 	ftmopa	za0\.h, {z0\.h-z1\.h}, z0\.h, z23\[0\]
+ *[0-9a-f]+:	81401008 	ftmopa	za0\.h, {z0\.h-z1\.h}, z0\.h, z28\[0\]
+ *[0-9a-f]+:	81401c08 	ftmopa	za0\.h, {z0\.h-z1\.h}, z0\.h, z31\[0\]
+ *[0-9a-f]+:	81400038 	ftmopa	za0\.h, {z0\.h-z1\.h}, z0\.h, z20\[3\]
diff --git a/gas/testsuite/gas/aarch64/sme-tmop-f16f16.s b/gas/testsuite/gas/aarch64/sme-tmop-f16f16.s
new file mode 100644
index 00000000000..6e85c6e7dd4
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop-f16f16.s
@@ -0,0 +1,8 @@
+	ftmopa	za0.h, { z0.h-z1.h }, z0.h, z20[0]
+	ftmopa	za1.h, { z0.h-z1.h }, z0.h, z20[0]
+	ftmopa	za0.h, { z30.h-z31.h }, z0.h, z20[0]
+	ftmopa	za0.h, { z0.h-z1.h }, z31.h, z20[0]
+	ftmopa	za0.h, { z0.h-z1.h }, z0.h, z23[0]
+	ftmopa	za0.h, { z0.h-z1.h }, z0.h, z28[0]
+	ftmopa	za0.h, { z0.h-z1.h }, z0.h, z31[0]
+	ftmopa	za0.h, { z0.h-z1.h }, z0.h, z20[3]
diff --git a/gas/testsuite/gas/aarch64/sme-tmop-f8f16.d b/gas/testsuite/gas/aarch64/sme-tmop-f8f16.d
new file mode 100644
index 00000000000..c9d47df3afa
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop-f8f16.d
@@ -0,0 +1,17 @@
+#as: -march=armv8-a+sme-tmop+sme-f8f16
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	80600008 	ftmopa	za0\.h, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	80600009 	ftmopa	za1\.h, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	806003c8 	ftmopa	za0\.h, {z30\.b-z31\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	807f0008 	ftmopa	za0\.h, {z0\.b-z1\.b}, z31\.b, z20\[0\]
+ *[0-9a-f]+:	80600c08 	ftmopa	za0\.h, {z0\.b-z1\.b}, z0\.b, z23\[0\]
+ *[0-9a-f]+:	80601008 	ftmopa	za0\.h, {z0\.b-z1\.b}, z0\.b, z28\[0\]
+ *[0-9a-f]+:	80601c08 	ftmopa	za0\.h, {z0\.b-z1\.b}, z0\.b, z31\[0\]
+ *[0-9a-f]+:	80600038 	ftmopa	za0\.h, {z0\.b-z1\.b}, z0\.b, z20\[3\]
diff --git a/gas/testsuite/gas/aarch64/sme-tmop-f8f16.s b/gas/testsuite/gas/aarch64/sme-tmop-f8f16.s
new file mode 100644
index 00000000000..85ab95ef135
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop-f8f16.s
@@ -0,0 +1,8 @@
+	ftmopa	za0.h, { z0.b-z1.b }, z0.b, z20[0]
+	ftmopa	za1.h, { z0.b-z1.b }, z0.b, z20[0]
+	ftmopa	za0.h, { z30.b-z31.b }, z0.b, z20[0]
+	ftmopa	za0.h, { z0.b-z1.b }, z31.b, z20[0]
+	ftmopa	za0.h, { z0.b-z1.b }, z0.b, z23[0]
+	ftmopa	za0.h, { z0.b-z1.b }, z0.b, z28[0]
+	ftmopa	za0.h, { z0.b-z1.b }, z0.b, z31[0]
+	ftmopa	za0.h, { z0.b-z1.b }, z0.b, z20[3]
diff --git a/gas/testsuite/gas/aarch64/sme-tmop-f8f32.d b/gas/testsuite/gas/aarch64/sme-tmop-f8f32.d
new file mode 100644
index 00000000000..47a3effe3df
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop-f8f32.d
@@ -0,0 +1,17 @@
+#as: -march=armv8-a+sme-tmop+sme-f8f32
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	80600000 	ftmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	80600003 	ftmopa	za3\.s, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	806003c0 	ftmopa	za0\.s, {z30\.b-z31\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	807f0000 	ftmopa	za0\.s, {z0\.b-z1\.b}, z31\.b, z20\[0\]
+ *[0-9a-f]+:	80600c00 	ftmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z23\[0\]
+ *[0-9a-f]+:	80601000 	ftmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z28\[0\]
+ *[0-9a-f]+:	80601c00 	ftmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z31\[0\]
+ *[0-9a-f]+:	80600030 	ftmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z20\[3\]
diff --git a/gas/testsuite/gas/aarch64/sme-tmop-f8f32.s b/gas/testsuite/gas/aarch64/sme-tmop-f8f32.s
new file mode 100644
index 00000000000..000b52c3f96
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop-f8f32.s
@@ -0,0 +1,8 @@
+	ftmopa	za0.s, { z0.b-z1.b }, z0.b, z20[0]
+	ftmopa	za3.s, { z0.b-z1.b }, z0.b, z20[0]
+	ftmopa	za0.s, { z30.b-z31.b }, z0.b, z20[0]
+	ftmopa	za0.s, { z0.b-z1.b }, z31.b, z20[0]
+	ftmopa	za0.s, { z0.b-z1.b }, z0.b, z23[0]
+	ftmopa	za0.s, { z0.b-z1.b }, z0.b, z28[0]
+	ftmopa	za0.s, { z0.b-z1.b }, z0.b, z31[0]
+	ftmopa	za0.s, { z0.b-z1.b }, z0.b, z20[3]
diff --git a/gas/testsuite/gas/aarch64/sme-tmop-invalid.d b/gas/testsuite/gas/aarch64/sme-tmop-invalid.d
new file mode 100644
index 00000000000..4429a9bf5a3
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop-invalid.d
@@ -0,0 +1,2 @@
+#as: -march=armv8-a+sme-tmop
+#error_output: sme-tmop-invalid.l
diff --git a/gas/testsuite/gas/aarch64/sme-tmop-invalid.l b/gas/testsuite/gas/aarch64/sme-tmop-invalid.l
new file mode 100644
index 00000000000..6bf589f2453
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop-invalid.l
@@ -0,0 +1,6 @@
+[^:]*: Assembler messages:
+[^:]*:\d+: Error: register out of range at operand 4 -- `ftmopa za0\.s,{z0\.s-z1\.s},z0\.s,z0\[0\]'
+[^:]*:\d+: Error: register out of range at operand 4 -- `stmopa za0\.s,{z0\.h-z1\.h},z0\.h,z7\[0\]'
+[^:]*:\d+: Error: register out of range at operand 4 -- `utmopa za0\.s,{z0\.b-z1\.b},z0\.b,z19\[0\]'
+[^:]*:\d+: Error: register out of range at operand 4 -- `bftmopa za0\.s,{z0\.h-z1\.h},z0\.h,z27\[0\]'
+[^:]*:\d+: Error: register element index out of range 0 to 3 at operand 4 -- `ftmopa za0\.s,{z0\.s-z1\.s},z0\.s,z20\[4\]'
diff --git a/gas/testsuite/gas/aarch64/sme-tmop-invalid.s b/gas/testsuite/gas/aarch64/sme-tmop-invalid.s
new file mode 100644
index 00000000000..f26a79d9125
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop-invalid.s
@@ -0,0 +1,5 @@
+	ftmopa	za0.s, { z0.s-z1.s }, z0.s, z0[0]
+	stmopa	za0.s, { z0.h-z1.h }, z0.h, z7[0]
+	utmopa	za0.s, { z0.b-z1.b }, z0.b, z19[0]
+	bftmopa	za0.s, { z0.h-z1.h }, z0.h, z27[0]
+	ftmopa	za0.s, { z0.s-z1.s }, z0.s, z20[4]
diff --git a/gas/testsuite/gas/aarch64/sme-tmop.d b/gas/testsuite/gas/aarch64/sme-tmop.d
new file mode 100644
index 00000000000..552ff43c9f4
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop.d
@@ -0,0 +1,81 @@
+#as: -march=armv8-a+sme-tmop
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	81400000 	bftmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	81400003 	bftmopa	za3\.s, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	814003c0 	bftmopa	za0\.s, {z30\.h-z31\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	815f0000 	bftmopa	za0\.s, {z0\.h-z1\.h}, z31\.h, z20\[0\]
+ *[0-9a-f]+:	81400c00 	bftmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z23\[0\]
+ *[0-9a-f]+:	81401000 	bftmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z28\[0\]
+ *[0-9a-f]+:	81401c00 	bftmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z31\[0\]
+ *[0-9a-f]+:	81400030 	bftmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z20\[3\]
+ *[0-9a-f]+:	80400000 	ftmopa	za0\.s, {z0\.s-z1\.s}, z0\.s, z20\[0\]
+ *[0-9a-f]+:	80400003 	ftmopa	za3\.s, {z0\.s-z1\.s}, z0\.s, z20\[0\]
+ *[0-9a-f]+:	804003c0 	ftmopa	za0\.s, {z30\.s-z31\.s}, z0\.s, z20\[0\]
+ *[0-9a-f]+:	805f0000 	ftmopa	za0\.s, {z0\.s-z1\.s}, z31\.s, z20\[0\]
+ *[0-9a-f]+:	80400c00 	ftmopa	za0\.s, {z0\.s-z1\.s}, z0\.s, z23\[0\]
+ *[0-9a-f]+:	80401000 	ftmopa	za0\.s, {z0\.s-z1\.s}, z0\.s, z28\[0\]
+ *[0-9a-f]+:	80401c00 	ftmopa	za0\.s, {z0\.s-z1\.s}, z0\.s, z31\[0\]
+ *[0-9a-f]+:	80400030 	ftmopa	za0\.s, {z0\.s-z1\.s}, z0\.s, z20\[3\]
+ *[0-9a-f]+:	81600000 	ftmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	81600003 	ftmopa	za3\.s, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	816003c0 	ftmopa	za0\.s, {z30\.h-z31\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	817f0000 	ftmopa	za0\.s, {z0\.h-z1\.h}, z31\.h, z20\[0\]
+ *[0-9a-f]+:	81600c00 	ftmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z23\[0\]
+ *[0-9a-f]+:	81601000 	ftmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z28\[0\]
+ *[0-9a-f]+:	81601c00 	ftmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z31\[0\]
+ *[0-9a-f]+:	81600030 	ftmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z20\[3\]
+ *[0-9a-f]+:	80408008 	stmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	8040800b 	stmopa	za3\.s, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	804083c8 	stmopa	za0\.s, {z30\.h-z31\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	805f8008 	stmopa	za0\.s, {z0\.h-z1\.h}, z31\.h, z20\[0\]
+ *[0-9a-f]+:	80408c08 	stmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z23\[0\]
+ *[0-9a-f]+:	80409008 	stmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z28\[0\]
+ *[0-9a-f]+:	80409c08 	stmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z31\[0\]
+ *[0-9a-f]+:	80408038 	stmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z20\[3\]
+ *[0-9a-f]+:	80408000 	stmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	80408003 	stmopa	za3\.s, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	804083c0 	stmopa	za0\.s, {z30\.b-z31\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	805f8000 	stmopa	za0\.s, {z0\.b-z1\.b}, z31\.b, z20\[0\]
+ *[0-9a-f]+:	80408c00 	stmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z23\[0\]
+ *[0-9a-f]+:	80409000 	stmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z28\[0\]
+ *[0-9a-f]+:	80409c00 	stmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z31\[0\]
+ *[0-9a-f]+:	80408030 	stmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z20\[3\]
+ *[0-9a-f]+:	80608000 	sutmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	80608003 	sutmopa	za3\.s, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	806083c0 	sutmopa	za0\.s, {z30\.b-z31\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	807f8000 	sutmopa	za0\.s, {z0\.b-z1\.b}, z31\.b, z20\[0\]
+ *[0-9a-f]+:	80608c00 	sutmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z23\[0\]
+ *[0-9a-f]+:	80609000 	sutmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z28\[0\]
+ *[0-9a-f]+:	80609c00 	sutmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z31\[0\]
+ *[0-9a-f]+:	80608030 	sutmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z20\[3\]
+ *[0-9a-f]+:	81408000 	ustmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	81408003 	ustmopa	za3\.s, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	814083c0 	ustmopa	za0\.s, {z30\.b-z31\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	815f8000 	ustmopa	za0\.s, {z0\.b-z1\.b}, z31\.b, z20\[0\]
+ *[0-9a-f]+:	81408c00 	ustmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z23\[0\]
+ *[0-9a-f]+:	81409000 	ustmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z28\[0\]
+ *[0-9a-f]+:	81409c00 	ustmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z31\[0\]
+ *[0-9a-f]+:	81408030 	ustmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z20\[3\]
+ *[0-9a-f]+:	81408008 	utmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	8140800b 	utmopa	za3\.s, {z0\.h-z1\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	814083c8 	utmopa	za0\.s, {z30\.h-z31\.h}, z0\.h, z20\[0\]
+ *[0-9a-f]+:	815f8008 	utmopa	za0\.s, {z0\.h-z1\.h}, z31\.h, z20\[0\]
+ *[0-9a-f]+:	81408c08 	utmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z23\[0\]
+ *[0-9a-f]+:	81409008 	utmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z28\[0\]
+ *[0-9a-f]+:	81409c08 	utmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z31\[0\]
+ *[0-9a-f]+:	81408038 	utmopa	za0\.s, {z0\.h-z1\.h}, z0\.h, z20\[3\]
+ *[0-9a-f]+:	81608000 	utmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	81608003 	utmopa	za3\.s, {z0\.b-z1\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	816083c0 	utmopa	za0\.s, {z30\.b-z31\.b}, z0\.b, z20\[0\]
+ *[0-9a-f]+:	817f8000 	utmopa	za0\.s, {z0\.b-z1\.b}, z31\.b, z20\[0\]
+ *[0-9a-f]+:	81608c00 	utmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z23\[0\]
+ *[0-9a-f]+:	81609000 	utmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z28\[0\]
+ *[0-9a-f]+:	81609c00 	utmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z31\[0\]
+ *[0-9a-f]+:	81608030 	utmopa	za0\.s, {z0\.b-z1\.b}, z0\.b, z20\[3\]
diff --git a/gas/testsuite/gas/aarch64/sme-tmop.s b/gas/testsuite/gas/aarch64/sme-tmop.s
new file mode 100644
index 00000000000..037a6d63c06
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-tmop.s
@@ -0,0 +1,80 @@
+	bftmopa	za0.s, { z0.h-z1.h }, z0.h, z20[0]
+	bftmopa	za3.s, { z0.h-z1.h }, z0.h, z20[0]
+	bftmopa	za0.s, { z30.h-z31.h }, z0.h, z20[0]
+	bftmopa	za0.s, { z0.h-z1.h }, z31.h, z20[0]
+	bftmopa	za0.s, { z0.h-z1.h }, z0.h, z23[0]
+	bftmopa	za0.s, { z0.h-z1.h }, z0.h, z28[0]
+	bftmopa	za0.s, { z0.h-z1.h }, z0.h, z31[0]
+	bftmopa	za0.s, { z0.h-z1.h }, z0.h, z20[3]
+
+	ftmopa	za0.s, { z0.s-z1.s }, z0.s, z20[0]
+	ftmopa	za3.s, { z0.s-z1.s }, z0.s, z20[0]
+	ftmopa	za0.s, { z30.s-z31.s }, z0.s, z20[0]
+	ftmopa	za0.s, { z0.s-z1.s }, z31.s, z20[0]
+	ftmopa	za0.s, { z0.s-z1.s }, z0.s, z23[0]
+	ftmopa	za0.s, { z0.s-z1.s }, z0.s, z28[0]
+	ftmopa	za0.s, { z0.s-z1.s }, z0.s, z31[0]
+	ftmopa	za0.s, { z0.s-z1.s }, z0.s, z20[3]
+
+	ftmopa	za0.s, { z0.h-z1.h }, z0.h, z20[0]
+	ftmopa	za3.s, { z0.h-z1.h }, z0.h, z20[0]
+	ftmopa	za0.s, { z30.h-z31.h }, z0.h, z20[0]
+	ftmopa	za0.s, { z0.h-z1.h }, z31.h, z20[0]
+	ftmopa	za0.s, { z0.h-z1.h }, z0.h, z23[0]
+	ftmopa	za0.s, { z0.h-z1.h }, z0.h, z28[0]
+	ftmopa	za0.s, { z0.h-z1.h }, z0.h, z31[0]
+	ftmopa	za0.s, { z0.h-z1.h }, z0.h, z20[3]
+
+	stmopa	za0.s, { z0.h-z1.h }, z0.h, z20[0]
+	stmopa	za3.s, { z0.h-z1.h }, z0.h, z20[0]
+	stmopa	za0.s, { z30.h-z31.h }, z0.h, z20[0]
+	stmopa	za0.s, { z0.h-z1.h }, z31.h, z20[0]
+	stmopa	za0.s, { z0.h-z1.h }, z0.h, z23[0]
+	stmopa	za0.s, { z0.h-z1.h }, z0.h, z28[0]
+	stmopa	za0.s, { z0.h-z1.h }, z0.h, z31[0]
+	stmopa	za0.s, { z0.h-z1.h }, z0.h, z20[3]
+
+	stmopa	za0.s, { z0.b-z1.b }, z0.b, z20[0]
+	stmopa	za3.s, { z0.b-z1.b }, z0.b, z20[0]
+	stmopa	za0.s, { z30.b-z31.b }, z0.b, z20[0]
+	stmopa	za0.s, { z0.b-z1.b }, z31.b, z20[0]
+	stmopa	za0.s, { z0.b-z1.b }, z0.b, z23[0]
+	stmopa	za0.s, { z0.b-z1.b }, z0.b, z28[0]
+	stmopa	za0.s, { z0.b-z1.b }, z0.b, z31[0]
+	stmopa	za0.s, { z0.b-z1.b }, z0.b, z20[3]
+
+	sutmopa	za0.s, { z0.b-z1.b }, z0.b, z20[0]
+	sutmopa	za3.s, { z0.b-z1.b }, z0.b, z20[0]
+	sutmopa	za0.s, { z30.b-z31.b }, z0.b, z20[0]
+	sutmopa	za0.s, { z0.b-z1.b }, z31.b, z20[0]
+	sutmopa	za0.s, { z0.b-z1.b }, z0.b, z23[0]
+	sutmopa	za0.s, { z0.b-z1.b }, z0.b, z28[0]
+	sutmopa	za0.s, { z0.b-z1.b }, z0.b, z31[0]
+	sutmopa	za0.s, { z0.b-z1.b }, z0.b, z20[3]
+
+	ustmopa	za0.s, { z0.b-z1.b }, z0.b, z20[0]
+	ustmopa	za3.s, { z0.b-z1.b }, z0.b, z20[0]
+	ustmopa	za0.s, { z30.b-z31.b }, z0.b, z20[0]
+	ustmopa	za0.s, { z0.b-z1.b }, z31.b, z20[0]
+	ustmopa	za0.s, { z0.b-z1.b }, z0.b, z23[0]
+	ustmopa	za0.s, { z0.b-z1.b }, z0.b, z28[0]
+	ustmopa	za0.s, { z0.b-z1.b }, z0.b, z31[0]
+	ustmopa	za0.s, { z0.b-z1.b }, z0.b, z20[3]
+
+	utmopa	za0.s, { z0.h-z1.h }, z0.h, z20[0]
+	utmopa	za3.s, { z0.h-z1.h }, z0.h, z20[0]
+	utmopa	za0.s, { z30.h-z31.h }, z0.h, z20[0]
+	utmopa	za0.s, { z0.h-z1.h }, z31.h, z20[0]
+	utmopa	za0.s, { z0.h-z1.h }, z0.h, z23[0]
+	utmopa	za0.s, { z0.h-z1.h }, z0.h, z28[0]
+	utmopa	za0.s, { z0.h-z1.h }, z0.h, z31[0]
+	utmopa	za0.s, { z0.h-z1.h }, z0.h, z20[3]
+
+	utmopa	za0.s, { z0.b-z1.b }, z0.b, z20[0]
+	utmopa	za3.s, { z0.b-z1.b }, z0.b, z20[0]
+	utmopa	za0.s, { z30.b-z31.b }, z0.b, z20[0]
+	utmopa	za0.s, { z0.b-z1.b }, z31.b, z20[0]
+	utmopa	za0.s, { z0.b-z1.b }, z0.b, z23[0]
+	utmopa	za0.s, { z0.b-z1.b }, z0.b, z28[0]
+	utmopa	za0.s, { z0.b-z1.b }, z0.b, z31[0]
+	utmopa	za0.s, { z0.b-z1.b }, z0.b, z20[3]
diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
index ad3f419f914..099fb2366df 100644
--- a/include/opcode/aarch64.h
+++ b/include/opcode/aarch64.h
@@ -253,6 +253,8 @@ enum aarch64_feature_bit {
   AARCH64_FEATURE_PoPS,
   /* GICv5 (Generic Interrupt Controller) CPU Interface Extension.  */
   AARCH64_FEATURE_GCIE,
+  /* SME TMOP instructions.  */
+  AARCH64_FEATURE_SME_TMOP,
 
   /* Virtual features.  These are used to gate instructions that are enabled
      by either of two (or more) sets of command line flags.  */
@@ -899,6 +901,7 @@ enum aarch64_opnd
   AARCH64_OPND_SME_PnT_Wm_imm,      /* SME <Pn>.<T>[<Wm>, #<imm>].  */
   AARCH64_OPND_SME_SHRIMM4,	    /* 4-bit right shift, bits [19:16].  */
   AARCH64_OPND_SME_SHRIMM5,	    /* size + 5-bit right shift, bits [23:22,20:16].  */
+  AARCH64_OPND_SME_Zk_INDEX,	    /* Zk[index], bits [12:10,5:4].  */
   AARCH64_OPND_SME_Zm_INDEX1,	    /* Zn.T[index], bits [19:16,10].  */
   AARCH64_OPND_SME_Zm_INDEX2,	    /* Zn.T[index], bits [19:16,11:10].  */
   AARCH64_OPND_SME_Zm_INDEX2_3,	    /* Zn.T[index], bits [19:16,10,3].  */
diff --git a/opcodes/aarch64-asm-2.c b/opcodes/aarch64-asm-2.c
index ac0bf7a70be..a5dbabbb3cd 100644
--- a/opcodes/aarch64-asm-2.c
+++ b/opcodes/aarch64-asm-2.c
@@ -556,7 +556,7 @@ aarch64_find_real_opcode (const aarch64_opcode *opcode)
     case A64_OPID_d503323f_dsb_BARRIER_DSB_NXS:
       value = A64_OPID_d503323f_dsb_BARRIER_DSB_NXS;
       break;
-    case A64_OPID_d5080000_gsb_GSB:
+    case A64_OPID_d508001f_gsb_GSB:
     case A64_OPID_d5080000_gicr_Rd_GICR:
     case A64_OPID_d5080000_gic_GIC_Rd:
     case A64_OPID_d50b72e0_trcit_Rt:
@@ -870,6 +870,7 @@ aarch64_insert_operand (const aarch64_operand *self,
     case AARCH64_OPND_SVE_Zm3_12_INDEX:
     case AARCH64_OPND_SME_PNn3_INDEX1:
     case AARCH64_OPND_SME_PNn3_INDEX2:
+    case AARCH64_OPND_SME_Zk_INDEX:
     case AARCH64_OPND_SME_Zm_INDEX1:
     case AARCH64_OPND_SME_Zm_INDEX2:
     case AARCH64_OPND_SME_Zm_INDEX2_3:
diff --git a/opcodes/aarch64-dis-2.c b/opcodes/aarch64-dis-2.c
index 275d295d7f9..87e0f2a54ba 100644
--- a/opcodes/aarch64-dis-2.c
+++ b/opcodes/aarch64-dis-2.c
@@ -92,19 +92,49 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                     }
                                   else
                                     {
-                                      if (((word >> 4) & 0x1) == 0)
+                                      if (((word >> 3) & 0x1) == 0)
                                         {
-                                          /* 33222222222211111111110000000000
-                                             10987654321098765432109876543210
-                                             x0000000x10xxxxxxxxxxxxxxxx0xxxx.  */
-                                          return A64_OPID_80c00000_fmopa_SME_ZAda_3b_SVE_Pg3_SME_Pm_SVE_Zn_SVE_Zm_16;
+                                          if (((word >> 23) & 0x1) == 0)
+                                            {
+                                              if (((word >> 15) & 0x1) == 0)
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     x0000000010xxxxx0xxxxxxxxxxx0xxx.  */
+                                                  return A64_OPID_80400000_ftmopa_SME_ZAda_2b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
+                                                }
+                                              else
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     x0000000010xxxxx1xxxxxxxxxxx0xxx.  */
+                                                  return A64_OPID_80408000_stmopa_SME_ZAda_2b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
+                                                }
+                                            }
+                                          else
+                                            {
+                                              if (((word >> 4) & 0x1) == 0)
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     x0000000110xxxxxxxxxxxxxxxx00xxx.  */
+                                                  return A64_OPID_80c00000_fmopa_SME_ZAda_3b_SVE_Pg3_SME_Pm_SVE_Zn_SVE_Zm_16;
+                                                }
+                                              else
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     x0000000110xxxxxxxxxxxxxxxx10xxx.  */
+                                                  return A64_OPID_80c00010_fmops_SME_ZAda_3b_SVE_Pg3_SME_Pm_SVE_Zn_SVE_Zm_16;
+                                                }
+                                            }
                                         }
                                       else
                                         {
                                           /* 33222222222211111111110000000000
                                              10987654321098765432109876543210
-                                             x0000000x10xxxxxxxxxxxxxxxx1xxxx.  */
-                                          return A64_OPID_80c00010_fmops_SME_ZAda_3b_SVE_Pg3_SME_Pm_SVE_Zn_SVE_Zm_16;
+                                             x0000000x10xxxxxxxxxxxxxxxxx1xxx.  */
+                                          return A64_OPID_80408008_stmopa_SME_ZAda_2b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
                                         }
                                     }
                                 }
@@ -1287,169 +1317,199 @@ aarch64_opcode_lookup_1 (uint32_t word)
                             {
                               if (((word >> 23) & 0x1) == 0)
                                 {
-                                  if (((word >> 30) & 0x1) == 0)
+                                  if (((word >> 29) & 0x1) == 0)
                                     {
-                                      if (((word >> 0) & 0x1) == 0)
+                                      if (((word >> 3) & 0x1) == 0)
                                         {
-                                          if (((word >> 13) & 0x1) == 0)
+                                          if (((word >> 15) & 0x1) == 0)
                                             {
-                                              if (((word >> 14) & 0x1) == 0)
-                                                {
-                                                  if (((word >> 15) & 0x1) == 0)
-                                                    {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx000xxxxxxxxxxxx0.  */
-                                                      return A64_OPID_a0600000_st1b_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
-                                                    }
-                                                  else
-                                                    {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx100xxxxxxxxxxxx0.  */
-                                                      return A64_OPID_a0608000_st1b_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
-                                                    }
-                                                }
-                                              else
-                                                {
-                                                  if (((word >> 15) & 0x1) == 0)
-                                                    {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx010xxxxxxxxxxxx0.  */
-                                                      return A64_OPID_a0604000_st1w_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
-                                                    }
-                                                  else
-                                                    {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx110xxxxxxxxxxxx0.  */
-                                                      return A64_OPID_a060c000_st1w_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
-                                                    }
-                                                }
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xx000000011xxxxx0xxxxxxxxxxx0xxx.  */
+                                              return A64_OPID_80600000_ftmopa_SME_ZAda_2b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
                                             }
                                           else
                                             {
-                                              if (((word >> 14) & 0x1) == 0)
-                                                {
-                                                  if (((word >> 15) & 0x1) == 0)
-                                                    {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx001xxxxxxxxxxxx0.  */
-                                                      return A64_OPID_a0602000_st1h_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
-                                                    }
-                                                  else
-                                                    {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx101xxxxxxxxxxxx0.  */
-                                                      return A64_OPID_a060a000_st1h_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
-                                                    }
-                                                }
-                                              else
-                                                {
-                                                  if (((word >> 15) & 0x1) == 0)
-                                                    {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx011xxxxxxxxxxxx0.  */
-                                                      return A64_OPID_a0606000_st1d_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
-                                                    }
-                                                  else
-                                                    {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx111xxxxxxxxxxxx0.  */
-                                                      return A64_OPID_a060e000_st1d_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
-                                                    }
-                                                }
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xx000000011xxxxx1xxxxxxxxxxx0xxx.  */
+                                              return A64_OPID_80608000_sutmopa_SME_ZAda_2b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
                                             }
                                         }
                                       else
                                         {
-                                          if (((word >> 13) & 0x1) == 0)
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xx000000011xxxxxxxxxxxxxxxxx1xxx.  */
+                                          return A64_OPID_80600008_ftmopa_SME_ZAda_1b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
+                                        }
+                                    }
+                                  else
+                                    {
+                                      if (((word >> 30) & 0x1) == 0)
+                                        {
+                                          if (((word >> 0) & 0x1) == 0)
                                             {
-                                              if (((word >> 14) & 0x1) == 0)
+                                              if (((word >> 13) & 0x1) == 0)
                                                 {
-                                                  if (((word >> 15) & 0x1) == 0)
+                                                  if (((word >> 14) & 0x1) == 0)
                                                     {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx000xxxxxxxxxxxx1.  */
-                                                      return A64_OPID_a0600001_stnt1b_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                      if (((word >> 15) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx000xxxxxxxxxxxx0.  */
+                                                          return A64_OPID_a0600000_st1b_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx100xxxxxxxxxxxx0.  */
+                                                          return A64_OPID_a0608000_st1b_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                        }
                                                     }
                                                   else
                                                     {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx100xxxxxxxxxxxx1.  */
-                                                      return A64_OPID_a0608001_stnt1b_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                      if (((word >> 15) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx010xxxxxxxxxxxx0.  */
+                                                          return A64_OPID_a0604000_st1w_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx110xxxxxxxxxxxx0.  */
+                                                          return A64_OPID_a060c000_st1w_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                        }
                                                     }
                                                 }
                                               else
                                                 {
-                                                  if (((word >> 15) & 0x1) == 0)
+                                                  if (((word >> 14) & 0x1) == 0)
                                                     {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx010xxxxxxxxxxxx1.  */
-                                                      return A64_OPID_a0604001_stnt1w_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                      if (((word >> 15) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx001xxxxxxxxxxxx0.  */
+                                                          return A64_OPID_a0602000_st1h_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx101xxxxxxxxxxxx0.  */
+                                                          return A64_OPID_a060a000_st1h_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                        }
                                                     }
                                                   else
                                                     {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx110xxxxxxxxxxxx1.  */
-                                                      return A64_OPID_a060c001_stnt1w_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                      if (((word >> 15) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx011xxxxxxxxxxxx0.  */
+                                                          return A64_OPID_a0606000_st1d_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx111xxxxxxxxxxxx0.  */
+                                                          return A64_OPID_a060e000_st1d_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                        }
                                                     }
                                                 }
                                             }
                                           else
                                             {
-                                              if (((word >> 14) & 0x1) == 0)
+                                              if (((word >> 13) & 0x1) == 0)
                                                 {
-                                                  if (((word >> 15) & 0x1) == 0)
+                                                  if (((word >> 14) & 0x1) == 0)
                                                     {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx001xxxxxxxxxxxx1.  */
-                                                      return A64_OPID_a0602001_stnt1h_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                      if (((word >> 15) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx000xxxxxxxxxxxx1.  */
+                                                          return A64_OPID_a0600001_stnt1b_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx100xxxxxxxxxxxx1.  */
+                                                          return A64_OPID_a0608001_stnt1b_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                        }
                                                     }
                                                   else
                                                     {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx101xxxxxxxxxxxx1.  */
-                                                      return A64_OPID_a060a001_stnt1h_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                      if (((word >> 15) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx010xxxxxxxxxxxx1.  */
+                                                          return A64_OPID_a0604001_stnt1w_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx110xxxxxxxxxxxx1.  */
+                                                          return A64_OPID_a060c001_stnt1w_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                        }
                                                     }
                                                 }
                                               else
                                                 {
-                                                  if (((word >> 15) & 0x1) == 0)
+                                                  if (((word >> 14) & 0x1) == 0)
                                                     {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx011xxxxxxxxxxxx1.  */
-                                                      return A64_OPID_a0606001_stnt1d_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                      if (((word >> 15) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx001xxxxxxxxxxxx1.  */
+                                                          return A64_OPID_a0602001_stnt1h_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx101xxxxxxxxxxxx1.  */
+                                                          return A64_OPID_a060a001_stnt1h_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                        }
                                                     }
                                                   else
                                                     {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         x0x00000011xxxxx111xxxxxxxxxxxx1.  */
-                                                      return A64_OPID_a060e001_stnt1d_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                      if (((word >> 15) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx011xxxxxxxxxxxx1.  */
+                                                          return A64_OPID_a0606001_stnt1d_SME_Zdnx2_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0100000011xxxxx111xxxxxxxxxxxx1.  */
+                                                          return A64_OPID_a060e001_stnt1d_SME_Zdnx4_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                        }
                                                     }
                                                 }
                                             }
                                         }
-                                    }
-                                  else
-                                    {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         x1x00000011xxxxxxxxxxxxxxxxxxxxx.  */
-                                      return A64_OPID_e0600000_st1h_SME_ZA_HV_idx_ldstr_SVE_Pg3_SVE_ADDR_RR_LSL1;
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             x1100000011xxxxxxxxxxxxxxxxxxxxx.  */
+                                          return A64_OPID_e0600000_st1h_SME_ZA_HV_idx_ldstr_SVE_Pg3_SVE_ADDR_RR_LSL1;
+                                        }
                                     }
                                 }
                               else
@@ -2319,88 +2379,188 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                 {
                                   if (((word >> 3) & 0x1) == 0)
                                     {
-                                      if (((word >> 20) & 0x1) == 0)
+                                      if (((word >> 29) & 0x1) == 0)
                                         {
-                                          if (((word >> 29) & 0x1) == 0)
+                                          if (((word >> 30) & 0x1) == 0)
                                             {
-                                              /* 33222222222211111111110000000000
-                                                 10987654321098765432109876543210
-                                                 xx0000010100xxxxxxxxxxxxxxxx0xxx.  */
-                                              return A64_OPID_c1400000_fmlall_SME_ZA_array_off2x4_SVE_Zn_SME_Zm_INDEX4_10;
+                                              if (((word >> 15) & 0x1) == 0)
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     x0000001010xxxxx0xxxxxxxxxxx0xxx.  */
+                                                  return A64_OPID_81400000_bftmopa_SME_ZAda_2b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
+                                                }
+                                              else
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     x0000001010xxxxx1xxxxxxxxxxx0xxx.  */
+                                                  return A64_OPID_81408000_ustmopa_SME_ZAda_2b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
+                                                }
                                             }
                                           else
                                             {
-                                              if (((word >> 13) & 0x1) == 0)
+                                              if (((word >> 4) & 0x1) == 0)
                                                 {
-                                                  if (((word >> 14) & 0x1) == 0)
+                                                  if (((word >> 20) & 0x1) == 0)
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xx1000010100xxxx000xxxxxxxxx0xxx.  */
-                                                          return A64_OPID_a1400000_ld1b_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
-                                                        }
-                                                      else
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xx1000010100xxxx100xxxxxxxxx0xxx.  */
-                                                          return A64_OPID_a1408000_ld1b_SME_Ztx4_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
-                                                        }
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         x10000010100xxxxxxxxxxxxxxx00xxx.  */
+                                                      return A64_OPID_c1400000_fmlall_SME_ZA_array_off2x4_SVE_Zn_SME_Zm_INDEX4_10;
                                                     }
                                                   else
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
+                                                      if (((word >> 5) & 0x1) == 0)
                                                         {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xx1000010100xxxx010xxxxxxxxx0xxx.  */
-                                                          return A64_OPID_a1404000_ld1w_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                          if (((word >> 12) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 15) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     x10000010101xxxx0xx0xxxxxx000xxx.  */
+                                                                  return A64_OPID_c1500000_fmla_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     x10000010101xxxx1xx0xxxxxx000xxx.  */
+                                                                  return A64_OPID_c1508000_fmla_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              if (((word >> 15) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     x10000010101xxxx0xx1xxxxxx000xxx.  */
+                                                                  return A64_OPID_c1501000_sdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     x10000010101xxxx1xx1xxxxxx000xxx.  */
+                                                                  return A64_OPID_c1509000_sdot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
+                                                                }
+                                                            }
                                                         }
                                                       else
                                                         {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xx1000010100xxxx110xxxxxxxxx0xxx.  */
-                                                          return A64_OPID_a140c000_ld1w_SME_Ztx4_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                          if (((word >> 12) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 15) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     x10000010101xxxx0xx0xxxxxx100xxx.  */
+                                                                  return A64_OPID_c1500020_svdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     x10000010101xxxx1xx0xxxxxx100xxx.  */
+                                                                  return A64_OPID_c1508020_svdot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              if (((word >> 15) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     x10000010101xxxx0xx1xxxxxx100xxx.  */
+                                                                  return A64_OPID_c1501020_sdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     x10000010101xxxx1xx1xxxxxx100xxx.  */
+                                                                  return A64_OPID_c1509020_sdot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
+                                                                }
+                                                            }
                                                         }
                                                     }
                                                 }
                                               else
                                                 {
-                                                  if (((word >> 14) & 0x1) == 0)
+                                                  if (((word >> 5) & 0x1) == 0)
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
+                                                      if (((word >> 12) & 0x1) == 0)
                                                         {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xx1000010100xxxx001xxxxxxxxx0xxx.  */
-                                                          return A64_OPID_a1402000_ld1h_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                          if (((word >> 15) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx0xx0xxxxxx010xxx.  */
+                                                              return A64_OPID_c1500010_fmls_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx1xx0xxxxxx010xxx.  */
+                                                              return A64_OPID_c1508010_fmls_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
+                                                            }
                                                         }
                                                       else
                                                         {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xx1000010100xxxx101xxxxxxxxx0xxx.  */
-                                                          return A64_OPID_a140a000_ld1h_SME_Ztx4_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                          if (((word >> 15) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx0xx1xxxxxx010xxx.  */
+                                                              return A64_OPID_c1501010_udot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx1xx1xxxxxx010xxx.  */
+                                                              return A64_OPID_c1509010_udot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
+                                                            }
                                                         }
                                                     }
                                                   else
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
+                                                      if (((word >> 12) & 0x1) == 0)
                                                         {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xx1000010100xxxx011xxxxxxxxx0xxx.  */
-                                                          return A64_OPID_a1406000_ld1d_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                          if (((word >> 15) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx0xx0xxxxxx110xxx.  */
+                                                              return A64_OPID_c1500030_uvdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx1xx0xxxxxx110xxx.  */
+                                                              return A64_OPID_c1508030_uvdot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
+                                                            }
                                                         }
                                                       else
                                                         {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xx1000010100xxxx111xxxxxxxxx0xxx.  */
-                                                          return A64_OPID_a140e000_ld1d_SME_Ztx4_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                          if (((word >> 15) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx0xx1xxxxxx110xxx.  */
+                                                              return A64_OPID_c1501030_udot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx1xx1xxxxxx110xxx.  */
+                                                              return A64_OPID_c1509030_udot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
+                                                            }
                                                         }
                                                     }
                                                 }
@@ -2408,167 +2568,164 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                         }
                                       else
                                         {
-                                          if (((word >> 4) & 0x1) == 0)
+                                          if (((word >> 13) & 0x1) == 0)
                                             {
-                                              if (((word >> 5) & 0x1) == 0)
+                                              if (((word >> 14) & 0x1) == 0)
                                                 {
-                                                  if (((word >> 12) & 0x1) == 0)
+                                                  if (((word >> 15) & 0x1) == 0)
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx0xx0xxxxxx000xxx.  */
-                                                          return A64_OPID_c1500000_fmla_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
-                                                        }
-                                                      else
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx1xx0xxxxxx000xxx.  */
-                                                          return A64_OPID_c1508000_fmla_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
-                                                        }
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xx100001010xxxxx000xxxxxxxxx0xxx.  */
+                                                      return A64_OPID_a1400000_ld1b_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
                                                     }
                                                   else
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx0xx1xxxxxx000xxx.  */
-                                                          return A64_OPID_c1501000_sdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
-                                                        }
-                                                      else
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx1xx1xxxxxx000xxx.  */
-                                                          return A64_OPID_c1509000_sdot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
-                                                        }
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xx100001010xxxxx100xxxxxxxxx0xxx.  */
+                                                      return A64_OPID_a1408000_ld1b_SME_Ztx4_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
                                                     }
                                                 }
                                               else
                                                 {
-                                                  if (((word >> 12) & 0x1) == 0)
+                                                  if (((word >> 15) & 0x1) == 0)
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx0xx0xxxxxx100xxx.  */
-                                                          return A64_OPID_c1500020_svdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
-                                                        }
-                                                      else
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx1xx0xxxxxx100xxx.  */
-                                                          return A64_OPID_c1508020_svdot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
-                                                        }
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xx100001010xxxxx010xxxxxxxxx0xxx.  */
+                                                      return A64_OPID_a1404000_ld1w_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
                                                     }
                                                   else
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx0xx1xxxxxx100xxx.  */
-                                                          return A64_OPID_c1501020_sdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
-                                                        }
-                                                      else
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx1xx1xxxxxx100xxx.  */
-                                                          return A64_OPID_c1509020_sdot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
-                                                        }
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xx100001010xxxxx110xxxxxxxxx0xxx.  */
+                                                      return A64_OPID_a140c000_ld1w_SME_Ztx4_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
                                                     }
                                                 }
                                             }
                                           else
                                             {
-                                              if (((word >> 5) & 0x1) == 0)
+                                              if (((word >> 14) & 0x1) == 0)
                                                 {
-                                                  if (((word >> 12) & 0x1) == 0)
+                                                  if (((word >> 15) & 0x1) == 0)
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx0xx0xxxxxx010xxx.  */
-                                                          return A64_OPID_c1500010_fmls_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
-                                                        }
-                                                      else
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx1xx0xxxxxx010xxx.  */
-                                                          return A64_OPID_c1508010_fmls_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
-                                                        }
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xx100001010xxxxx001xxxxxxxxx0xxx.  */
+                                                      return A64_OPID_a1402000_ld1h_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
                                                     }
                                                   else
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx0xx1xxxxxx010xxx.  */
-                                                          return A64_OPID_c1501010_udot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
-                                                        }
-                                                      else
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx1xx1xxxxxx010xxx.  */
-                                                          return A64_OPID_c1509010_udot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
-                                                        }
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xx100001010xxxxx101xxxxxxxxx0xxx.  */
+                                                      return A64_OPID_a140a000_ld1h_SME_Ztx4_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
                                                     }
                                                 }
                                               else
                                                 {
-                                                  if (((word >> 12) & 0x1) == 0)
+                                                  if (((word >> 15) & 0x1) == 0)
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xx100001010xxxxx011xxxxxxxxx0xxx.  */
+                                                      return A64_OPID_a1406000_ld1d_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
+                                                    }
+                                                  else
+                                                    {
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xx100001010xxxxx111xxxxxxxxx0xxx.  */
+                                                      return A64_OPID_a140e000_ld1d_SME_Ztx4_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x4xVL;
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                  else
+                                    {
+                                      if (((word >> 15) & 0x1) == 0)
+                                        {
+                                          if (((word >> 29) & 0x1) == 0)
+                                            {
+                                              if (((word >> 30) & 0x1) == 0)
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     x0000001010xxxxx0xxxxxxxxxxx1xxx.  */
+                                                  return A64_OPID_81400008_ftmopa_SME_ZAda_1b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
+                                                }
+                                              else
+                                                {
+                                                  if (((word >> 4) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 5) & 0x1) == 0)
                                                         {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx0xx0xxxxxx110xxx.  */
-                                                          return A64_OPID_c1500030_uvdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                          if (((word >> 12) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx0xx0xxxxxx001xxx.  */
+                                                              return A64_OPID_c1500008_fvdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx0xx1xxxxxx001xxx.  */
+                                                              return A64_OPID_c1501008_fdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                            }
                                                         }
                                                       else
                                                         {
                                                           /* 33222222222211111111110000000000
                                                              10987654321098765432109876543210
-                                                             xxx000010101xxxx1xx0xxxxxx110xxx.  */
-                                                          return A64_OPID_c1508030_uvdot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
+                                                             x1000001010xxxxx0xxxxxxxxx101xxx.  */
+                                                          return A64_OPID_c1501028_usdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
                                                         }
                                                     }
                                                   else
                                                     {
-                                                      if (((word >> 15) & 0x1) == 0)
+                                                      if (((word >> 5) & 0x1) == 0)
                                                         {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx0xx1xxxxxx110xxx.  */
-                                                          return A64_OPID_c1501030_udot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                          if (((word >> 12) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx0xx0xxxxxx011xxx.  */
+                                                              return A64_OPID_c1500018_bfvdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx0xx1xxxxxx011xxx.  */
+                                                              return A64_OPID_c1501018_bfdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                            }
                                                         }
                                                       else
                                                         {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx1xx1xxxxxx110xxx.  */
-                                                          return A64_OPID_c1509030_udot_SME_ZA_array_off3_0_SME_Znx4_SME_Zm_INDEX2;
+                                                          if (((word >> 12) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx0xx0xxxxxx111xxx.  */
+                                                              return A64_OPID_c1500038_fdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x1000001010xxxxx0xx1xxxxxx111xxx.  */
+                                                              return A64_OPID_c1501038_sudot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
+                                                            }
                                                         }
                                                     }
                                                 }
                                             }
-                                        }
-                                    }
-                                  else
-                                    {
-                                      if (((word >> 15) & 0x1) == 0)
-                                        {
-                                          if (((word >> 20) & 0x1) == 0)
+                                          else
                                             {
                                               if (((word >> 13) & 0x1) == 0)
                                                 {
@@ -2576,14 +2733,14 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                                     {
                                                       /* 33222222222211111111110000000000
                                                          10987654321098765432109876543210
-                                                         xxx000010100xxxx000xxxxxxxxx1xxx.  */
+                                                         xx100001010xxxxx000xxxxxxxxx1xxx.  */
                                                       return A64_OPID_a1400008_ldnt1b_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
                                                     }
                                                   else
                                                     {
                                                       /* 33222222222211111111110000000000
                                                          10987654321098765432109876543210
-                                                         xxx000010100xxxx010xxxxxxxxx1xxx.  */
+                                                         xx100001010xxxxx010xxxxxxxxx1xxx.  */
                                                       return A64_OPID_a1404008_ldnt1w_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
                                                     }
                                                 }
@@ -2593,89 +2750,99 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                                     {
                                                       /* 33222222222211111111110000000000
                                                          10987654321098765432109876543210
-                                                         xxx000010100xxxx001xxxxxxxxx1xxx.  */
+                                                         xx100001010xxxxx001xxxxxxxxx1xxx.  */
                                                       return A64_OPID_a1402008_ldnt1h_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
                                                     }
                                                   else
                                                     {
                                                       /* 33222222222211111111110000000000
                                                          10987654321098765432109876543210
-                                                         xxx000010100xxxx011xxxxxxxxx1xxx.  */
+                                                         xx100001010xxxxx011xxxxxxxxx1xxx.  */
                                                       return A64_OPID_a1406008_ldnt1d_SME_Ztx2_STRIDED_SME_PNg3_SVE_ADDR_RI_S4x2xVL;
                                                     }
                                                 }
                                             }
-                                          else
+                                        }
+                                      else
+                                        {
+                                          if (((word >> 29) & 0x1) == 0)
                                             {
-                                              if (((word >> 4) & 0x1) == 0)
+                                              if (((word >> 30) & 0x1) == 0)
                                                 {
-                                                  if (((word >> 5) & 0x1) == 0)
-                                                    {
-                                                      if (((word >> 12) & 0x1) == 0)
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx0xx0xxxxxx001xxx.  */
-                                                          return A64_OPID_c1500008_fvdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
-                                                        }
-                                                      else
-                                                        {
-                                                          /* 33222222222211111111110000000000
-                                                             10987654321098765432109876543210
-                                                             xxx000010101xxxx0xx1xxxxxx001xxx.  */
-                                                          return A64_OPID_c1501008_fdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
-                                                        }
-                                                    }
-                                                  else
-                                                    {
-                                                      /* 33222222222211111111110000000000
-                                                         10987654321098765432109876543210
-                                                         xxx000010101xxxx0xxxxxxxxx101xxx.  */
-                                                      return A64_OPID_c1501028_usdot_SME_ZA_array_off3_0_SME_Znx2_SME_Zm_INDEX2;
-                                                    }
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     x0000001010xxxxx1xxxxxxxxxxx1xxx.  */
+                                                  return A64_OPID_81408008_utmopa_SME_ZAda_2b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
                                                 }
                                               else
                                                 {
-                                                  if (((word >> 5) & 0x1) == 0)
+                                                  if (((word >> 4) & 0x1) == 0)
                                                     {
-                                                      if (((word >> 12) & 0x1) == 0)
+                                                      if (((word >> 5) & 0x1) == 0)
                                                         {
-                                                          /* 33222222222211111111110000000000
-                                                            [...]

[diff truncated at 100000 bytes]


More information about the Binutils-cvs mailing list