[binutils-gdb] aarch64: Add support for FEAT_SME_MOP4

Alice Carlotti acarlotti@sourceware.org
Fri Oct 10 00:37:01 GMT 2025


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

commit 64aae286f69d2af855aeddc03113b13391eca058
Author: Alice Carlotti <alice.carlotti@arm.com>
Date:   Tue Oct 7 23:40:26 2025 +0100

    aarch64: Add support for FEAT_SME_MOP4

Diff:
---
 gas/config/tc-aarch64.c                      |    5 +
 gas/doc/c-aarch64.texi                       |    2 +
 gas/testsuite/gas/aarch64/sme-mop4-b16b16.d  |   41 +
 gas/testsuite/gas/aarch64/sme-mop4-b16b16.s  |   33 +
 gas/testsuite/gas/aarch64/sme-mop4-f16f16.d  |   41 +
 gas/testsuite/gas/aarch64/sme-mop4-f16f16.s  |   33 +
 gas/testsuite/gas/aarch64/sme-mop4-f64f64.d  |   41 +
 gas/testsuite/gas/aarch64/sme-mop4-f64f64.s  |   33 +
 gas/testsuite/gas/aarch64/sme-mop4-f8f16.d   |   25 +
 gas/testsuite/gas/aarch64/sme-mop4-f8f16.s   |   16 +
 gas/testsuite/gas/aarch64/sme-mop4-f8f32.d   |   25 +
 gas/testsuite/gas/aarch64/sme-mop4-f8f32.s   |   16 +
 gas/testsuite/gas/aarch64/sme-mop4-i16i64.d  |  137 ++
 gas/testsuite/gas/aarch64/sme-mop4-i16i64.s  |  135 ++
 gas/testsuite/gas/aarch64/sme-mop4-invalid.d |    2 +
 gas/testsuite/gas/aarch64/sme-mop4-invalid.l |   15 +
 gas/testsuite/gas/aarch64/sme-mop4-invalid.s |   14 +
 gas/testsuite/gas/aarch64/sme-mop4.d         |  297 +++++
 gas/testsuite/gas/aarch64/sme-mop4.s         |  305 +++++
 include/opcode/aarch64.h                     |   10 +-
 opcodes/aarch64-asm-2.c                      |    4 +
 opcodes/aarch64-dis-2.c                      | 1736 +++++++++++++++++++++++---
 opcodes/aarch64-opc-2.c                      |    4 +
 opcodes/aarch64-opc.c                        |   32 +-
 opcodes/aarch64-opc.h                        |    2 +
 opcodes/aarch64-tbl-2.h                      |  136 ++
 opcodes/aarch64-tbl.h                        |  196 +++
 27 files changed, 3147 insertions(+), 189 deletions(-)

diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 4a66642cc04..59d950663a8 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -6864,6 +6864,8 @@ parse_operands (char *str, const aarch64_opcode *opcode)
 	case AARCH64_OPND_SVE_Zt:
 	case AARCH64_OPND_SME_Zm:
 	case AARCH64_OPND_SME_Zm_17:
+	case AARCH64_OPND_SME_Zn_6_3:
+	case AARCH64_OPND_SME_Zm_17_3:
 	  reg_type = REG_TYPE_Z;
 	  goto vector_reg;
 
@@ -7039,6 +7041,8 @@ parse_operands (char *str, const aarch64_opcode *opcode)
 	case AARCH64_OPND_SVE_ZtxN:
 	case AARCH64_OPND_SME_Zdnx2:
 	case AARCH64_OPND_SME_Zdnx4:
+	case AARCH64_OPND_SME_Znx2_6_3:
+	case AARCH64_OPND_SME_Zmx2_17_3:
 	case AARCH64_OPND_SME_Zmx2:
 	case AARCH64_OPND_SME_Zmx4:
 	case AARCH64_OPND_SME_Znx2:
@@ -10895,6 +10899,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
   {"sme2p2",		AARCH64_FEATURE (SME2p2), AARCH64_FEATURE (SME2p1)},
   {"gcie",		AARCH64_FEATURE (GCIE), AARCH64_NO_FEATURES},
   {"sme-tmop",		AARCH64_FEATURE (SME_TMOP), AARCH64_FEATURE (SME2)},
+  {"sme-mop4",		AARCH64_FEATURE (SME_MOP4), 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 5176757c235..2f95f91a66e 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-mop4} @tab @code{sme2}
+ @tab Enable SME Quarter-tile outer product instructions.
 @item @code{sme-tmop} @tab @code{sme2}
  @tab Enable SME structured sparsity outer product instructions.
 @item @code{sme2} @tab @code{sme}
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-b16b16.d b/gas/testsuite/gas/aarch64/sme-mop4-b16b16.d
new file mode 100644
index 00000000000..ff6370f6c68
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-b16b16.d
@@ -0,0 +1,41 @@
+#as: -march=armv8-a+sme-mop4+sme-b16b16
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	81200008 	bfmop4a	za0\.h, z0\.h, z16\.h
+ *[0-9a-f]+:	81200009 	bfmop4a	za1\.h, z0\.h, z16\.h
+ *[0-9a-f]+:	812001c8 	bfmop4a	za0\.h, z14\.h, z16\.h
+ *[0-9a-f]+:	812e0008 	bfmop4a	za0\.h, z0\.h, z30\.h
+ *[0-9a-f]+:	81300008 	bfmop4a	za0\.h, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81300009 	bfmop4a	za1\.h, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813001c8 	bfmop4a	za0\.h, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813e0008 	bfmop4a	za0\.h, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81200208 	bfmop4a	za0\.h, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	81200209 	bfmop4a	za1\.h, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	812003c8 	bfmop4a	za0\.h, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	812e0208 	bfmop4a	za0\.h, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	81300208 	bfmop4a	za0\.h, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81300209 	bfmop4a	za1\.h, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813003c8 	bfmop4a	za0\.h, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813e0208 	bfmop4a	za0\.h, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81200018 	bfmop4s	za0\.h, z0\.h, z16\.h
+ *[0-9a-f]+:	81200019 	bfmop4s	za1\.h, z0\.h, z16\.h
+ *[0-9a-f]+:	812001d8 	bfmop4s	za0\.h, z14\.h, z16\.h
+ *[0-9a-f]+:	812e0018 	bfmop4s	za0\.h, z0\.h, z30\.h
+ *[0-9a-f]+:	81300018 	bfmop4s	za0\.h, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81300019 	bfmop4s	za1\.h, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813001d8 	bfmop4s	za0\.h, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813e0018 	bfmop4s	za0\.h, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81200218 	bfmop4s	za0\.h, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	81200219 	bfmop4s	za1\.h, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	812003d8 	bfmop4s	za0\.h, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	812e0218 	bfmop4s	za0\.h, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	81300218 	bfmop4s	za0\.h, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81300219 	bfmop4s	za1\.h, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813003d8 	bfmop4s	za0\.h, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813e0218 	bfmop4s	za0\.h, {z0\.h-z1\.h}, {z30\.h-z31\.h}
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-b16b16.s b/gas/testsuite/gas/aarch64/sme-mop4-b16b16.s
new file mode 100644
index 00000000000..56683151fa7
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-b16b16.s
@@ -0,0 +1,33 @@
+	bfmop4a	za0.h, z0.h, z16.h
+	bfmop4a	za1.h, z0.h, z16.h
+	bfmop4a	za0.h, z14.h, z16.h
+	bfmop4a	za0.h, z0.h, z30.h
+	bfmop4a	za0.h, z0.h, { z16.h-z17.h }
+	bfmop4a	za1.h, z0.h, { z16.h-z17.h }
+	bfmop4a	za0.h, z14.h, { z16.h-z17.h }
+	bfmop4a	za0.h, z0.h, { z30.h-z31.h }
+	bfmop4a	za0.h, { z0.h-z1.h }, z16.h
+	bfmop4a	za1.h, { z0.h-z1.h }, z16.h
+	bfmop4a	za0.h, { z14.h-z15.h }, z16.h
+	bfmop4a	za0.h, { z0.h-z1.h }, z30.h
+	bfmop4a	za0.h, { z0.h-z1.h }, { z16.h-z17.h }
+	bfmop4a	za1.h, { z0.h-z1.h }, { z16.h-z17.h }
+	bfmop4a	za0.h, { z14.h-z15.h }, { z16.h-z17.h }
+	bfmop4a	za0.h, { z0.h-z1.h }, { z30.h-z31.h }
+
+	bfmop4s	za0.h, z0.h, z16.h
+	bfmop4s	za1.h, z0.h, z16.h
+	bfmop4s	za0.h, z14.h, z16.h
+	bfmop4s	za0.h, z0.h, z30.h
+	bfmop4s	za0.h, z0.h, { z16.h-z17.h }
+	bfmop4s	za1.h, z0.h, { z16.h-z17.h }
+	bfmop4s	za0.h, z14.h, { z16.h-z17.h }
+	bfmop4s	za0.h, z0.h, { z30.h-z31.h }
+	bfmop4s	za0.h, { z0.h-z1.h }, z16.h
+	bfmop4s	za1.h, { z0.h-z1.h }, z16.h
+	bfmop4s	za0.h, { z14.h-z15.h }, z16.h
+	bfmop4s	za0.h, { z0.h-z1.h }, z30.h
+	bfmop4s	za0.h, { z0.h-z1.h }, { z16.h-z17.h }
+	bfmop4s	za1.h, { z0.h-z1.h }, { z16.h-z17.h }
+	bfmop4s	za0.h, { z14.h-z15.h }, { z16.h-z17.h }
+	bfmop4s	za0.h, { z0.h-z1.h }, { z30.h-z31.h }
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-f16f16.d b/gas/testsuite/gas/aarch64/sme-mop4-f16f16.d
new file mode 100644
index 00000000000..f47689257a2
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-f16f16.d
@@ -0,0 +1,41 @@
+#as: -march=armv8-a+sme-mop4+sme-f16f16
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	81000008 	fmop4a	za0\.h, z0\.h, z16\.h
+ *[0-9a-f]+:	81000009 	fmop4a	za1\.h, z0\.h, z16\.h
+ *[0-9a-f]+:	810001c8 	fmop4a	za0\.h, z14\.h, z16\.h
+ *[0-9a-f]+:	810e0008 	fmop4a	za0\.h, z0\.h, z30\.h
+ *[0-9a-f]+:	81100008 	fmop4a	za0\.h, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81100009 	fmop4a	za1\.h, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811001c8 	fmop4a	za0\.h, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e0008 	fmop4a	za0\.h, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81000208 	fmop4a	za0\.h, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	81000209 	fmop4a	za1\.h, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	810003c8 	fmop4a	za0\.h, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	810e0208 	fmop4a	za0\.h, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	81100208 	fmop4a	za0\.h, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81100209 	fmop4a	za1\.h, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811003c8 	fmop4a	za0\.h, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e0208 	fmop4a	za0\.h, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81000018 	fmop4s	za0\.h, z0\.h, z16\.h
+ *[0-9a-f]+:	81000019 	fmop4s	za1\.h, z0\.h, z16\.h
+ *[0-9a-f]+:	810001d8 	fmop4s	za0\.h, z14\.h, z16\.h
+ *[0-9a-f]+:	810e0018 	fmop4s	za0\.h, z0\.h, z30\.h
+ *[0-9a-f]+:	81100018 	fmop4s	za0\.h, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81100019 	fmop4s	za1\.h, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811001d8 	fmop4s	za0\.h, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e0018 	fmop4s	za0\.h, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81000218 	fmop4s	za0\.h, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	81000219 	fmop4s	za1\.h, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	810003d8 	fmop4s	za0\.h, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	810e0218 	fmop4s	za0\.h, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	81100218 	fmop4s	za0\.h, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81100219 	fmop4s	za1\.h, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811003d8 	fmop4s	za0\.h, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e0218 	fmop4s	za0\.h, {z0\.h-z1\.h}, {z30\.h-z31\.h}
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-f16f16.s b/gas/testsuite/gas/aarch64/sme-mop4-f16f16.s
new file mode 100644
index 00000000000..bf4b9596a27
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-f16f16.s
@@ -0,0 +1,33 @@
+	fmop4a	za0.h, z0.h, z16.h
+	fmop4a	za1.h, z0.h, z16.h
+	fmop4a	za0.h, z14.h, z16.h
+	fmop4a	za0.h, z0.h, z30.h
+	fmop4a	za0.h, z0.h, { z16.h-z17.h }
+	fmop4a	za1.h, z0.h, { z16.h-z17.h }
+	fmop4a	za0.h, z14.h, { z16.h-z17.h }
+	fmop4a	za0.h, z0.h, { z30.h-z31.h }
+	fmop4a	za0.h, { z0.h-z1.h }, z16.h
+	fmop4a	za1.h, { z0.h-z1.h }, z16.h
+	fmop4a	za0.h, { z14.h-z15.h }, z16.h
+	fmop4a	za0.h, { z0.h-z1.h }, z30.h
+	fmop4a	za0.h, { z0.h-z1.h }, { z16.h-z17.h }
+	fmop4a	za1.h, { z0.h-z1.h }, { z16.h-z17.h }
+	fmop4a	za0.h, { z14.h-z15.h }, { z16.h-z17.h }
+	fmop4a	za0.h, { z0.h-z1.h }, { z30.h-z31.h }
+
+	fmop4s	za0.h, z0.h, z16.h
+	fmop4s	za1.h, z0.h, z16.h
+	fmop4s	za0.h, z14.h, z16.h
+	fmop4s	za0.h, z0.h, z30.h
+	fmop4s	za0.h, z0.h, { z16.h-z17.h }
+	fmop4s	za1.h, z0.h, { z16.h-z17.h }
+	fmop4s	za0.h, z14.h, { z16.h-z17.h }
+	fmop4s	za0.h, z0.h, { z30.h-z31.h }
+	fmop4s	za0.h, { z0.h-z1.h }, z16.h
+	fmop4s	za1.h, { z0.h-z1.h }, z16.h
+	fmop4s	za0.h, { z14.h-z15.h }, z16.h
+	fmop4s	za0.h, { z0.h-z1.h }, z30.h
+	fmop4s	za0.h, { z0.h-z1.h }, { z16.h-z17.h }
+	fmop4s	za1.h, { z0.h-z1.h }, { z16.h-z17.h }
+	fmop4s	za0.h, { z14.h-z15.h }, { z16.h-z17.h }
+	fmop4s	za0.h, { z0.h-z1.h }, { z30.h-z31.h }
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-f64f64.d b/gas/testsuite/gas/aarch64/sme-mop4-f64f64.d
new file mode 100644
index 00000000000..37da27de44f
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-f64f64.d
@@ -0,0 +1,41 @@
+#as: -march=armv8-a+sme-mop4+sme-f64f64
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	80c00008 	fmop4a	za0\.d, z0\.d, z16\.d
+ *[0-9a-f]+:	80c0000f 	fmop4a	za7\.d, z0\.d, z16\.d
+ *[0-9a-f]+:	80c001c8 	fmop4a	za0\.d, z14\.d, z16\.d
+ *[0-9a-f]+:	80ce0008 	fmop4a	za0\.d, z0\.d, z30\.d
+ *[0-9a-f]+:	80d00008 	fmop4a	za0\.d, z0\.d, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80d0000f 	fmop4a	za7\.d, z0\.d, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80d001c8 	fmop4a	za0\.d, z14\.d, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80de0008 	fmop4a	za0\.d, z0\.d, {z30\.d-z31\.d}
+ *[0-9a-f]+:	80c00208 	fmop4a	za0\.d, {z0\.d-z1\.d}, z16\.d
+ *[0-9a-f]+:	80c0020f 	fmop4a	za7\.d, {z0\.d-z1\.d}, z16\.d
+ *[0-9a-f]+:	80c003c8 	fmop4a	za0\.d, {z14\.d-z15\.d}, z16\.d
+ *[0-9a-f]+:	80ce0208 	fmop4a	za0\.d, {z0\.d-z1\.d}, z30\.d
+ *[0-9a-f]+:	80d00208 	fmop4a	za0\.d, {z0\.d-z1\.d}, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80d0020f 	fmop4a	za7\.d, {z0\.d-z1\.d}, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80d003c8 	fmop4a	za0\.d, {z14\.d-z15\.d}, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80de0208 	fmop4a	za0\.d, {z0\.d-z1\.d}, {z30\.d-z31\.d}
+ *[0-9a-f]+:	80c00018 	fmop4s	za0\.d, z0\.d, z16\.d
+ *[0-9a-f]+:	80c0001f 	fmop4s	za7\.d, z0\.d, z16\.d
+ *[0-9a-f]+:	80c001d8 	fmop4s	za0\.d, z14\.d, z16\.d
+ *[0-9a-f]+:	80ce0018 	fmop4s	za0\.d, z0\.d, z30\.d
+ *[0-9a-f]+:	80d00018 	fmop4s	za0\.d, z0\.d, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80d0001f 	fmop4s	za7\.d, z0\.d, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80d001d8 	fmop4s	za0\.d, z14\.d, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80de0018 	fmop4s	za0\.d, z0\.d, {z30\.d-z31\.d}
+ *[0-9a-f]+:	80c00218 	fmop4s	za0\.d, {z0\.d-z1\.d}, z16\.d
+ *[0-9a-f]+:	80c0021f 	fmop4s	za7\.d, {z0\.d-z1\.d}, z16\.d
+ *[0-9a-f]+:	80c003d8 	fmop4s	za0\.d, {z14\.d-z15\.d}, z16\.d
+ *[0-9a-f]+:	80ce0218 	fmop4s	za0\.d, {z0\.d-z1\.d}, z30\.d
+ *[0-9a-f]+:	80d00218 	fmop4s	za0\.d, {z0\.d-z1\.d}, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80d0021f 	fmop4s	za7\.d, {z0\.d-z1\.d}, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80d003d8 	fmop4s	za0\.d, {z14\.d-z15\.d}, {z16\.d-z17\.d}
+ *[0-9a-f]+:	80de0218 	fmop4s	za0\.d, {z0\.d-z1\.d}, {z30\.d-z31\.d}
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-f64f64.s b/gas/testsuite/gas/aarch64/sme-mop4-f64f64.s
new file mode 100644
index 00000000000..934bf72534b
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-f64f64.s
@@ -0,0 +1,33 @@
+	fmop4a	za0.d, z0.d, z16.d
+	fmop4a	za7.d, z0.d, z16.d
+	fmop4a	za0.d, z14.d, z16.d
+	fmop4a	za0.d, z0.d, z30.d
+	fmop4a	za0.d, z0.d, { z16.d-z17.d }
+	fmop4a	za7.d, z0.d, { z16.d-z17.d }
+	fmop4a	za0.d, z14.d, { z16.d-z17.d }
+	fmop4a	za0.d, z0.d, { z30.d-z31.d }
+	fmop4a	za0.d, { z0.d-z1.d }, z16.d
+	fmop4a	za7.d, { z0.d-z1.d }, z16.d
+	fmop4a	za0.d, { z14.d-z15.d }, z16.d
+	fmop4a	za0.d, { z0.d-z1.d }, z30.d
+	fmop4a	za0.d, { z0.d-z1.d }, { z16.d-z17.d }
+	fmop4a	za7.d, { z0.d-z1.d }, { z16.d-z17.d }
+	fmop4a	za0.d, { z14.d-z15.d }, { z16.d-z17.d }
+	fmop4a	za0.d, { z0.d-z1.d }, { z30.d-z31.d }
+
+	fmop4s	za0.d, z0.d, z16.d
+	fmop4s	za7.d, z0.d, z16.d
+	fmop4s	za0.d, z14.d, z16.d
+	fmop4s	za0.d, z0.d, z30.d
+	fmop4s	za0.d, z0.d, { z16.d-z17.d }
+	fmop4s	za7.d, z0.d, { z16.d-z17.d }
+	fmop4s	za0.d, z14.d, { z16.d-z17.d }
+	fmop4s	za0.d, z0.d, { z30.d-z31.d }
+	fmop4s	za0.d, { z0.d-z1.d }, z16.d
+	fmop4s	za7.d, { z0.d-z1.d }, z16.d
+	fmop4s	za0.d, { z14.d-z15.d }, z16.d
+	fmop4s	za0.d, { z0.d-z1.d }, z30.d
+	fmop4s	za0.d, { z0.d-z1.d }, { z16.d-z17.d }
+	fmop4s	za7.d, { z0.d-z1.d }, { z16.d-z17.d }
+	fmop4s	za0.d, { z14.d-z15.d }, { z16.d-z17.d }
+	fmop4s	za0.d, { z0.d-z1.d }, { z30.d-z31.d }
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-f8f16.d b/gas/testsuite/gas/aarch64/sme-mop4-f8f16.d
new file mode 100644
index 00000000000..02b0d3aa03f
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-f8f16.d
@@ -0,0 +1,25 @@
+#as: -march=armv8-a+sme-mop4+sme-f8f16
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	80200008 	fmop4a	za0\.h, z0\.b, z16\.b
+ *[0-9a-f]+:	80200009 	fmop4a	za1\.h, z0\.b, z16\.b
+ *[0-9a-f]+:	802001c8 	fmop4a	za0\.h, z14\.b, z16\.b
+ *[0-9a-f]+:	802e0008 	fmop4a	za0\.h, z0\.b, z30\.b
+ *[0-9a-f]+:	80300008 	fmop4a	za0\.h, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80300009 	fmop4a	za1\.h, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803001c8 	fmop4a	za0\.h, z14\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803e0008 	fmop4a	za0\.h, z0\.b, {z30\.b-z31\.b}
+ *[0-9a-f]+:	80200208 	fmop4a	za0\.h, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	80200209 	fmop4a	za1\.h, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	802003c8 	fmop4a	za0\.h, {z14\.b-z15\.b}, z16\.b
+ *[0-9a-f]+:	802e0208 	fmop4a	za0\.h, {z0\.b-z1\.b}, z30\.b
+ *[0-9a-f]+:	80300208 	fmop4a	za0\.h, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80300209 	fmop4a	za1\.h, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803003c8 	fmop4a	za0\.h, {z14\.b-z15\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803e0208 	fmop4a	za0\.h, {z0\.b-z1\.b}, {z30\.b-z31\.b}
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-f8f16.s b/gas/testsuite/gas/aarch64/sme-mop4-f8f16.s
new file mode 100644
index 00000000000..438f7dd4209
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-f8f16.s
@@ -0,0 +1,16 @@
+	fmop4a	za0.h, z0.b, z16.b
+	fmop4a	za1.h, z0.b, z16.b
+	fmop4a	za0.h, z14.b, z16.b
+	fmop4a	za0.h, z0.b, z30.b
+	fmop4a	za0.h, z0.b, { z16.b-z17.b }
+	fmop4a	za1.h, z0.b, { z16.b-z17.b }
+	fmop4a	za0.h, z14.b, { z16.b-z17.b }
+	fmop4a	za0.h, z0.b, { z30.b-z31.b }
+	fmop4a	za0.h, { z0.b-z1.b }, z16.b
+	fmop4a	za1.h, { z0.b-z1.b }, z16.b
+	fmop4a	za0.h, { z14.b-z15.b }, z16.b
+	fmop4a	za0.h, { z0.b-z1.b }, z30.b
+	fmop4a	za0.h, { z0.b-z1.b }, { z16.b-z17.b }
+	fmop4a	za1.h, { z0.b-z1.b }, { z16.b-z17.b }
+	fmop4a	za0.h, { z14.b-z15.b }, { z16.b-z17.b }
+	fmop4a	za0.h, { z0.b-z1.b }, { z30.b-z31.b }
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-f8f32.d b/gas/testsuite/gas/aarch64/sme-mop4-f8f32.d
new file mode 100644
index 00000000000..0cbe6456588
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-f8f32.d
@@ -0,0 +1,25 @@
+#as: -march=armv8-a+sme-mop4+sme-f8f32
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	80200000 	fmop4a	za0\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	80200003 	fmop4a	za3\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	802001c0 	fmop4a	za0\.s, z14\.b, z16\.b
+ *[0-9a-f]+:	802e0000 	fmop4a	za0\.s, z0\.b, z30\.b
+ *[0-9a-f]+:	80300000 	fmop4a	za0\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80300003 	fmop4a	za3\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803001c0 	fmop4a	za0\.s, z14\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803e0000 	fmop4a	za0\.s, z0\.b, {z30\.b-z31\.b}
+ *[0-9a-f]+:	80200200 	fmop4a	za0\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	80200203 	fmop4a	za3\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	802003c0 	fmop4a	za0\.s, {z14\.b-z15\.b}, z16\.b
+ *[0-9a-f]+:	802e0200 	fmop4a	za0\.s, {z0\.b-z1\.b}, z30\.b
+ *[0-9a-f]+:	80300200 	fmop4a	za0\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80300203 	fmop4a	za3\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803003c0 	fmop4a	za0\.s, {z14\.b-z15\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803e0200 	fmop4a	za0\.s, {z0\.b-z1\.b}, {z30\.b-z31\.b}
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-f8f32.s b/gas/testsuite/gas/aarch64/sme-mop4-f8f32.s
new file mode 100644
index 00000000000..78f5c307ec3
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-f8f32.s
@@ -0,0 +1,16 @@
+	fmop4a	za0.s, z0.b, z16.b
+	fmop4a	za3.s, z0.b, z16.b
+	fmop4a	za0.s, z14.b, z16.b
+	fmop4a	za0.s, z0.b, z30.b
+	fmop4a	za0.s, z0.b, { z16.b-z17.b }
+	fmop4a	za3.s, z0.b, { z16.b-z17.b }
+	fmop4a	za0.s, z14.b, { z16.b-z17.b }
+	fmop4a	za0.s, z0.b, { z30.b-z31.b }
+	fmop4a	za0.s, { z0.b-z1.b }, z16.b
+	fmop4a	za3.s, { z0.b-z1.b }, z16.b
+	fmop4a	za0.s, { z14.b-z15.b }, z16.b
+	fmop4a	za0.s, { z0.b-z1.b }, z30.b
+	fmop4a	za0.s, { z0.b-z1.b }, { z16.b-z17.b }
+	fmop4a	za3.s, { z0.b-z1.b }, { z16.b-z17.b }
+	fmop4a	za0.s, { z14.b-z15.b }, { z16.b-z17.b }
+	fmop4a	za0.s, { z0.b-z1.b }, { z30.b-z31.b }
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-i16i64.d b/gas/testsuite/gas/aarch64/sme-mop4-i16i64.d
new file mode 100644
index 00000000000..93459ef3994
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-i16i64.d
@@ -0,0 +1,137 @@
+#as: -march=armv8-a+sme-mop4+sme-i16i64
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	a0c00008 	smop4a	za0\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a0c0000f 	smop4a	za7\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a0c001c8 	smop4a	za0\.d, z14\.h, z16\.h
+ *[0-9a-f]+:	a0ce0008 	smop4a	za0\.d, z0\.h, z30\.h
+ *[0-9a-f]+:	a0d00008 	smop4a	za0\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0d0000f 	smop4a	za7\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0d001c8 	smop4a	za0\.d, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0de0008 	smop4a	za0\.d, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a0c00208 	smop4a	za0\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a0c0020f 	smop4a	za7\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a0c003c8 	smop4a	za0\.d, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	a0ce0208 	smop4a	za0\.d, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	a0d00208 	smop4a	za0\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0d0020f 	smop4a	za7\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0d003c8 	smop4a	za0\.d, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0de0208 	smop4a	za0\.d, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a0c00018 	smop4s	za0\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a0c0001f 	smop4s	za7\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a0c001d8 	smop4s	za0\.d, z14\.h, z16\.h
+ *[0-9a-f]+:	a0ce0018 	smop4s	za0\.d, z0\.h, z30\.h
+ *[0-9a-f]+:	a0d00018 	smop4s	za0\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0d0001f 	smop4s	za7\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0d001d8 	smop4s	za0\.d, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0de0018 	smop4s	za0\.d, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a0c00218 	smop4s	za0\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a0c0021f 	smop4s	za7\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a0c003d8 	smop4s	za0\.d, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	a0ce0218 	smop4s	za0\.d, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	a0d00218 	smop4s	za0\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0d0021f 	smop4s	za7\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0d003d8 	smop4s	za0\.d, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0de0218 	smop4s	za0\.d, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a0e00008 	sumop4a	za0\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a0e0000f 	sumop4a	za7\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a0e001c8 	sumop4a	za0\.d, z14\.h, z16\.h
+ *[0-9a-f]+:	a0ee0008 	sumop4a	za0\.d, z0\.h, z30\.h
+ *[0-9a-f]+:	a0f00008 	sumop4a	za0\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0f0000f 	sumop4a	za7\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0f001c8 	sumop4a	za0\.d, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0fe0008 	sumop4a	za0\.d, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a0e00208 	sumop4a	za0\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a0e0020f 	sumop4a	za7\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a0e003c8 	sumop4a	za0\.d, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	a0ee0208 	sumop4a	za0\.d, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	a0f00208 	sumop4a	za0\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0f0020f 	sumop4a	za7\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0f003c8 	sumop4a	za0\.d, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0fe0208 	sumop4a	za0\.d, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a0e00018 	sumop4s	za0\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a0e0001f 	sumop4s	za7\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a0e001d8 	sumop4s	za0\.d, z14\.h, z16\.h
+ *[0-9a-f]+:	a0ee0018 	sumop4s	za0\.d, z0\.h, z30\.h
+ *[0-9a-f]+:	a0f00018 	sumop4s	za0\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0f0001f 	sumop4s	za7\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0f001d8 	sumop4s	za0\.d, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0fe0018 	sumop4s	za0\.d, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a0e00218 	sumop4s	za0\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a0e0021f 	sumop4s	za7\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a0e003d8 	sumop4s	za0\.d, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	a0ee0218 	sumop4s	za0\.d, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	a0f00218 	sumop4s	za0\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0f0021f 	sumop4s	za7\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0f003d8 	sumop4s	za0\.d, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a0fe0218 	sumop4s	za0\.d, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a1e00008 	umop4a	za0\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a1e0000f 	umop4a	za7\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a1e001c8 	umop4a	za0\.d, z14\.h, z16\.h
+ *[0-9a-f]+:	a1ee0008 	umop4a	za0\.d, z0\.h, z30\.h
+ *[0-9a-f]+:	a1f00008 	umop4a	za0\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1f0000f 	umop4a	za7\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1f001c8 	umop4a	za0\.d, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1fe0008 	umop4a	za0\.d, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a1e00208 	umop4a	za0\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a1e0020f 	umop4a	za7\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a1e003c8 	umop4a	za0\.d, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	a1ee0208 	umop4a	za0\.d, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	a1f00208 	umop4a	za0\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1f0020f 	umop4a	za7\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1f003c8 	umop4a	za0\.d, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1fe0208 	umop4a	za0\.d, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a1e00018 	umop4s	za0\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a1e0001f 	umop4s	za7\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a1e001d8 	umop4s	za0\.d, z14\.h, z16\.h
+ *[0-9a-f]+:	a1ee0018 	umop4s	za0\.d, z0\.h, z30\.h
+ *[0-9a-f]+:	a1f00018 	umop4s	za0\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1f0001f 	umop4s	za7\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1f001d8 	umop4s	za0\.d, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1fe0018 	umop4s	za0\.d, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a1e00218 	umop4s	za0\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a1e0021f 	umop4s	za7\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a1e003d8 	umop4s	za0\.d, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	a1ee0218 	umop4s	za0\.d, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	a1f00218 	umop4s	za0\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1f0021f 	umop4s	za7\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1f003d8 	umop4s	za0\.d, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1fe0218 	umop4s	za0\.d, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a1c00008 	usmop4a	za0\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a1c0000f 	usmop4a	za7\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a1c001c8 	usmop4a	za0\.d, z14\.h, z16\.h
+ *[0-9a-f]+:	a1ce0008 	usmop4a	za0\.d, z0\.h, z30\.h
+ *[0-9a-f]+:	a1d00008 	usmop4a	za0\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1d0000f 	usmop4a	za7\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1d001c8 	usmop4a	za0\.d, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1de0008 	usmop4a	za0\.d, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a1c00208 	usmop4a	za0\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a1c0020f 	usmop4a	za7\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a1c003c8 	usmop4a	za0\.d, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	a1ce0208 	usmop4a	za0\.d, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	a1d00208 	usmop4a	za0\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1d0020f 	usmop4a	za7\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1d003c8 	usmop4a	za0\.d, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1de0208 	usmop4a	za0\.d, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a1c00018 	usmop4s	za0\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a1c0001f 	usmop4s	za7\.d, z0\.h, z16\.h
+ *[0-9a-f]+:	a1c001d8 	usmop4s	za0\.d, z14\.h, z16\.h
+ *[0-9a-f]+:	a1ce0018 	usmop4s	za0\.d, z0\.h, z30\.h
+ *[0-9a-f]+:	a1d00018 	usmop4s	za0\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1d0001f 	usmop4s	za7\.d, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1d001d8 	usmop4s	za0\.d, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1de0018 	usmop4s	za0\.d, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	a1c00218 	usmop4s	za0\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a1c0021f 	usmop4s	za7\.d, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	a1c003d8 	usmop4s	za0\.d, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	a1ce0218 	usmop4s	za0\.d, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	a1d00218 	usmop4s	za0\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1d0021f 	usmop4s	za7\.d, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1d003d8 	usmop4s	za0\.d, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	a1de0218 	usmop4s	za0\.d, {z0\.h-z1\.h}, {z30\.h-z31\.h}
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-i16i64.s b/gas/testsuite/gas/aarch64/sme-mop4-i16i64.s
new file mode 100644
index 00000000000..cb6a36bf4bf
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-i16i64.s
@@ -0,0 +1,135 @@
+	smop4a	za0.d, z0.h, z16.h
+	smop4a	za7.d, z0.h, z16.h
+	smop4a	za0.d, z14.h, z16.h
+	smop4a	za0.d, z0.h, z30.h
+	smop4a	za0.d, z0.h, { z16.h-z17.h }
+	smop4a	za7.d, z0.h, { z16.h-z17.h }
+	smop4a	za0.d, z14.h, { z16.h-z17.h }
+	smop4a	za0.d, z0.h, { z30.h-z31.h }
+	smop4a	za0.d, { z0.h-z1.h }, z16.h
+	smop4a	za7.d, { z0.h-z1.h }, z16.h
+	smop4a	za0.d, { z14.h-z15.h }, z16.h
+	smop4a	za0.d, { z0.h-z1.h }, z30.h
+	smop4a	za0.d, { z0.h-z1.h }, { z16.h-z17.h }
+	smop4a	za7.d, { z0.h-z1.h }, { z16.h-z17.h }
+	smop4a	za0.d, { z14.h-z15.h }, { z16.h-z17.h }
+	smop4a	za0.d, { z0.h-z1.h }, { z30.h-z31.h }
+
+	smop4s	za0.d, z0.h, z16.h
+	smop4s	za7.d, z0.h, z16.h
+	smop4s	za0.d, z14.h, z16.h
+	smop4s	za0.d, z0.h, z30.h
+	smop4s	za0.d, z0.h, { z16.h-z17.h }
+	smop4s	za7.d, z0.h, { z16.h-z17.h }
+	smop4s	za0.d, z14.h, { z16.h-z17.h }
+	smop4s	za0.d, z0.h, { z30.h-z31.h }
+	smop4s	za0.d, { z0.h-z1.h }, z16.h
+	smop4s	za7.d, { z0.h-z1.h }, z16.h
+	smop4s	za0.d, { z14.h-z15.h }, z16.h
+	smop4s	za0.d, { z0.h-z1.h }, z30.h
+	smop4s	za0.d, { z0.h-z1.h }, { z16.h-z17.h }
+	smop4s	za7.d, { z0.h-z1.h }, { z16.h-z17.h }
+	smop4s	za0.d, { z14.h-z15.h }, { z16.h-z17.h }
+	smop4s	za0.d, { z0.h-z1.h }, { z30.h-z31.h }
+
+	sumop4a	za0.d, z0.h, z16.h
+	sumop4a	za7.d, z0.h, z16.h
+	sumop4a	za0.d, z14.h, z16.h
+	sumop4a	za0.d, z0.h, z30.h
+	sumop4a	za0.d, z0.h, { z16.h-z17.h }
+	sumop4a	za7.d, z0.h, { z16.h-z17.h }
+	sumop4a	za0.d, z14.h, { z16.h-z17.h }
+	sumop4a	za0.d, z0.h, { z30.h-z31.h }
+	sumop4a	za0.d, { z0.h-z1.h }, z16.h
+	sumop4a	za7.d, { z0.h-z1.h }, z16.h
+	sumop4a	za0.d, { z14.h-z15.h }, z16.h
+	sumop4a	za0.d, { z0.h-z1.h }, z30.h
+	sumop4a	za0.d, { z0.h-z1.h }, { z16.h-z17.h }
+	sumop4a	za7.d, { z0.h-z1.h }, { z16.h-z17.h }
+	sumop4a	za0.d, { z14.h-z15.h }, { z16.h-z17.h }
+	sumop4a	za0.d, { z0.h-z1.h }, { z30.h-z31.h }
+
+	sumop4s	za0.d, z0.h, z16.h
+	sumop4s	za7.d, z0.h, z16.h
+	sumop4s	za0.d, z14.h, z16.h
+	sumop4s	za0.d, z0.h, z30.h
+	sumop4s	za0.d, z0.h, { z16.h-z17.h }
+	sumop4s	za7.d, z0.h, { z16.h-z17.h }
+	sumop4s	za0.d, z14.h, { z16.h-z17.h }
+	sumop4s	za0.d, z0.h, { z30.h-z31.h }
+	sumop4s	za0.d, { z0.h-z1.h }, z16.h
+	sumop4s	za7.d, { z0.h-z1.h }, z16.h
+	sumop4s	za0.d, { z14.h-z15.h }, z16.h
+	sumop4s	za0.d, { z0.h-z1.h }, z30.h
+	sumop4s	za0.d, { z0.h-z1.h }, { z16.h-z17.h }
+	sumop4s	za7.d, { z0.h-z1.h }, { z16.h-z17.h }
+	sumop4s	za0.d, { z14.h-z15.h }, { z16.h-z17.h }
+	sumop4s	za0.d, { z0.h-z1.h }, { z30.h-z31.h }
+
+	umop4a	za0.d, z0.h, z16.h
+	umop4a	za7.d, z0.h, z16.h
+	umop4a	za0.d, z14.h, z16.h
+	umop4a	za0.d, z0.h, z30.h
+	umop4a	za0.d, z0.h, { z16.h-z17.h }
+	umop4a	za7.d, z0.h, { z16.h-z17.h }
+	umop4a	za0.d, z14.h, { z16.h-z17.h }
+	umop4a	za0.d, z0.h, { z30.h-z31.h }
+	umop4a	za0.d, { z0.h-z1.h }, z16.h
+	umop4a	za7.d, { z0.h-z1.h }, z16.h
+	umop4a	za0.d, { z14.h-z15.h }, z16.h
+	umop4a	za0.d, { z0.h-z1.h }, z30.h
+	umop4a	za0.d, { z0.h-z1.h }, { z16.h-z17.h }
+	umop4a	za7.d, { z0.h-z1.h }, { z16.h-z17.h }
+	umop4a	za0.d, { z14.h-z15.h }, { z16.h-z17.h }
+	umop4a	za0.d, { z0.h-z1.h }, { z30.h-z31.h }
+
+	umop4s	za0.d, z0.h, z16.h
+	umop4s	za7.d, z0.h, z16.h
+	umop4s	za0.d, z14.h, z16.h
+	umop4s	za0.d, z0.h, z30.h
+	umop4s	za0.d, z0.h, { z16.h-z17.h }
+	umop4s	za7.d, z0.h, { z16.h-z17.h }
+	umop4s	za0.d, z14.h, { z16.h-z17.h }
+	umop4s	za0.d, z0.h, { z30.h-z31.h }
+	umop4s	za0.d, { z0.h-z1.h }, z16.h
+	umop4s	za7.d, { z0.h-z1.h }, z16.h
+	umop4s	za0.d, { z14.h-z15.h }, z16.h
+	umop4s	za0.d, { z0.h-z1.h }, z30.h
+	umop4s	za0.d, { z0.h-z1.h }, { z16.h-z17.h }
+	umop4s	za7.d, { z0.h-z1.h }, { z16.h-z17.h }
+	umop4s	za0.d, { z14.h-z15.h }, { z16.h-z17.h }
+	umop4s	za0.d, { z0.h-z1.h }, { z30.h-z31.h }
+
+	usmop4a	za0.d, z0.h, z16.h
+	usmop4a	za7.d, z0.h, z16.h
+	usmop4a	za0.d, z14.h, z16.h
+	usmop4a	za0.d, z0.h, z30.h
+	usmop4a	za0.d, z0.h, { z16.h-z17.h }
+	usmop4a	za7.d, z0.h, { z16.h-z17.h }
+	usmop4a	za0.d, z14.h, { z16.h-z17.h }
+	usmop4a	za0.d, z0.h, { z30.h-z31.h }
+	usmop4a	za0.d, { z0.h-z1.h }, z16.h
+	usmop4a	za7.d, { z0.h-z1.h }, z16.h
+	usmop4a	za0.d, { z14.h-z15.h }, z16.h
+	usmop4a	za0.d, { z0.h-z1.h }, z30.h
+	usmop4a	za0.d, { z0.h-z1.h }, { z16.h-z17.h }
+	usmop4a	za7.d, { z0.h-z1.h }, { z16.h-z17.h }
+	usmop4a	za0.d, { z14.h-z15.h }, { z16.h-z17.h }
+	usmop4a	za0.d, { z0.h-z1.h }, { z30.h-z31.h }
+
+	usmop4s	za0.d, z0.h, z16.h
+	usmop4s	za7.d, z0.h, z16.h
+	usmop4s	za0.d, z14.h, z16.h
+	usmop4s	za0.d, z0.h, z30.h
+	usmop4s	za0.d, z0.h, { z16.h-z17.h }
+	usmop4s	za7.d, z0.h, { z16.h-z17.h }
+	usmop4s	za0.d, z14.h, { z16.h-z17.h }
+	usmop4s	za0.d, z0.h, { z30.h-z31.h }
+	usmop4s	za0.d, { z0.h-z1.h }, z16.h
+	usmop4s	za7.d, { z0.h-z1.h }, z16.h
+	usmop4s	za0.d, { z14.h-z15.h }, z16.h
+	usmop4s	za0.d, { z0.h-z1.h }, z30.h
+	usmop4s	za0.d, { z0.h-z1.h }, { z16.h-z17.h }
+	usmop4s	za7.d, { z0.h-z1.h }, { z16.h-z17.h }
+	usmop4s	za0.d, { z14.h-z15.h }, { z16.h-z17.h }
+	usmop4s	za0.d, { z0.h-z1.h }, { z30.h-z31.h }
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-invalid.d b/gas/testsuite/gas/aarch64/sme-mop4-invalid.d
new file mode 100644
index 00000000000..54085c9016c
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-invalid.d
@@ -0,0 +1,2 @@
+#as: -march=armv8-a+sme-mop4
+#error_output: sme-mop4-invalid.l
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-invalid.l b/gas/testsuite/gas/aarch64/sme-mop4-invalid.l
new file mode 100644
index 00000000000..1436b0a18ea
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-invalid.l
@@ -0,0 +1,15 @@
+[^:]*: Assembler messages:
+[^:]*:\d+: Error: register out of range at operand 2 -- `bfmop4a za0\.s,z1\.h,z16\.h'
+[^:]*:\d+: Error: register out of range at operand 2 -- `fmop4a za0\.s,z15\.h,z16\.h'
+[^:]*:\d+: Error: register out of range at operand 2 -- `bfmop4a za0\.s,z16\.h,{z16\.h-z17\.h}'
+[^:]*:\d+: Error: register out of range at operand 2 -- `fmop4a za0\.s,z17\.h,{z16\.h-z17\.h}'
+[^:]*:\d+: Error: start register out of range at operand 2 -- `bfmop4a za0\.s,{z1\.h-z2\.h},z16\.h'
+[^:]*:\d+: Error: start register out of range at operand 2 -- `fmop4a za0\.s,{z15\.h-z16\.h},z16\.h'
+[^:]*:\d+: Error: start register out of range at operand 2 -- `bfmop4a za0\.s,{z16\.h-z17\.h},{z16\.h-z17\.h}'
+[^:]*:\d+: Error: start register out of range at operand 2 -- `fmop4a za0\.s,{z17\.h-z18\.h},{z16\.h-z17\.h}'
+[^:]*:\d+: Error: register out of range at operand 3 -- `smop4a za0\.s,z0\.h,z14\.h'
+[^:]*:\d+: Error: register out of range at operand 3 -- `smop4a za0\.s,z0\.b,z15\.b'
+[^:]*:\d+: Error: register out of range at operand 3 -- `umop4a za0\.s,{z0\.h-z1\.h},z17\.h'
+[^:]*:\d+: Error: start register out of range at operand 3 -- `smop4a za0\.s,z0\.h,{z14\.h-z15\.h}'
+[^:]*:\d+: Error: start register out of range at operand 3 -- `smop4a za0\.s,z0\.b,{z15\.b-z16\.b}'
+[^:]*:\d+: Error: start register out of range at operand 3 -- `umop4a za0\.s,{z0\.h-z1\.h},{z17\.h-z18\.h}'
diff --git a/gas/testsuite/gas/aarch64/sme-mop4-invalid.s b/gas/testsuite/gas/aarch64/sme-mop4-invalid.s
new file mode 100644
index 00000000000..d883908e7f1
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4-invalid.s
@@ -0,0 +1,14 @@
+	bfmop4a	za0.s, z1.h, z16.h
+	fmop4a	za0.s, z15.h, z16.h
+	bfmop4a	za0.s, z16.h, { z16.h-z17.h }
+	fmop4a	za0.s, z17.h, { z16.h-z17.h }
+	bfmop4a	za0.s, { z1.h-z2.h }, z16.h
+	fmop4a	za0.s, { z15.h-z16.h }, z16.h
+	bfmop4a	za0.s, { z16.h-z17.h }, { z16.h-z17.h }
+	fmop4a	za0.s, { z17.h-z18.h }, { z16.h-z17.h }
+	smop4a	za0.s, z0.h, z14.h
+	smop4a	za0.s, z0.b, z15.b
+	umop4a	za0.s, { z0.h-z1.h }, z17.h
+	smop4a	za0.s, z0.h, { z14.h-z15.h }
+	smop4a	za0.s, z0.b, { z15.b-z16.b }
+	umop4a	za0.s, { z0.h-z1.h }, { z17.h-z18.h }
diff --git a/gas/testsuite/gas/aarch64/sme-mop4.d b/gas/testsuite/gas/aarch64/sme-mop4.d
new file mode 100644
index 00000000000..442c53bc908
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4.d
@@ -0,0 +1,297 @@
+#as: -march=armv8-a+sme-mop4
+#objdump: -dr
+
+.*:     file format .*
+
+
+Disassembly of section \.text:
+
+0+ <\.text>:
+ *[0-9a-f]+:	81000000 	bfmop4a	za0\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	81000003 	bfmop4a	za3\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	810001c0 	bfmop4a	za0\.s, z14\.h, z16\.h
+ *[0-9a-f]+:	810e0000 	bfmop4a	za0\.s, z0\.h, z30\.h
+ *[0-9a-f]+:	81100000 	bfmop4a	za0\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81100003 	bfmop4a	za3\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811001c0 	bfmop4a	za0\.s, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e0000 	bfmop4a	za0\.s, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81000200 	bfmop4a	za0\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	81000203 	bfmop4a	za3\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	810003c0 	bfmop4a	za0\.s, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	810e0200 	bfmop4a	za0\.s, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	81100200 	bfmop4a	za0\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81100203 	bfmop4a	za3\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811003c0 	bfmop4a	za0\.s, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e0200 	bfmop4a	za0\.s, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81000010 	bfmop4s	za0\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	81000013 	bfmop4s	za3\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	810001d0 	bfmop4s	za0\.s, z14\.h, z16\.h
+ *[0-9a-f]+:	810e0010 	bfmop4s	za0\.s, z0\.h, z30\.h
+ *[0-9a-f]+:	81100010 	bfmop4s	za0\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81100013 	bfmop4s	za3\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811001d0 	bfmop4s	za0\.s, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e0010 	bfmop4s	za0\.s, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81000210 	bfmop4s	za0\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	81000213 	bfmop4s	za3\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	810003d0 	bfmop4s	za0\.s, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	810e0210 	bfmop4s	za0\.s, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	81100210 	bfmop4s	za0\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81100213 	bfmop4s	za3\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811003d0 	bfmop4s	za0\.s, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e0210 	bfmop4s	za0\.s, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	80000000 	fmop4a	za0\.s, z0\.s, z16\.s
+ *[0-9a-f]+:	80000003 	fmop4a	za3\.s, z0\.s, z16\.s
+ *[0-9a-f]+:	800001c0 	fmop4a	za0\.s, z14\.s, z16\.s
+ *[0-9a-f]+:	800e0000 	fmop4a	za0\.s, z0\.s, z30\.s
+ *[0-9a-f]+:	80100000 	fmop4a	za0\.s, z0\.s, {z16\.s-z17\.s}
+ *[0-9a-f]+:	80100003 	fmop4a	za3\.s, z0\.s, {z16\.s-z17\.s}
+ *[0-9a-f]+:	801001c0 	fmop4a	za0\.s, z14\.s, {z16\.s-z17\.s}
+ *[0-9a-f]+:	801e0000 	fmop4a	za0\.s, z0\.s, {z30\.s-z31\.s}
+ *[0-9a-f]+:	80000200 	fmop4a	za0\.s, {z0\.s-z1\.s}, z16\.s
+ *[0-9a-f]+:	80000203 	fmop4a	za3\.s, {z0\.s-z1\.s}, z16\.s
+ *[0-9a-f]+:	800003c0 	fmop4a	za0\.s, {z14\.s-z15\.s}, z16\.s
+ *[0-9a-f]+:	800e0200 	fmop4a	za0\.s, {z0\.s-z1\.s}, z30\.s
+ *[0-9a-f]+:	80100200 	fmop4a	za0\.s, {z0\.s-z1\.s}, {z16\.s-z17\.s}
+ *[0-9a-f]+:	80100203 	fmop4a	za3\.s, {z0\.s-z1\.s}, {z16\.s-z17\.s}
+ *[0-9a-f]+:	801003c0 	fmop4a	za0\.s, {z14\.s-z15\.s}, {z16\.s-z17\.s}
+ *[0-9a-f]+:	801e0200 	fmop4a	za0\.s, {z0\.s-z1\.s}, {z30\.s-z31\.s}
+ *[0-9a-f]+:	81200000 	fmop4a	za0\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	81200003 	fmop4a	za3\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	812001c0 	fmop4a	za0\.s, z14\.h, z16\.h
+ *[0-9a-f]+:	812e0000 	fmop4a	za0\.s, z0\.h, z30\.h
+ *[0-9a-f]+:	81300000 	fmop4a	za0\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81300003 	fmop4a	za3\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813001c0 	fmop4a	za0\.s, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813e0000 	fmop4a	za0\.s, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81200200 	fmop4a	za0\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	81200203 	fmop4a	za3\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	812003c0 	fmop4a	za0\.s, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	812e0200 	fmop4a	za0\.s, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	81300200 	fmop4a	za0\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81300203 	fmop4a	za3\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813003c0 	fmop4a	za0\.s, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813e0200 	fmop4a	za0\.s, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	80000010 	fmop4s	za0\.s, z0\.s, z16\.s
+ *[0-9a-f]+:	80000013 	fmop4s	za3\.s, z0\.s, z16\.s
+ *[0-9a-f]+:	800001d0 	fmop4s	za0\.s, z14\.s, z16\.s
+ *[0-9a-f]+:	800e0010 	fmop4s	za0\.s, z0\.s, z30\.s
+ *[0-9a-f]+:	80100010 	fmop4s	za0\.s, z0\.s, {z16\.s-z17\.s}
+ *[0-9a-f]+:	80100013 	fmop4s	za3\.s, z0\.s, {z16\.s-z17\.s}
+ *[0-9a-f]+:	801001d0 	fmop4s	za0\.s, z14\.s, {z16\.s-z17\.s}
+ *[0-9a-f]+:	801e0010 	fmop4s	za0\.s, z0\.s, {z30\.s-z31\.s}
+ *[0-9a-f]+:	80000210 	fmop4s	za0\.s, {z0\.s-z1\.s}, z16\.s
+ *[0-9a-f]+:	80000213 	fmop4s	za3\.s, {z0\.s-z1\.s}, z16\.s
+ *[0-9a-f]+:	800003d0 	fmop4s	za0\.s, {z14\.s-z15\.s}, z16\.s
+ *[0-9a-f]+:	800e0210 	fmop4s	za0\.s, {z0\.s-z1\.s}, z30\.s
+ *[0-9a-f]+:	80100210 	fmop4s	za0\.s, {z0\.s-z1\.s}, {z16\.s-z17\.s}
+ *[0-9a-f]+:	80100213 	fmop4s	za3\.s, {z0\.s-z1\.s}, {z16\.s-z17\.s}
+ *[0-9a-f]+:	801003d0 	fmop4s	za0\.s, {z14\.s-z15\.s}, {z16\.s-z17\.s}
+ *[0-9a-f]+:	801e0210 	fmop4s	za0\.s, {z0\.s-z1\.s}, {z30\.s-z31\.s}
+ *[0-9a-f]+:	81200010 	fmop4s	za0\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	81200013 	fmop4s	za3\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	812001d0 	fmop4s	za0\.s, z14\.h, z16\.h
+ *[0-9a-f]+:	812e0010 	fmop4s	za0\.s, z0\.h, z30\.h
+ *[0-9a-f]+:	81300010 	fmop4s	za0\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81300013 	fmop4s	za3\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813001d0 	fmop4s	za0\.s, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813e0010 	fmop4s	za0\.s, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81200210 	fmop4s	za0\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	81200213 	fmop4s	za3\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	812003d0 	fmop4s	za0\.s, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	812e0210 	fmop4s	za0\.s, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	81300210 	fmop4s	za0\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	81300213 	fmop4s	za3\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813003d0 	fmop4s	za0\.s, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	813e0210 	fmop4s	za0\.s, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	80008008 	smop4a	za0\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	8000800b 	smop4a	za3\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	800081c8 	smop4a	za0\.s, z14\.h, z16\.h
+ *[0-9a-f]+:	800e8008 	smop4a	za0\.s, z0\.h, z30\.h
+ *[0-9a-f]+:	80108008 	smop4a	za0\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	8010800b 	smop4a	za3\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	801081c8 	smop4a	za0\.s, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	801e8008 	smop4a	za0\.s, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	80008208 	smop4a	za0\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	8000820b 	smop4a	za3\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	800083c8 	smop4a	za0\.s, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	800e8208 	smop4a	za0\.s, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	80108208 	smop4a	za0\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	8010820b 	smop4a	za3\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	801083c8 	smop4a	za0\.s, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	801e8208 	smop4a	za0\.s, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	80008000 	smop4a	za0\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	80008003 	smop4a	za3\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	800081c0 	smop4a	za0\.s, z14\.b, z16\.b
+ *[0-9a-f]+:	800e8000 	smop4a	za0\.s, z0\.b, z30\.b
+ *[0-9a-f]+:	80108000 	smop4a	za0\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80108003 	smop4a	za3\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	801081c0 	smop4a	za0\.s, z14\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	801e8000 	smop4a	za0\.s, z0\.b, {z30\.b-z31\.b}
+ *[0-9a-f]+:	80008200 	smop4a	za0\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	80008203 	smop4a	za3\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	800083c0 	smop4a	za0\.s, {z14\.b-z15\.b}, z16\.b
+ *[0-9a-f]+:	800e8200 	smop4a	za0\.s, {z0\.b-z1\.b}, z30\.b
+ *[0-9a-f]+:	80108200 	smop4a	za0\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80108203 	smop4a	za3\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	801083c0 	smop4a	za0\.s, {z14\.b-z15\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	801e8200 	smop4a	za0\.s, {z0\.b-z1\.b}, {z30\.b-z31\.b}
+ *[0-9a-f]+:	80008018 	smop4s	za0\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	8000801b 	smop4s	za3\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	800081d8 	smop4s	za0\.s, z14\.h, z16\.h
+ *[0-9a-f]+:	800e8018 	smop4s	za0\.s, z0\.h, z30\.h
+ *[0-9a-f]+:	80108018 	smop4s	za0\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	8010801b 	smop4s	za3\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	801081d8 	smop4s	za0\.s, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	801e8018 	smop4s	za0\.s, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	80008218 	smop4s	za0\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	8000821b 	smop4s	za3\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	800083d8 	smop4s	za0\.s, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	800e8218 	smop4s	za0\.s, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	80108218 	smop4s	za0\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	8010821b 	smop4s	za3\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	801083d8 	smop4s	za0\.s, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	801e8218 	smop4s	za0\.s, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	80008010 	smop4s	za0\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	80008013 	smop4s	za3\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	800081d0 	smop4s	za0\.s, z14\.b, z16\.b
+ *[0-9a-f]+:	800e8010 	smop4s	za0\.s, z0\.b, z30\.b
+ *[0-9a-f]+:	80108010 	smop4s	za0\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80108013 	smop4s	za3\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	801081d0 	smop4s	za0\.s, z14\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	801e8010 	smop4s	za0\.s, z0\.b, {z30\.b-z31\.b}
+ *[0-9a-f]+:	80008210 	smop4s	za0\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	80008213 	smop4s	za3\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	800083d0 	smop4s	za0\.s, {z14\.b-z15\.b}, z16\.b
+ *[0-9a-f]+:	800e8210 	smop4s	za0\.s, {z0\.b-z1\.b}, z30\.b
+ *[0-9a-f]+:	80108210 	smop4s	za0\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80108213 	smop4s	za3\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	801083d0 	smop4s	za0\.s, {z14\.b-z15\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	801e8210 	smop4s	za0\.s, {z0\.b-z1\.b}, {z30\.b-z31\.b}
+ *[0-9a-f]+:	80208000 	sumop4a	za0\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	80208003 	sumop4a	za3\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	802081c0 	sumop4a	za0\.s, z14\.b, z16\.b
+ *[0-9a-f]+:	802e8000 	sumop4a	za0\.s, z0\.b, z30\.b
+ *[0-9a-f]+:	80308000 	sumop4a	za0\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80308003 	sumop4a	za3\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803081c0 	sumop4a	za0\.s, z14\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803e8000 	sumop4a	za0\.s, z0\.b, {z30\.b-z31\.b}
+ *[0-9a-f]+:	80208200 	sumop4a	za0\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	80208203 	sumop4a	za3\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	802083c0 	sumop4a	za0\.s, {z14\.b-z15\.b}, z16\.b
+ *[0-9a-f]+:	802e8200 	sumop4a	za0\.s, {z0\.b-z1\.b}, z30\.b
+ *[0-9a-f]+:	80308200 	sumop4a	za0\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80308203 	sumop4a	za3\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803083c0 	sumop4a	za0\.s, {z14\.b-z15\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803e8200 	sumop4a	za0\.s, {z0\.b-z1\.b}, {z30\.b-z31\.b}
+ *[0-9a-f]+:	80208010 	sumop4s	za0\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	80208013 	sumop4s	za3\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	802081d0 	sumop4s	za0\.s, z14\.b, z16\.b
+ *[0-9a-f]+:	802e8010 	sumop4s	za0\.s, z0\.b, z30\.b
+ *[0-9a-f]+:	80308010 	sumop4s	za0\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80308013 	sumop4s	za3\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803081d0 	sumop4s	za0\.s, z14\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803e8010 	sumop4s	za0\.s, z0\.b, {z30\.b-z31\.b}
+ *[0-9a-f]+:	80208210 	sumop4s	za0\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	80208213 	sumop4s	za3\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	802083d0 	sumop4s	za0\.s, {z14\.b-z15\.b}, z16\.b
+ *[0-9a-f]+:	802e8210 	sumop4s	za0\.s, {z0\.b-z1\.b}, z30\.b
+ *[0-9a-f]+:	80308210 	sumop4s	za0\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	80308213 	sumop4s	za3\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803083d0 	sumop4s	za0\.s, {z14\.b-z15\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	803e8210 	sumop4s	za0\.s, {z0\.b-z1\.b}, {z30\.b-z31\.b}
+ *[0-9a-f]+:	81008008 	umop4a	za0\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	8100800b 	umop4a	za3\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	810081c8 	umop4a	za0\.s, z14\.h, z16\.h
+ *[0-9a-f]+:	810e8008 	umop4a	za0\.s, z0\.h, z30\.h
+ *[0-9a-f]+:	81108008 	umop4a	za0\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	8110800b 	umop4a	za3\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811081c8 	umop4a	za0\.s, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e8008 	umop4a	za0\.s, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81008208 	umop4a	za0\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	8100820b 	umop4a	za3\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	810083c8 	umop4a	za0\.s, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	810e8208 	umop4a	za0\.s, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	81108208 	umop4a	za0\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	8110820b 	umop4a	za3\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811083c8 	umop4a	za0\.s, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e8208 	umop4a	za0\.s, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81208000 	umop4a	za0\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	81208003 	umop4a	za3\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	812081c0 	umop4a	za0\.s, z14\.b, z16\.b
+ *[0-9a-f]+:	812e8000 	umop4a	za0\.s, z0\.b, z30\.b
+ *[0-9a-f]+:	81308000 	umop4a	za0\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	81308003 	umop4a	za3\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	813081c0 	umop4a	za0\.s, z14\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	813e8000 	umop4a	za0\.s, z0\.b, {z30\.b-z31\.b}
+ *[0-9a-f]+:	81208200 	umop4a	za0\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	81208203 	umop4a	za3\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	812083c0 	umop4a	za0\.s, {z14\.b-z15\.b}, z16\.b
+ *[0-9a-f]+:	812e8200 	umop4a	za0\.s, {z0\.b-z1\.b}, z30\.b
+ *[0-9a-f]+:	81308200 	umop4a	za0\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	81308203 	umop4a	za3\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	813083c0 	umop4a	za0\.s, {z14\.b-z15\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	813e8200 	umop4a	za0\.s, {z0\.b-z1\.b}, {z30\.b-z31\.b}
+ *[0-9a-f]+:	81008018 	umop4s	za0\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	8100801b 	umop4s	za3\.s, z0\.h, z16\.h
+ *[0-9a-f]+:	810081d8 	umop4s	za0\.s, z14\.h, z16\.h
+ *[0-9a-f]+:	810e8018 	umop4s	za0\.s, z0\.h, z30\.h
+ *[0-9a-f]+:	81108018 	umop4s	za0\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	8110801b 	umop4s	za3\.s, z0\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811081d8 	umop4s	za0\.s, z14\.h, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e8018 	umop4s	za0\.s, z0\.h, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81008218 	umop4s	za0\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	8100821b 	umop4s	za3\.s, {z0\.h-z1\.h}, z16\.h
+ *[0-9a-f]+:	810083d8 	umop4s	za0\.s, {z14\.h-z15\.h}, z16\.h
+ *[0-9a-f]+:	810e8218 	umop4s	za0\.s, {z0\.h-z1\.h}, z30\.h
+ *[0-9a-f]+:	81108218 	umop4s	za0\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	8110821b 	umop4s	za3\.s, {z0\.h-z1\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811083d8 	umop4s	za0\.s, {z14\.h-z15\.h}, {z16\.h-z17\.h}
+ *[0-9a-f]+:	811e8218 	umop4s	za0\.s, {z0\.h-z1\.h}, {z30\.h-z31\.h}
+ *[0-9a-f]+:	81208010 	umop4s	za0\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	81208013 	umop4s	za3\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	812081d0 	umop4s	za0\.s, z14\.b, z16\.b
+ *[0-9a-f]+:	812e8010 	umop4s	za0\.s, z0\.b, z30\.b
+ *[0-9a-f]+:	81308010 	umop4s	za0\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	81308013 	umop4s	za3\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	813081d0 	umop4s	za0\.s, z14\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	813e8010 	umop4s	za0\.s, z0\.b, {z30\.b-z31\.b}
+ *[0-9a-f]+:	81208210 	umop4s	za0\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	81208213 	umop4s	za3\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	812083d0 	umop4s	za0\.s, {z14\.b-z15\.b}, z16\.b
+ *[0-9a-f]+:	812e8210 	umop4s	za0\.s, {z0\.b-z1\.b}, z30\.b
+ *[0-9a-f]+:	81308210 	umop4s	za0\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	81308213 	umop4s	za3\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	813083d0 	umop4s	za0\.s, {z14\.b-z15\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	813e8210 	umop4s	za0\.s, {z0\.b-z1\.b}, {z30\.b-z31\.b}
+ *[0-9a-f]+:	81008000 	usmop4a	za0\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	81008003 	usmop4a	za3\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	810081c0 	usmop4a	za0\.s, z14\.b, z16\.b
+ *[0-9a-f]+:	810e8000 	usmop4a	za0\.s, z0\.b, z30\.b
+ *[0-9a-f]+:	81108000 	usmop4a	za0\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	81108003 	usmop4a	za3\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	811081c0 	usmop4a	za0\.s, z14\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	811e8000 	usmop4a	za0\.s, z0\.b, {z30\.b-z31\.b}
+ *[0-9a-f]+:	81008200 	usmop4a	za0\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	81008203 	usmop4a	za3\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	810083c0 	usmop4a	za0\.s, {z14\.b-z15\.b}, z16\.b
+ *[0-9a-f]+:	810e8200 	usmop4a	za0\.s, {z0\.b-z1\.b}, z30\.b
+ *[0-9a-f]+:	81108200 	usmop4a	za0\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	81108203 	usmop4a	za3\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	811083c0 	usmop4a	za0\.s, {z14\.b-z15\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	811e8200 	usmop4a	za0\.s, {z0\.b-z1\.b}, {z30\.b-z31\.b}
+ *[0-9a-f]+:	81008010 	usmop4s	za0\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	81008013 	usmop4s	za3\.s, z0\.b, z16\.b
+ *[0-9a-f]+:	810081d0 	usmop4s	za0\.s, z14\.b, z16\.b
+ *[0-9a-f]+:	810e8010 	usmop4s	za0\.s, z0\.b, z30\.b
+ *[0-9a-f]+:	81108010 	usmop4s	za0\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	81108013 	usmop4s	za3\.s, z0\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	811081d0 	usmop4s	za0\.s, z14\.b, {z16\.b-z17\.b}
+ *[0-9a-f]+:	811e8010 	usmop4s	za0\.s, z0\.b, {z30\.b-z31\.b}
+ *[0-9a-f]+:	81008210 	usmop4s	za0\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	81008213 	usmop4s	za3\.s, {z0\.b-z1\.b}, z16\.b
+ *[0-9a-f]+:	810083d0 	usmop4s	za0\.s, {z14\.b-z15\.b}, z16\.b
+ *[0-9a-f]+:	810e8210 	usmop4s	za0\.s, {z0\.b-z1\.b}, z30\.b
+ *[0-9a-f]+:	81108210 	usmop4s	za0\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	81108213 	usmop4s	za3\.s, {z0\.b-z1\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	811083d0 	usmop4s	za0\.s, {z14\.b-z15\.b}, {z16\.b-z17\.b}
+ *[0-9a-f]+:	811e8210 	usmop4s	za0\.s, {z0\.b-z1\.b}, {z30\.b-z31\.b}
diff --git a/gas/testsuite/gas/aarch64/sme-mop4.s b/gas/testsuite/gas/aarch64/sme-mop4.s
new file mode 100644
index 00000000000..e1b92ffbabf
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme-mop4.s
@@ -0,0 +1,305 @@
+	bfmop4a	za0.s, z0.h, z16.h
+	bfmop4a	za3.s, z0.h, z16.h
+	bfmop4a	za0.s, z14.h, z16.h
+	bfmop4a	za0.s, z0.h, z30.h
+	bfmop4a	za0.s, z0.h, { z16.h-z17.h }
+	bfmop4a	za3.s, z0.h, { z16.h-z17.h }
+	bfmop4a	za0.s, z14.h, { z16.h-z17.h }
+	bfmop4a	za0.s, z0.h, { z30.h-z31.h }
+	bfmop4a	za0.s, { z0.h-z1.h }, z16.h
+	bfmop4a	za3.s, { z0.h-z1.h }, z16.h
+	bfmop4a	za0.s, { z14.h-z15.h }, z16.h
+	bfmop4a	za0.s, { z0.h-z1.h }, z30.h
+	bfmop4a	za0.s, { z0.h-z1.h }, { z16.h-z17.h }
+	bfmop4a	za3.s, { z0.h-z1.h }, { z16.h-z17.h }
+	bfmop4a	za0.s, { z14.h-z15.h }, { z16.h-z17.h }
+	bfmop4a	za0.s, { z0.h-z1.h }, { z30.h-z31.h }
+
+	bfmop4s	za0.s, z0.h, z16.h
+	bfmop4s	za3.s, z0.h, z16.h
+	bfmop4s	za0.s, z14.h, z16.h
+	bfmop4s	za0.s, z0.h, z30.h
+	bfmop4s	za0.s, z0.h, { z16.h-z17.h }
+	bfmop4s	za3.s, z0.h, { z16.h-z17.h }
+	bfmop4s	za0.s, z14.h, { z16.h-z17.h }
+	bfmop4s	za0.s, z0.h, { z30.h-z31.h }
+	bfmop4s	za0.s, { z0.h-z1.h }, z16.h
+	bfmop4s	za3.s, { z0.h-z1.h }, z16.h
+	bfmop4s	za0.s, { z14.h-z15.h }, z16.h
+	bfmop4s	za0.s, { z0.h-z1.h }, z30.h
+	bfmop4s	za0.s, { z0.h-z1.h }, { z16.h-z17.h }
+	bfmop4s	za3.s, { z0.h-z1.h }, { z16.h-z17.h }
+	bfmop4s	za0.s, { z14.h-z15.h }, { z16.h-z17.h }
+	bfmop4s	za0.s, { z0.h-z1.h }, { z30.h-z31.h }
+
+	fmop4a	za0.s, z0.s, z16.s
+	fmop4a	za3.s, z0.s, z16.s
+	fmop4a	za0.s, z14.s, z16.s
+	fmop4a	za0.s, z0.s, z30.s
+	fmop4a	za0.s, z0.s, { z16.s-z17.s }
+	fmop4a	za3.s, z0.s, { z16.s-z17.s }
+	fmop4a	za0.s, z14.s, { z16.s-z17.s }
+	fmop4a	za0.s, z0.s, { z30.s-z31.s }
+	fmop4a	za0.s, { z0.s-z1.s }, z16.s
+	fmop4a	za3.s, { z0.s-z1.s }, z16.s
+	fmop4a	za0.s, { z14.s-z15.s }, z16.s
+	fmop4a	za0.s, { z0.s-z1.s }, z30.s
+	fmop4a	za0.s, { z0.s-z1.s }, { z16.s-z17.s }
+	fmop4a	za3.s, { z0.s-z1.s }, { z16.s-z17.s }
+	fmop4a	za0.s, { z14.s-z15.s }, { z16.s-z17.s }
+	fmop4a	za0.s, { z0.s-z1.s }, { z30.s-z31.s }
+
+	fmop4a	za0.s, z0.h, z16.h
+	fmop4a	za3.s, z0.h, z16.h
+	fmop4a	za0.s, z14.h, z16.h
+	fmop4a	za0.s, z0.h, z30.h
+	fmop4a	za0.s, z0.h, { z16.h-z17.h }
+	fmop4a	za3.s, z0.h, { z16.h-z17.h }
+	fmop4a	za0.s, z14.h, { z16.h-z17.h }
+	fmop4a	za0.s, z0.h, { z30.h-z31.h }
+	fmop4a	za0.s, { z0.h-z1.h }, z16.h
+	fmop4a	za3.s, { z0.h-z1.h }, z16.h
+	fmop4a	za0.s, { z14.h-z15.h }, z16.h
+	fmop4a	za0.s, { z0.h-z1.h }, z30.h
+	fmop4a	za0.s, { z0.h-z1.h }, { z16.h-z17.h }
+	fmop4a	za3.s, { z0.h-z1.h }, { z16.h-z17.h }
+	fmop4a	za0.s, { z14.h-z15.h }, { z16.h-z17.h }
+	fmop4a	za0.s, { z0.h-z1.h }, { z30.h-z31.h }
+
+	fmop4s	za0.s, z0.s, z16.s
+	fmop4s	za3.s, z0.s, z16.s
+	fmop4s	za0.s, z14.s, z16.s
+	fmop4s	za0.s, z0.s, z30.s
+	fmop4s	za0.s, z0.s, { z16.s-z17.s }
+	fmop4s	za3.s, z0.s, { z16.s-z17.s }
+	fmop4s	za0.s, z14.s, { z16.s-z17.s }
+	fmop4s	za0.s, z0.s, { z30.s-z31.s }
+	fmop4s	za0.s, { z0.s-z1.s }, z16.s
+	fmop4s	za3.s, { z0.s-z1.s }, z16.s
+	fmop4s	za0.s, { z14.s-z15.s }, z16.s
+	fmop4s	za0.s, { z0.s-z1.s }, z30.s
+	fmop4s	za0.s, { z0.s-z1.s }, { z16.s-z17.s }
+	fmop4s	za3.s, { z0.s-z1.s }, { z16.s-z17.s }
+	fmop4s	za0.s, { z14.s-z15.s }, { z16.s-z17.s }
+	fmop4s	za0.s, { z0.s-z1.s }, { z30.s-z31.s }
+
+	fmop4s	za0.s, z0.h, z16.h
+	fmop4s	za3.s, z0.h, z16.h
+	fmop4s	za0.s, z14.h, z16.h
+	fmop4s	za0.s, z0.h, z30.h
+	fmop4s	za0.s, z0.h, { z16.h-z17.h }
+	fmop4s	za3.s, z0.h, { z16.h-z17.h }
+	fmop4s	za0.s, z14.h, { z16.h-z17.h }
+	fmop4s	za0.s, z0.h, { z30.h-z31.h }
+	fmop4s	za0.s, { z0.h-z1.h }, z16.h
+	fmop4s	za3.s, { z0.h-z1.h }, z16.h
+	fmop4s	za0.s, { z14.h-z15.h }, z16.h
+	fmop4s	za0.s, { z0.h-z1.h }, z30.h
+	fmop4s	za0.s, { z0.h-z1.h }, { z16.h-z17.h }
+	fmop4s	za3.s, { z0.h-z1.h }, { z16.h-z17.h }
+	fmop4s	za0.s, { z14.h-z15.h }, { z16.h-z17.h }
+	fmop4s	za0.s, { z0.h-z1.h }, { z30.h-z31.h }
+
+	smop4a	za0.s, z0.h, z16.h
+	smop4a	za3.s, z0.h, z16.h
+	smop4a	za0.s, z14.h, z16.h
+	smop4a	za0.s, z0.h, z30.h
+	smop4a	za0.s, z0.h, { z16.h-z17.h }
+	smop4a	za3.s, z0.h, { z16.h-z17.h }
+	smop4a	za0.s, z14.h, { z16.h-z17.h }
+	smop4a	za0.s, z0.h, { z30.h-z31.h }
+	smop4a	za0.s, { z0.h-z1.h }, z16.h
+	smop4a	za3.s, { z0.h-z1.h }, z16.h
+	smop4a	za0.s, { z14.h-z15.h }, z16.h
+	smop4a	za0.s, { z0.h-z1.h }, z30.h
+	smop4a	za0.s, { z0.h-z1.h }, { z16.h-z17.h }
+	smop4a	za3.s, { z0.h-z1.h }, { z16.h-z17.h }
+	smop4a	za0.s, { z14.h-z15.h }, { z16.h-z17.h }
+	smop4a	za0.s, { z0.h-z1.h }, { z30.h-z31.h }
+
+	smop4a	za0.s, z0.b, z16.b
+	smop4a	za3.s, z0.b, z16.b
+	smop4a	za0.s, z14.b, z16.b
+	smop4a	za0.s, z0.b, z30.b
+	smop4a	za0.s, z0.b, { z16.b-z17.b }
+	smop4a	za3.s, z0.b, { z16.b-z17.b }
+	smop4a	za0.s, z14.b, { z16.b-z17.b }
+	smop4a	za0.s, z0.b, { z30.b-z31.b }
+	smop4a	za0.s, { z0.b-z1.b }, z16.b
+	smop4a	za3.s, { z0.b-z1.b }, z16.b
+	smop4a	za0.s, { z14.b-z15.b }, z16.b
+	smop4a	za0.s, { z0.b-z1.b }, z30.b
+	smop4a	za0.s, { z0.b-z1.b }, { z16.b-z17.b }
+	smop4a	za3.s, { z0.b-z1.b }, { z16.b-z17.b }
+	smop4a	za0.s, { z14.b-z15.b }, { z16.b-z17.b }
+	smop4a	za0.s, { z0.b-z1.b }, { z30.b-z31.b }
+
+	smop4s	za0.s, z0.h, z16.h
+	smop4s	za3.s, z0.h, z16.h
+	smop4s	za0.s, z14.h, z16.h
+	smop4s	za0.s, z0.h, z30.h
+	smop4s	za0.s, z0.h, { z16.h-z17.h }
+	smop4s	za3.s, z0.h, { z16.h-z17.h }
+	smop4s	za0.s, z14.h, { z16.h-z17.h }
+	smop4s	za0.s, z0.h, { z30.h-z31.h }
+	smop4s	za0.s, { z0.h-z1.h }, z16.h
+	smop4s	za3.s, { z0.h-z1.h }, z16.h
+	smop4s	za0.s, { z14.h-z15.h }, z16.h
+	smop4s	za0.s, { z0.h-z1.h }, z30.h
+	smop4s	za0.s, { z0.h-z1.h }, { z16.h-z17.h }
+	smop4s	za3.s, { z0.h-z1.h }, { z16.h-z17.h }
+	smop4s	za0.s, { z14.h-z15.h }, { z16.h-z17.h }
+	smop4s	za0.s, { z0.h-z1.h }, { z30.h-z31.h }
+
+	smop4s	za0.s, z0.b, z16.b
+	smop4s	za3.s, z0.b, z16.b
+	smop4s	za0.s, z14.b, z16.b
+	smop4s	za0.s, z0.b, z30.b
+	smop4s	za0.s, z0.b, { z16.b-z17.b }
+	smop4s	za3.s, z0.b, { z16.b-z17.b }
+	smop4s	za0.s, z14.b, { z16.b-z17.b }
+	smop4s	za0.s, z0.b, { z30.b-z31.b }
+	smop4s	za0.s, { z0.b-z1.b }, z16.b
+	smop4s	za3.s, { z0.b-z1.b }, z16.b
+	smop4s	za0.s, { z14.b-z15.b }, z16.b
+	smop4s	za0.s, { z0.b-z1.b }, z30.b
+	smop4s	za0.s, { z0.b-z1.b }, { z16.b-z17.b }
+	smop4s	za3.s, { z0.b-z1.b }, { z16.b-z17.b }
+	smop4s	za0.s, { z14.b-z15.b }, { z16.b-z17.b }
+	smop4s	za0.s, { z0.b-z1.b }, { z30.b-z31.b }
+
+	sumop4a	za0.s, z0.b, z16.b
+	sumop4a	za3.s, z0.b, z16.b
+	sumop4a	za0.s, z14.b, z16.b
+	sumop4a	za0.s, z0.b, z30.b
+	sumop4a	za0.s, z0.b, { z16.b-z17.b }
+	sumop4a	za3.s, z0.b, { z16.b-z17.b }
+	sumop4a	za0.s, z14.b, { z16.b-z17.b }
+	sumop4a	za0.s, z0.b, { z30.b-z31.b }
+	sumop4a	za0.s, { z0.b-z1.b }, z16.b
+	sumop4a	za3.s, { z0.b-z1.b }, z16.b
+	sumop4a	za0.s, { z14.b-z15.b }, z16.b
+	sumop4a	za0.s, { z0.b-z1.b }, z30.b
+	sumop4a	za0.s, { z0.b-z1.b }, { z16.b-z17.b }
+	sumop4a	za3.s, { z0.b-z1.b }, { z16.b-z17.b }
+	sumop4a	za0.s, { z14.b-z15.b }, { z16.b-z17.b }
+	sumop4a	za0.s, { z0.b-z1.b }, { z30.b-z31.b }
+
+	sumop4s	za0.s, z0.b, z16.b
+	sumop4s	za3.s, z0.b, z16.b
+	sumop4s	za0.s, z14.b, z16.b
+	sumop4s	za0.s, z0.b, z30.b
+	sumop4s	za0.s, z0.b, { z16.b-z17.b }
+	sumop4s	za3.s, z0.b, { z16.b-z17.b }
+	sumop4s	za0.s, z14.b, { z16.b-z17.b }
+	sumop4s	za0.s, z0.b, { z30.b-z31.b }
+	sumop4s	za0.s, { z0.b-z1.b }, z16.b
+	sumop4s	za3.s, { z0.b-z1.b }, z16.b
+	sumop4s	za0.s, { z14.b-z15.b }, z16.b
+	sumop4s	za0.s, { z0.b-z1.b }, z30.b
+	sumop4s	za0.s, { z0.b-z1.b }, { z16.b-z17.b }
+	sumop4s	za3.s, { z0.b-z1.b }, { z16.b-z17.b }
+	sumop4s	za0.s, { z14.b-z15.b }, { z16.b-z17.b }
+	sumop4s	za0.s, { z0.b-z1.b }, { z30.b-z31.b }
+
+	umop4a	za0.s, z0.h, z16.h
+	umop4a	za3.s, z0.h, z16.h
+	umop4a	za0.s, z14.h, z16.h
+	umop4a	za0.s, z0.h, z30.h
+	umop4a	za0.s, z0.h, { z16.h-z17.h }
+	umop4a	za3.s, z0.h, { z16.h-z17.h }
+	umop4a	za0.s, z14.h, { z16.h-z17.h }
+	umop4a	za0.s, z0.h, { z30.h-z31.h }
+	umop4a	za0.s, { z0.h-z1.h }, z16.h
+	umop4a	za3.s, { z0.h-z1.h }, z16.h
+	umop4a	za0.s, { z14.h-z15.h }, z16.h
+	umop4a	za0.s, { z0.h-z1.h }, z30.h
+	umop4a	za0.s, { z0.h-z1.h }, { z16.h-z17.h }
+	umop4a	za3.s, { z0.h-z1.h }, { z16.h-z17.h }
+	umop4a	za0.s, { z14.h-z15.h }, { z16.h-z17.h }
+	umop4a	za0.s, { z0.h-z1.h }, { z30.h-z31.h }
+
+	umop4a	za0.s, z0.b, z16.b
+	umop4a	za3.s, z0.b, z16.b
+	umop4a	za0.s, z14.b, z16.b
+	umop4a	za0.s, z0.b, z30.b
+	umop4a	za0.s, z0.b, { z16.b-z17.b }
+	umop4a	za3.s, z0.b, { z16.b-z17.b }
+	umop4a	za0.s, z14.b, { z16.b-z17.b }
+	umop4a	za0.s, z0.b, { z30.b-z31.b }
+	umop4a	za0.s, { z0.b-z1.b }, z16.b
+	umop4a	za3.s, { z0.b-z1.b }, z16.b
+	umop4a	za0.s, { z14.b-z15.b }, z16.b
+	umop4a	za0.s, { z0.b-z1.b }, z30.b
+	umop4a	za0.s, { z0.b-z1.b }, { z16.b-z17.b }
+	umop4a	za3.s, { z0.b-z1.b }, { z16.b-z17.b }
+	umop4a	za0.s, { z14.b-z15.b }, { z16.b-z17.b }
+	umop4a	za0.s, { z0.b-z1.b }, { z30.b-z31.b }
+
+	umop4s	za0.s, z0.h, z16.h
+	umop4s	za3.s, z0.h, z16.h
+	umop4s	za0.s, z14.h, z16.h
+	umop4s	za0.s, z0.h, z30.h
+	umop4s	za0.s, z0.h, { z16.h-z17.h }
+	umop4s	za3.s, z0.h, { z16.h-z17.h }
+	umop4s	za0.s, z14.h, { z16.h-z17.h }
+	umop4s	za0.s, z0.h, { z30.h-z31.h }
+	umop4s	za0.s, { z0.h-z1.h }, z16.h
+	umop4s	za3.s, { z0.h-z1.h }, z16.h
+	umop4s	za0.s, { z14.h-z15.h }, z16.h
+	umop4s	za0.s, { z0.h-z1.h }, z30.h
+	umop4s	za0.s, { z0.h-z1.h }, { z16.h-z17.h }
+	umop4s	za3.s, { z0.h-z1.h }, { z16.h-z17.h }
+	umop4s	za0.s, { z14.h-z15.h }, { z16.h-z17.h }
+	umop4s	za0.s, { z0.h-z1.h }, { z30.h-z31.h }
+
+	umop4s	za0.s, z0.b, z16.b
+	umop4s	za3.s, z0.b, z16.b
+	umop4s	za0.s, z14.b, z16.b
+	umop4s	za0.s, z0.b, z30.b
+	umop4s	za0.s, z0.b, { z16.b-z17.b }
+	umop4s	za3.s, z0.b, { z16.b-z17.b }
+	umop4s	za0.s, z14.b, { z16.b-z17.b }
+	umop4s	za0.s, z0.b, { z30.b-z31.b }
+	umop4s	za0.s, { z0.b-z1.b }, z16.b
+	umop4s	za3.s, { z0.b-z1.b }, z16.b
+	umop4s	za0.s, { z14.b-z15.b }, z16.b
+	umop4s	za0.s, { z0.b-z1.b }, z30.b
+	umop4s	za0.s, { z0.b-z1.b }, { z16.b-z17.b }
+	umop4s	za3.s, { z0.b-z1.b }, { z16.b-z17.b }
+	umop4s	za0.s, { z14.b-z15.b }, { z16.b-z17.b }
+	umop4s	za0.s, { z0.b-z1.b }, { z30.b-z31.b }
+
+	usmop4a	za0.s, z0.b, z16.b
+	usmop4a	za3.s, z0.b, z16.b
+	usmop4a	za0.s, z14.b, z16.b
+	usmop4a	za0.s, z0.b, z30.b
+	usmop4a	za0.s, z0.b, { z16.b-z17.b }
+	usmop4a	za3.s, z0.b, { z16.b-z17.b }
+	usmop4a	za0.s, z14.b, { z16.b-z17.b }
+	usmop4a	za0.s, z0.b, { z30.b-z31.b }
+	usmop4a	za0.s, { z0.b-z1.b }, z16.b
+	usmop4a	za3.s, { z0.b-z1.b }, z16.b
+	usmop4a	za0.s, { z14.b-z15.b }, z16.b
+	usmop4a	za0.s, { z0.b-z1.b }, z30.b
+	usmop4a	za0.s, { z0.b-z1.b }, { z16.b-z17.b }
+	usmop4a	za3.s, { z0.b-z1.b }, { z16.b-z17.b }
+	usmop4a	za0.s, { z14.b-z15.b }, { z16.b-z17.b }
+	usmop4a	za0.s, { z0.b-z1.b }, { z30.b-z31.b }
+
+	usmop4s	za0.s, z0.b, z16.b
+	usmop4s	za3.s, z0.b, z16.b
+	usmop4s	za0.s, z14.b, z16.b
+	usmop4s	za0.s, z0.b, z30.b
+	usmop4s	za0.s, z0.b, { z16.b-z17.b }
+	usmop4s	za3.s, z0.b, { z16.b-z17.b }
+	usmop4s	za0.s, z14.b, { z16.b-z17.b }
+	usmop4s	za0.s, z0.b, { z30.b-z31.b }
+	usmop4s	za0.s, { z0.b-z1.b }, z16.b
+	usmop4s	za3.s, { z0.b-z1.b }, z16.b
+	usmop4s	za0.s, { z14.b-z15.b }, z16.b
+	usmop4s	za0.s, { z0.b-z1.b }, z30.b
+	usmop4s	za0.s, { z0.b-z1.b }, { z16.b-z17.b }
+	usmop4s	za3.s, { z0.b-z1.b }, { z16.b-z17.b }
+	usmop4s	za0.s, { z14.b-z15.b }, { z16.b-z17.b }
+	usmop4s	za0.s, { z0.b-z1.b }, { z30.b-z31.b }
diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
index 099fb2366df..f3c6249afdb 100644
--- a/include/opcode/aarch64.h
+++ b/include/opcode/aarch64.h
@@ -255,6 +255,8 @@ enum aarch64_feature_bit {
   AARCH64_FEATURE_GCIE,
   /* SME TMOP instructions.  */
   AARCH64_FEATURE_SME_TMOP,
+  /* SME MOP4 instructions.  */
+  AARCH64_FEATURE_SME_MOP4,
 
   /* Virtual features.  These are used to gate instructions that are enabled
      by either of two (or more) sets of command line flags.  */
@@ -863,8 +865,12 @@ enum aarch64_opnd
   AARCH64_OPND_SVE_ZtxN,	/* SVE vector register list in Zt.  */
   AARCH64_OPND_SME_Zdnx2,	/* SVE vector register list from [4:1]*2.  */
   AARCH64_OPND_SME_Zdnx4,	/* SVE vector register list from [4:2]*4.  */
-  AARCH64_OPND_SME_Zm,		/* SVE vector register list in 4-bit Zm.  */
-  AARCH64_OPND_SME_Zm_17,	/* SVE vector register list in [20:17].  */
+  AARCH64_OPND_SME_Zm,		/* SVE vector register in 4-bit Zm.  */
+  AARCH64_OPND_SME_Zm_17,	/* SVE vector register in [20:17].  */
+  AARCH64_OPND_SME_Zn_6_3,	/* SVE vector register in [8:6]*2.  */
+  AARCH64_OPND_SME_Zm_17_3,	/* SVE vector register in [19:17]*2+16.  */
+  AARCH64_OPND_SME_Znx2_6_3,	/* SVE vector register list from [8:6]*2.  */
+  AARCH64_OPND_SME_Zmx2_17_3,	/* SVE vector register list from [19:17]*2+16.  */
   AARCH64_OPND_SME_Zmx2,	/* SVE vector register list from [20:17]*2.  */
   AARCH64_OPND_SME_Zmx4,	/* SVE vector register list from [20:18]*4.  */
   AARCH64_OPND_SME_Znx2,	/* SVE vector register list from [9:6]*2.  */
diff --git a/opcodes/aarch64-asm-2.c b/opcodes/aarch64-asm-2.c
index a5dbabbb3cd..b0611654ead 100644
--- a/opcodes/aarch64-asm-2.c
+++ b/opcodes/aarch64-asm-2.c
@@ -831,6 +831,8 @@ aarch64_insert_operand (const aarch64_operand *self,
     case AARCH64_OPND_SVE_Zt:
     case AARCH64_OPND_SME_Zm:
     case AARCH64_OPND_SME_Zm_17:
+    case AARCH64_OPND_SME_Zn_6_3:
+    case AARCH64_OPND_SME_Zm_17_3:
     case AARCH64_OPND_SME_ZAda_1b:
     case AARCH64_OPND_SME_ZAda_2b:
     case AARCH64_OPND_SME_ZAda_3b:
@@ -1142,6 +1144,8 @@ aarch64_insert_operand (const aarch64_operand *self,
       return aarch64_ins_sve_reglist (self, info, code, inst, errors);
     case AARCH64_OPND_SME_Zdnx2:
     case AARCH64_OPND_SME_Zdnx4:
+    case AARCH64_OPND_SME_Znx2_6_3:
+    case AARCH64_OPND_SME_Zmx2_17_3:
     case AARCH64_OPND_SME_Zmx2:
     case AARCH64_OPND_SME_Zmx4:
     case AARCH64_OPND_SME_Znx2:
diff --git a/opcodes/aarch64-dis-2.c b/opcodes/aarch64-dis-2.c
index 87e0f2a54ba..ecaea2d2fdb 100644
--- a/opcodes/aarch64-dis-2.c
+++ b/opcodes/aarch64-dis-2.c
@@ -47,10 +47,250 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                     {
                                       if (((word >> 23) & 0x1) == 0)
                                         {
-                                          /* 33222222222211111111110000000000
-                                             10987654321098765432109876543210
-                                             x0000000000xxxxxxxxxxxxxxxxxxxxx.  */
-                                          return A64_OPID_00000000_udf_UNDEFINED;
+                                          if (((word >> 20) & 0x1) == 0)
+                                            {
+                                              if (((word >> 31) & 0x1) == 0)
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     000000000000xxxxxxxxxxxxxxxxxxxx.  */
+                                                  return A64_OPID_00000000_udf_UNDEFINED;
+                                                }
+                                              else
+                                                {
+                                                  if (((word >> 3) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 4) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 9) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 15) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     100000000000xxxx0xxxxx0xxxx00xxx.  */
+                                                                  return A64_OPID_80000000_fmop4a_SME_ZAda_2b_SME_Zn_6_3_SME_Zm_17_3;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     100000000000xxxx1xxxxx0xxxx00xxx.  */
+                                                                  return A64_OPID_80008000_smop4a_SME_ZAda_2b_SME_Zn_6_3_SME_Zm_17_3;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              if (((word >> 15) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     100000000000xxxx0xxxxx1xxxx00xxx.  */
+                                                                  return A64_OPID_80000200_fmop4a_SME_ZAda_2b_SME_Znx2_6_3_SME_Zm_17_3;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     100000000000xxxx1xxxxx1xxxx00xxx.  */
+                                                                  return A64_OPID_80008200_smop4a_SME_ZAda_2b_SME_Znx2_6_3_SME_Zm_17_3;
+                                                                }
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 9) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 15) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     100000000000xxxx0xxxxx0xxxx10xxx.  */
+                                                                  return A64_OPID_80000010_fmop4s_SME_ZAda_2b_SME_Zn_6_3_SME_Zm_17_3;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     100000000000xxxx1xxxxx0xxxx10xxx.  */
+                                                                  return A64_OPID_80008010_smop4s_SME_ZAda_2b_SME_Zn_6_3_SME_Zm_17_3;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              if (((word >> 15) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     100000000000xxxx0xxxxx1xxxx10xxx.  */
+                                                                  return A64_OPID_80000210_fmop4s_SME_ZAda_2b_SME_Znx2_6_3_SME_Zm_17_3;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     100000000000xxxx1xxxxx1xxxx10xxx.  */
+                                                                  return A64_OPID_80008210_smop4s_SME_ZAda_2b_SME_Znx2_6_3_SME_Zm_17_3;
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 4) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 9) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 100000000000xxxxxxxxxx0xxxx01xxx.  */
+                                                              return A64_OPID_80008008_smop4a_SME_ZAda_2b_SME_Zn_6_3_SME_Zm_17_3;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 100000000000xxxxxxxxxx1xxxx01xxx.  */
+                                                              return A64_OPID_80008208_smop4a_SME_ZAda_2b_SME_Znx2_6_3_SME_Zm_17_3;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 9) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 100000000000xxxxxxxxxx0xxxx11xxx.  */
+                                                              return A64_OPID_80008018_smop4s_SME_ZAda_2b_SME_Zn_6_3_SME_Zm_17_3;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 100000000000xxxxxxxxxx1xxxx11xxx.  */
+                                                              return A64_OPID_80008218_smop4s_SME_ZAda_2b_SME_Znx2_6_3_SME_Zm_17_3;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                          else
+                                            {
+                                              if (((word >> 3) & 0x1) == 0)
+                                                {
+                                                  if (((word >> 4) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 9) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 15) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x00000000001xxxx0xxxxx0xxxx00xxx.  */
+                                                              return A64_OPID_80100000_fmop4a_SME_ZAda_2b_SME_Zn_6_3_SME_Zmx2_17_3;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x00000000001xxxx1xxxxx0xxxx00xxx.  */
+                                                              return A64_OPID_80108000_smop4a_SME_ZAda_2b_SME_Zn_6_3_SME_Zmx2_17_3;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 15) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x00000000001xxxx0xxxxx1xxxx00xxx.  */
+                                                              return A64_OPID_80100200_fmop4a_SME_ZAda_2b_SME_Znx2_6_3_SME_Zmx2_17_3;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x00000000001xxxx1xxxxx1xxxx00xxx.  */
+                                                              return A64_OPID_80108200_smop4a_SME_ZAda_2b_SME_Znx2_6_3_SME_Zmx2_17_3;
+                                                            }
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 9) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 15) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x00000000001xxxx0xxxxx0xxxx10xxx.  */
+                                                              return A64_OPID_80100010_fmop4s_SME_ZAda_2b_SME_Zn_6_3_SME_Zmx2_17_3;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x00000000001xxxx1xxxxx0xxxx10xxx.  */
+                                                              return A64_OPID_80108010_smop4s_SME_ZAda_2b_SME_Zn_6_3_SME_Zmx2_17_3;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 15) & 0x1) == 0)
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x00000000001xxxx0xxxxx1xxxx10xxx.  */
+                                                              return A64_OPID_80100210_fmop4s_SME_ZAda_2b_SME_Znx2_6_3_SME_Zmx2_17_3;
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 x00000000001xxxx1xxxxx1xxxx10xxx.  */
+                                                              return A64_OPID_80108210_smop4s_SME_ZAda_2b_SME_Znx2_6_3_SME_Zmx2_17_3;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                              else
+                                                {
+                                                  if (((word >> 4) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 9) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x00000000001xxxxxxxxxx0xxxx01xxx.  */
+                                                          return A64_OPID_80108008_smop4a_SME_ZAda_2b_SME_Zn_6_3_SME_Zmx2_17_3;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x00000000001xxxxxxxxxx1xxxx01xxx.  */
+                                                          return A64_OPID_80108208_smop4a_SME_ZAda_2b_SME_Znx2_6_3_SME_Zmx2_17_3;
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 9) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x00000000001xxxxxxxxxx0xxxx11xxx.  */
+                                                          return A64_OPID_80108018_smop4s_SME_ZAda_2b_SME_Zn_6_3_SME_Zmx2_17_3;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x00000000001xxxxxxxxxx1xxxx11xxx.  */
+                                                          return A64_OPID_80108218_smop4s_SME_ZAda_2b_SME_Znx2_6_3_SME_Zmx2_17_3;
+                                                        }
+                                                    }
+                                                }
+                                            }
                                         }
                                       else
                                         {
@@ -131,10 +371,90 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                         }
                                       else
                                         {
-                                          /* 33222222222211111111110000000000
-                                             10987654321098765432109876543210
-                                             x0000000x10xxxxxxxxxxxxxxxxx1xxx.  */
-                                          return A64_OPID_80408008_stmopa_SME_ZAda_2b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
+                                          if (((word >> 15) & 0x1) == 0)
+                                            {
+                                              if (((word >> 4) & 0x1) == 0)
+                                                {
+                                                  if (((word >> 9) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 20) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0000000x100xxxx0xxxxx0xxxx01xxx.  */
+                                                          return A64_OPID_80c00008_fmop4a_SME_ZAda_3b_SME_Zn_6_3_SME_Zm_17_3;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0000000x101xxxx0xxxxx0xxxx01xxx.  */
+                                                          return A64_OPID_80d00008_fmop4a_SME_ZAda_3b_SME_Zn_6_3_SME_Zmx2_17_3;
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 20) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0000000x100xxxx0xxxxx1xxxx01xxx.  */
+                                                          return A64_OPID_80c00208_fmop4a_SME_ZAda_3b_SME_Znx2_6_3_SME_Zm_17_3;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0000000x101xxxx0xxxxx1xxxx01xxx.  */
+                                                          return A64_OPID_80d00208_fmop4a_SME_ZAda_3b_SME_Znx2_6_3_SME_Zmx2_17_3;
+                                                        }
+                                                    }
+                                                }
+                                              else
+                                                {
+                                                  if (((word >> 9) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 20) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0000000x100xxxx0xxxxx0xxxx11xxx.  */
+                                                          return A64_OPID_80c00018_fmop4s_SME_ZAda_3b_SME_Zn_6_3_SME_Zm_17_3;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0000000x101xxxx0xxxxx0xxxx11xxx.  */
+                                                          return A64_OPID_80d00018_fmop4s_SME_ZAda_3b_SME_Zn_6_3_SME_Zmx2_17_3;
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 20) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0000000x100xxxx0xxxxx1xxxx11xxx.  */
+                                                          return A64_OPID_80c00218_fmop4s_SME_ZAda_3b_SME_Znx2_6_3_SME_Zm_17_3;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x0000000x101xxxx0xxxxx1xxxx11xxx.  */
+                                                          return A64_OPID_80d00218_fmop4s_SME_ZAda_3b_SME_Znx2_6_3_SME_Zmx2_17_3;
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                          else
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 x0000000x10xxxxx1xxxxxxxxxxx1xxx.  */
+                                              return A64_OPID_80408008_stmopa_SME_ZAda_2b_SME_Znx2_SVE_Zm_16_SME_Zk_INDEX;
+                                            }
                                         }
                                     }
                                 }
@@ -1070,10 +1390,50 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                         {
                                           if (((word >> 30) & 0x1) == 0)
                                             {
-                                              /* 33222222222211111111110000000000
-                                                 10987654321098765432109876543210
-                                                 x0100000110xxxxxxxxxxxxxxxx0xxxx.  */
-                                              return A64_OPID_a0c00000_smopa_SME_ZAda_3b_SVE_Pg3_SME_Pm_SVE_Zn_SVE_Zm_16;
+                                              if (((word >> 3) & 0x1) == 0)
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     x0100000110xxxxxxxxxxxxxxxx00xxx.  */
+                                                  return A64_OPID_a0c00000_smopa_SME_ZAda_3b_SVE_Pg3_SME_Pm_SVE_Zn_SVE_Zm_16;
+                                                }
+                                              else
+                                                {
+                                                  if (((word >> 9) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 20) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x01000001100xxxxxxxxxx0xxxx01xxx.  */
+                                                          return A64_OPID_a0c00008_smop4a_SME_ZAda_3b_SME_Zn_6_3_SME_Zm_17_3;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x01000001101xxxxxxxxxx0xxxx01xxx.  */
+                                                          return A64_OPID_a0d00008_smop4a_SME_ZAda_3b_SME_Zn_6_3_SME_Zmx2_17_3;
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 20) & 0x1) == 0)
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x01000001100xxxxxxxxxx1xxxx01xxx.  */
+                                                          return A64_OPID_a0c00208_smop4a_SME_ZAda_3b_SME_Znx2_6_3_SME_Zm_17_3;
+                                                        }
+                                                      else
+                                                        {
+                                                          /* 33222222222211111111110000000000
+                                                             10987654321098765432109876543210
+                                                             x01000001101xxxxxxxxxx1xxxx01xxx.  */
+                                                          return A64_OPID_a0d00208_smop4a_SME_ZAda_3b_SME_Znx2_6_3_SME_Zmx2_17_3;
+                                                        }
+                                                    }
+                                                }
                                             }
                                           else
                                             {
@@ -1085,10 +1445,50 @@ aarch64_opcode_lookup_1 (uin[...]

[diff truncated at 100000 bytes]


More information about the Binutils-cvs mailing list