[binutils-gdb/binutils-2_43-branch] aarch64: Fix sve2p1 gating and add missing instructions

Andrew Carlotti acarlotti@sourceware.org
Fri Jan 17 16:43:28 GMT 2025


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

commit 61f8adadd6db110f4a333c0a853dc492d8abe4bc
Author: Andrew Carlotti <andrew.carlotti@arm.com>
Date:   Thu Jan 16 02:34:44 2025 +0000

    aarch64: Fix sve2p1 gating and add missing instructions
    
    Many FEAT_SVE2p1 instructions need to be enabled by either of two
    different features (one for streaming mode, and one for non-streaming
    mode).  This patch adds correct gating conditions for these
    instructions.
    
    There were also a few sve2p1 instructions missing altogether, so add
    those as well.
    
    The testsuite is modified to check for all alternative enablement
    conditions.  In many cases this is done by adding an alternative
    assembler commands to existing test files.  For some SME/SME2 tests,
    only some of the instructions are enabled by +sve2p1, so these are
    copied into a separate test.  For original SVE2p1 tests, the non-SME2p1
    instructions have been moved to a separate test file.
    
    There are also new tests for the newly added instructions.  These
    include a couple of fixme comments relating to bad error reporting,
    which should be investigated later.

Diff:
---
 gas/config/tc-aarch64.c                      |   5 +
 gas/testsuite/gas/aarch64/sme-9.d            |   1 +
 gas/testsuite/gas/aarch64/sme2-2-sve2p1.d    | 169 ++++++++++
 gas/testsuite/gas/aarch64/sme2-2-sve2p1.s    | 175 +++++++++++
 gas/testsuite/gas/aarch64/sme2-3-sve2p1.d    | 169 ++++++++++
 gas/testsuite/gas/aarch64/sme2-3-sve2p1.s    | 175 +++++++++++
 gas/testsuite/gas/aarch64/sme2-4-sve2p1.d    | 169 ++++++++++
 gas/testsuite/gas/aarch64/sme2-4-sve2p1.s    | 175 +++++++++++
 gas/testsuite/gas/aarch64/sme2-5-sve2p1.d    | 169 ++++++++++
 gas/testsuite/gas/aarch64/sme2-5-sve2p1.s    | 175 +++++++++++
 gas/testsuite/gas/aarch64/sme2-6-sve2p1.d    | 109 +++++++
 gas/testsuite/gas/aarch64/sme2-6-sve2p1.s    | 112 +++++++
 gas/testsuite/gas/aarch64/sme2-7.d           |   1 +
 gas/testsuite/gas/aarch64/sve2-sme2-2.d      |   1 +
 gas/testsuite/gas/aarch64/sve2-sme2-3.d      |   1 +
 gas/testsuite/gas/aarch64/sve2-sme2-4.d      |   1 +
 gas/testsuite/gas/aarch64/sve2-sme2-5.d      |   1 +
 gas/testsuite/gas/aarch64/sve2-sme2-6.d      |   1 +
 gas/testsuite/gas/aarch64/sve2-sme2-7.d      |   1 +
 gas/testsuite/gas/aarch64/sve2p1-1.d         |   2 +
 gas/testsuite/gas/aarch64/sve2p1-4.d         |  20 +-
 gas/testsuite/gas/aarch64/sve2p1-4.s         |  20 --
 gas/testsuite/gas/aarch64/sve2p1-5.d         |   3 +
 gas/testsuite/gas/aarch64/sve2p1-6.d         |   2 +
 gas/testsuite/gas/aarch64/sve2p1-7.d         |   2 +
 gas/testsuite/gas/aarch64/sve2p1-8.d         |  29 ++
 gas/testsuite/gas/aarch64/sve2p1-8.s         |  19 ++
 gas/testsuite/gas/aarch64/sve2p1-9-invalid.d |   2 +
 gas/testsuite/gas/aarch64/sve2p1-9-invalid.l |  73 +++++
 gas/testsuite/gas/aarch64/sve2p1-9-invalid.s |  69 ++++
 gas/testsuite/gas/aarch64/sve2p1-9.d         |  75 +++++
 gas/testsuite/gas/aarch64/sve2p1-9.s         |  71 +++++
 include/opcode/aarch64.h                     |  10 +-
 opcodes/aarch64-dis-2.c                      | 454 ++++++++++++++++-----------
 opcodes/aarch64-tbl.h                        | 336 +++++++++++---------
 35 files changed, 2424 insertions(+), 373 deletions(-)

diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index e94a0cff406..863c74a05c7 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -10766,6 +10766,11 @@ static const struct aarch64_virtual_dependency_table aarch64_dependencies[] = {
   {AARCH64_FEATURE (SSVE_FP8DOT2), AARCH64_FEATURE (FP8DOT2_SVE)},
   /* TODO: Add SME_F16F16->SME_F16F16_F8F16 when SME_F16F16 is added.  */
   {AARCH64_FEATURE (SME_F8F16), AARCH64_FEATURE (SME_F16F16_F8F16)},
+  {AARCH64_FEATURE (SVE2p1), AARCH64_FEATURES (3, SVE2p1_SME, SVE2p1_SME2,
+					       SVE2p1_SME2p1)},
+  {AARCH64_FEATURE (SME), AARCH64_FEATURE (SVE2p1_SME)},
+  {AARCH64_FEATURE (SME2), AARCH64_FEATURE (SVE2p1_SME2)},
+  {AARCH64_FEATURE (SME2p1), AARCH64_FEATURE (SVE2p1_SME2p1)},
 };
 
 static aarch64_feature_set
diff --git a/gas/testsuite/gas/aarch64/sme-9.d b/gas/testsuite/gas/aarch64/sme-9.d
index 69b27020d01..ffc61940a4e 100644
--- a/gas/testsuite/gas/aarch64/sme-9.d
+++ b/gas/testsuite/gas/aarch64/sme-9.d
@@ -1,5 +1,6 @@
 #name: SVE2 instructions added to support SME
 #as: -march=armv8-a+sme
+#as: -march=armv8-a+sve2p1
 #objdump: -dr
 
 .*:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sme2-2-sve2p1.d b/gas/testsuite/gas/aarch64/sme2-2-sve2p1.d
new file mode 100644
index 00000000000..a406a8518e2
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-2-sve2p1.d
@@ -0,0 +1,169 @@
+#as: -march=armv8-a+sve2p1
+#objdump: -dr
+
+[^:]+:     file format .*
+
+
+[^:]+:
+
+[^:]+:
+[^:]+:	a0400000 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x0\]
+[^:]+:	a0400000 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x0\]
+[^:]+:	a0400000 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x0\]
+[^:]+:	a040001e 	ld1b	{z30\.b-z31\.b}, pn8/z, \[x0\]
+[^:]+:	a0401c00 	ld1b	{z0\.b-z1\.b}, pn15/z, \[x0\]
+[^:]+:	a04003c0 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x30\]
+[^:]+:	a04003e0 	ld1b	{z0\.b-z1\.b}, pn8/z, \[sp\]
+[^:]+:	a0480000 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x0, #-16, mul vl\]
+[^:]+:	a0470000 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x0, #14, mul vl\]
+[^:]+:	a04b156c 	ld1b	{z12\.b-z13\.b}, pn13/z, \[x11, #-10, mul vl\]
+[^:]+:	a0408000 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x0\]
+[^:]+:	a0408000 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x0\]
+[^:]+:	a0408000 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x0\]
+[^:]+:	a040801c 	ld1b	{z28\.b-z31\.b}, pn8/z, \[x0\]
+[^:]+:	a0409c00 	ld1b	{z0\.b-z3\.b}, pn15/z, \[x0\]
+[^:]+:	a04083c0 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x30\]
+[^:]+:	a04083e0 	ld1b	{z0\.b-z3\.b}, pn8/z, \[sp\]
+[^:]+:	a0488000 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x0, #-32, mul vl\]
+[^:]+:	a0478000 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x0, #28, mul vl\]
+[^:]+:	a0458e28 	ld1b	{z8\.b-z11\.b}, pn11/z, \[x17, #20, mul vl\]
+[^:]+:	a0010000 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0010000 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0010000 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a001001e 	ld1b	{z30\.b-z31\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0011c00 	ld1b	{z0\.b-z1\.b}, pn15/z, \[x0, x1\]
+[^:]+:	a00103c0 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x30, x1\]
+[^:]+:	a00103e0 	ld1b	{z0\.b-z1\.b}, pn8/z, \[sp, x1\]
+[^:]+:	a01e0000 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x0, x30\]
+[^:]+:	a01f0000 	ld1b	{z0\.b-z1\.b}, pn8/z, \[x0, xzr\]
+[^:]+:	a003074e 	ld1b	{z14\.b-z15\.b}, pn9/z, \[x26, x3\]
+[^:]+:	a0018000 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0018000 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0018000 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a001801c 	ld1b	{z28\.b-z31\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0019c00 	ld1b	{z0\.b-z3\.b}, pn15/z, \[x0, x1\]
+[^:]+:	a00183c0 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x30, x1\]
+[^:]+:	a00183e0 	ld1b	{z0\.b-z3\.b}, pn8/z, \[sp, x1\]
+[^:]+:	a01e8000 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x0, x30\]
+[^:]+:	a01f8000 	ld1b	{z0\.b-z3\.b}, pn8/z, \[x0, xzr\]
+[^:]+:	a0018f68 	ld1b	{z8\.b-z11\.b}, pn11/z, \[x27, x1\]
+[^:]+:	a0400001 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x0\]
+[^:]+:	a0400001 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x0\]
+[^:]+:	a0400001 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x0\]
+[^:]+:	a040001f 	ldnt1b	{z30\.b-z31\.b}, pn8/z, \[x0\]
+[^:]+:	a0401c01 	ldnt1b	{z0\.b-z1\.b}, pn15/z, \[x0\]
+[^:]+:	a04003c1 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x30\]
+[^:]+:	a04003e1 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[sp\]
+[^:]+:	a0480001 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x0, #-16, mul vl\]
+[^:]+:	a0470001 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x0, #14, mul vl\]
+[^:]+:	a04b156d 	ldnt1b	{z12\.b-z13\.b}, pn13/z, \[x11, #-10, mul vl\]
+[^:]+:	a0408001 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x0\]
+[^:]+:	a0408001 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x0\]
+[^:]+:	a0408001 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x0\]
+[^:]+:	a040801d 	ldnt1b	{z28\.b-z31\.b}, pn8/z, \[x0\]
+[^:]+:	a0409c01 	ldnt1b	{z0\.b-z3\.b}, pn15/z, \[x0\]
+[^:]+:	a04083c1 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x30\]
+[^:]+:	a04083e1 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[sp\]
+[^:]+:	a0488001 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x0, #-32, mul vl\]
+[^:]+:	a0478001 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x0, #28, mul vl\]
+[^:]+:	a0458e29 	ldnt1b	{z8\.b-z11\.b}, pn11/z, \[x17, #20, mul vl\]
+[^:]+:	a0010001 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0010001 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0010001 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a001001f 	ldnt1b	{z30\.b-z31\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0011c01 	ldnt1b	{z0\.b-z1\.b}, pn15/z, \[x0, x1\]
+[^:]+:	a00103c1 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x30, x1\]
+[^:]+:	a00103e1 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[sp, x1\]
+[^:]+:	a01e0001 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x0, x30\]
+[^:]+:	a01f0001 	ldnt1b	{z0\.b-z1\.b}, pn8/z, \[x0, xzr\]
+[^:]+:	a003074f 	ldnt1b	{z14\.b-z15\.b}, pn9/z, \[x26, x3\]
+[^:]+:	a0018001 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0018001 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0018001 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a001801d 	ldnt1b	{z28\.b-z31\.b}, pn8/z, \[x0, x1\]
+[^:]+:	a0019c01 	ldnt1b	{z0\.b-z3\.b}, pn15/z, \[x0, x1\]
+[^:]+:	a00183c1 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x30, x1\]
+[^:]+:	a00183e1 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[sp, x1\]
+[^:]+:	a01e8001 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x0, x30\]
+[^:]+:	a01f8001 	ldnt1b	{z0\.b-z3\.b}, pn8/z, \[x0, xzr\]
+[^:]+:	a0018f69 	ldnt1b	{z8\.b-z11\.b}, pn11/z, \[x27, x1\]
+[^:]+:	a0600000 	st1b	{z0\.b-z1\.b}, pn8, \[x0\]
+[^:]+:	a0600000 	st1b	{z0\.b-z1\.b}, pn8, \[x0\]
+[^:]+:	a0600000 	st1b	{z0\.b-z1\.b}, pn8, \[x0\]
+[^:]+:	a060001e 	st1b	{z30\.b-z31\.b}, pn8, \[x0\]
+[^:]+:	a0601c00 	st1b	{z0\.b-z1\.b}, pn15, \[x0\]
+[^:]+:	a06003c0 	st1b	{z0\.b-z1\.b}, pn8, \[x30\]
+[^:]+:	a06003e0 	st1b	{z0\.b-z1\.b}, pn8, \[sp\]
+[^:]+:	a0680000 	st1b	{z0\.b-z1\.b}, pn8, \[x0, #-16, mul vl\]
+[^:]+:	a0670000 	st1b	{z0\.b-z1\.b}, pn8, \[x0, #14, mul vl\]
+[^:]+:	a06b156c 	st1b	{z12\.b-z13\.b}, pn13, \[x11, #-10, mul vl\]
+[^:]+:	a0608000 	st1b	{z0\.b-z3\.b}, pn8, \[x0\]
+[^:]+:	a0608000 	st1b	{z0\.b-z3\.b}, pn8, \[x0\]
+[^:]+:	a0608000 	st1b	{z0\.b-z3\.b}, pn8, \[x0\]
+[^:]+:	a060801c 	st1b	{z28\.b-z31\.b}, pn8, \[x0\]
+[^:]+:	a0609c00 	st1b	{z0\.b-z3\.b}, pn15, \[x0\]
+[^:]+:	a06083c0 	st1b	{z0\.b-z3\.b}, pn8, \[x30\]
+[^:]+:	a06083e0 	st1b	{z0\.b-z3\.b}, pn8, \[sp\]
+[^:]+:	a0688000 	st1b	{z0\.b-z3\.b}, pn8, \[x0, #-32, mul vl\]
+[^:]+:	a0678000 	st1b	{z0\.b-z3\.b}, pn8, \[x0, #28, mul vl\]
+[^:]+:	a0658e28 	st1b	{z8\.b-z11\.b}, pn11, \[x17, #20, mul vl\]
+[^:]+:	a0210000 	st1b	{z0\.b-z1\.b}, pn8, \[x0, x1\]
+[^:]+:	a0210000 	st1b	{z0\.b-z1\.b}, pn8, \[x0, x1\]
+[^:]+:	a0210000 	st1b	{z0\.b-z1\.b}, pn8, \[x0, x1\]
+[^:]+:	a021001e 	st1b	{z30\.b-z31\.b}, pn8, \[x0, x1\]
+[^:]+:	a0211c00 	st1b	{z0\.b-z1\.b}, pn15, \[x0, x1\]
+[^:]+:	a02103c0 	st1b	{z0\.b-z1\.b}, pn8, \[x30, x1\]
+[^:]+:	a02103e0 	st1b	{z0\.b-z1\.b}, pn8, \[sp, x1\]
+[^:]+:	a03e0000 	st1b	{z0\.b-z1\.b}, pn8, \[x0, x30\]
+[^:]+:	a03f0000 	st1b	{z0\.b-z1\.b}, pn8, \[x0, xzr\]
+[^:]+:	a023074e 	st1b	{z14\.b-z15\.b}, pn9, \[x26, x3\]
+[^:]+:	a0218000 	st1b	{z0\.b-z3\.b}, pn8, \[x0, x1\]
+[^:]+:	a0218000 	st1b	{z0\.b-z3\.b}, pn8, \[x0, x1\]
+[^:]+:	a0218000 	st1b	{z0\.b-z3\.b}, pn8, \[x0, x1\]
+[^:]+:	a021801c 	st1b	{z28\.b-z31\.b}, pn8, \[x0, x1\]
+[^:]+:	a0219c00 	st1b	{z0\.b-z3\.b}, pn15, \[x0, x1\]
+[^:]+:	a02183c0 	st1b	{z0\.b-z3\.b}, pn8, \[x30, x1\]
+[^:]+:	a02183e0 	st1b	{z0\.b-z3\.b}, pn8, \[sp, x1\]
+[^:]+:	a03e8000 	st1b	{z0\.b-z3\.b}, pn8, \[x0, x30\]
+[^:]+:	a03f8000 	st1b	{z0\.b-z3\.b}, pn8, \[x0, xzr\]
+[^:]+:	a0218f68 	st1b	{z8\.b-z11\.b}, pn11, \[x27, x1\]
+[^:]+:	a0600001 	stnt1b	{z0\.b-z1\.b}, pn8, \[x0\]
+[^:]+:	a0600001 	stnt1b	{z0\.b-z1\.b}, pn8, \[x0\]
+[^:]+:	a0600001 	stnt1b	{z0\.b-z1\.b}, pn8, \[x0\]
+[^:]+:	a060001f 	stnt1b	{z30\.b-z31\.b}, pn8, \[x0\]
+[^:]+:	a0601c01 	stnt1b	{z0\.b-z1\.b}, pn15, \[x0\]
+[^:]+:	a06003c1 	stnt1b	{z0\.b-z1\.b}, pn8, \[x30\]
+[^:]+:	a06003e1 	stnt1b	{z0\.b-z1\.b}, pn8, \[sp\]
+[^:]+:	a0680001 	stnt1b	{z0\.b-z1\.b}, pn8, \[x0, #-16, mul vl\]
+[^:]+:	a0670001 	stnt1b	{z0\.b-z1\.b}, pn8, \[x0, #14, mul vl\]
+[^:]+:	a06b156d 	stnt1b	{z12\.b-z13\.b}, pn13, \[x11, #-10, mul vl\]
+[^:]+:	a0608001 	stnt1b	{z0\.b-z3\.b}, pn8, \[x0\]
+[^:]+:	a0608001 	stnt1b	{z0\.b-z3\.b}, pn8, \[x0\]
+[^:]+:	a0608001 	stnt1b	{z0\.b-z3\.b}, pn8, \[x0\]
+[^:]+:	a060801d 	stnt1b	{z28\.b-z31\.b}, pn8, \[x0\]
+[^:]+:	a0609c01 	stnt1b	{z0\.b-z3\.b}, pn15, \[x0\]
+[^:]+:	a06083c1 	stnt1b	{z0\.b-z3\.b}, pn8, \[x30\]
+[^:]+:	a06083e1 	stnt1b	{z0\.b-z3\.b}, pn8, \[sp\]
+[^:]+:	a0688001 	stnt1b	{z0\.b-z3\.b}, pn8, \[x0, #-32, mul vl\]
+[^:]+:	a0678001 	stnt1b	{z0\.b-z3\.b}, pn8, \[x0, #28, mul vl\]
+[^:]+:	a0658e29 	stnt1b	{z8\.b-z11\.b}, pn11, \[x17, #20, mul vl\]
+[^:]+:	a0210001 	stnt1b	{z0\.b-z1\.b}, pn8, \[x0, x1\]
+[^:]+:	a0210001 	stnt1b	{z0\.b-z1\.b}, pn8, \[x0, x1\]
+[^:]+:	a0210001 	stnt1b	{z0\.b-z1\.b}, pn8, \[x0, x1\]
+[^:]+:	a021001f 	stnt1b	{z30\.b-z31\.b}, pn8, \[x0, x1\]
+[^:]+:	a0211c01 	stnt1b	{z0\.b-z1\.b}, pn15, \[x0, x1\]
+[^:]+:	a02103c1 	stnt1b	{z0\.b-z1\.b}, pn8, \[x30, x1\]
+[^:]+:	a02103e1 	stnt1b	{z0\.b-z1\.b}, pn8, \[sp, x1\]
+[^:]+:	a03e0001 	stnt1b	{z0\.b-z1\.b}, pn8, \[x0, x30\]
+[^:]+:	a03f0001 	stnt1b	{z0\.b-z1\.b}, pn8, \[x0, xzr\]
+[^:]+:	a023074f 	stnt1b	{z14\.b-z15\.b}, pn9, \[x26, x3\]
+[^:]+:	a0218001 	stnt1b	{z0\.b-z3\.b}, pn8, \[x0, x1\]
+[^:]+:	a0218001 	stnt1b	{z0\.b-z3\.b}, pn8, \[x0, x1\]
+[^:]+:	a0218001 	stnt1b	{z0\.b-z3\.b}, pn8, \[x0, x1\]
+[^:]+:	a021801d 	stnt1b	{z28\.b-z31\.b}, pn8, \[x0, x1\]
+[^:]+:	a0219c01 	stnt1b	{z0\.b-z3\.b}, pn15, \[x0, x1\]
+[^:]+:	a02183c1 	stnt1b	{z0\.b-z3\.b}, pn8, \[x30, x1\]
+[^:]+:	a02183e1 	stnt1b	{z0\.b-z3\.b}, pn8, \[sp, x1\]
+[^:]+:	a03e8001 	stnt1b	{z0\.b-z3\.b}, pn8, \[x0, x30\]
+[^:]+:	a03f8001 	stnt1b	{z0\.b-z3\.b}, pn8, \[x0, xzr\]
+[^:]+:	a0218f69 	stnt1b	{z8\.b-z11\.b}, pn11, \[x27, x1\]
diff --git a/gas/testsuite/gas/aarch64/sme2-2-sve2p1.s b/gas/testsuite/gas/aarch64/sme2-2-sve2p1.s
new file mode 100644
index 00000000000..8c90a67bf7c
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-2-sve2p1.s
@@ -0,0 +1,175 @@
+	ld1b	{ z0.b - z1.b }, pn8/z, [x0]
+	ld1b	{ z0.b - z1.b }, pn8/z, [x0, #0, mul vl]
+	LD1B	{ Z0.B - Z1.B }, PN8/Z, [X0]
+	ld1b	{ z30.b - z31.b }, pn8/z, [x0]
+	ld1b	{ z0.b - z1.b }, pn15/z, [x0]
+	ld1b	{ z0.b - z1.b }, pn8/z, [x30]
+	ld1b	{ z0.b - z1.b }, pn8/z, [sp]
+	ld1b	{ z0.b - z1.b }, pn8/z, [x0, #-16, mul vl]
+	ld1b	{ z0.b - z1.b }, pn8/z, [x0, #14, mul vl]
+	ld1b	{ z12.b - z13.b }, pn13/z, [x11, #-10, mul vl]
+
+	ld1b	{ z0.b - z3.b }, pn8/z, [x0]
+	ld1b	{ z0.b - z3.b }, pn8/z, [x0, #0, mul vl]
+	LD1B	{ Z0.B - Z3.B }, PN8/Z, [X0]
+	ld1b	{ z28.b - z31.b }, pn8/z, [x0]
+	ld1b	{ z0.b - z3.b }, pn15/z, [x0]
+	ld1b	{ z0.b - z3.b }, pn8/z, [x30]
+	ld1b	{ z0.b - z3.b }, pn8/z, [sp]
+	ld1b	{ z0.b - z3.b }, pn8/z, [x0, #-32, mul vl]
+	ld1b	{ z0.b - z3.b }, pn8/z, [x0, #28, mul vl]
+	ld1b	{ z8.b - z11.b }, pn11/z, [x17, #20, mul vl]
+
+	ld1b	{ z0.b - z1.b }, pn8/z, [x0, x1]
+	ld1b	{ z0.b - z1.b }, pn8/z, [x0, x1, lsl #0]
+	LD1B	{ Z0.B - Z1.B }, PN8/Z, [X0, X1]
+	ld1b	{ z30.b - z31.b }, pn8/z, [x0, x1]
+	ld1b	{ z0.b - z1.b }, pn15/z, [x0, x1]
+	ld1b	{ z0.b - z1.b }, pn8/z, [x30, x1]
+	ld1b	{ z0.b - z1.b }, pn8/z, [sp, x1]
+	ld1b	{ z0.b - z1.b }, pn8/z, [x0, x30]
+	ld1b	{ z0.b - z1.b }, pn8/z, [x0, xzr]
+	ld1b	{ z14.b - z15.b }, pn9/z, [x26, x3]
+
+	ld1b	{ z0.b - z3.b }, pn8/z, [x0, x1]
+	ld1b	{ z0.b - z3.b }, pn8/z, [x0, x1, lsl #0]
+	LD1B	{ Z0.B - Z3.B }, PN8/Z, [X0, X1]
+	ld1b	{ z28.b - z31.b }, pn8/z, [x0, x1]
+	ld1b	{ z0.b - z3.b }, pn15/z, [x0, x1]
+	ld1b	{ z0.b - z3.b }, pn8/z, [x30, x1]
+	ld1b	{ z0.b - z3.b }, pn8/z, [sp, x1]
+	ld1b	{ z0.b - z3.b }, pn8/z, [x0, x30]
+	ld1b	{ z0.b - z3.b }, pn8/z, [x0, xzr]
+	ld1b	{ z8.b - z11.b }, pn11/z, [x27, x1]
+
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [x0]
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [x0, #0, mul vl]
+	LDNT1B	{ Z0.B - Z1.B }, PN8/Z, [X0]
+	ldnt1b	{ z30.b - z31.b }, pn8/z, [x0]
+	ldnt1b	{ z0.b - z1.b }, pn15/z, [x0]
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [x30]
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [sp]
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [x0, #-16, mul vl]
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [x0, #14, mul vl]
+	ldnt1b	{ z12.b - z13.b }, pn13/z, [x11, #-10, mul vl]
+
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [x0]
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [x0, #0, mul vl]
+	LDNT1B	{ Z0.B - Z3.B }, PN8/Z, [X0]
+	ldnt1b	{ z28.b - z31.b }, pn8/z, [x0]
+	ldnt1b	{ z0.b - z3.b }, pn15/z, [x0]
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [x30]
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [sp]
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [x0, #-32, mul vl]
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [x0, #28, mul vl]
+	ldnt1b	{ z8.b - z11.b }, pn11/z, [x17, #20, mul vl]
+
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [x0, x1]
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [x0, x1, lsl #0]
+	LDNT1B	{ Z0.B - Z1.B }, PN8/Z, [X0, X1]
+	ldnt1b	{ z30.b - z31.b }, pn8/z, [x0, x1]
+	ldnt1b	{ z0.b - z1.b }, pn15/z, [x0, x1]
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [x30, x1]
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [sp, x1]
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [x0, x30]
+	ldnt1b	{ z0.b - z1.b }, pn8/z, [x0, xzr]
+	ldnt1b	{ z14.b - z15.b }, pn9/z, [x26, x3]
+
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [x0, x1]
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [x0, x1, lsl #0]
+	LDNT1B	{ Z0.B - Z3.B }, PN8/Z, [X0, X1]
+	ldnt1b	{ z28.b - z31.b }, pn8/z, [x0, x1]
+	ldnt1b	{ z0.b - z3.b }, pn15/z, [x0, x1]
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [x30, x1]
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [sp, x1]
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [x0, x30]
+	ldnt1b	{ z0.b - z3.b }, pn8/z, [x0, xzr]
+	ldnt1b	{ z8.b - z11.b }, pn11/z, [x27, x1]
+
+	st1b	{ z0.b - z1.b }, pn8, [x0]
+	st1b	{ z0.b - z1.b }, pn8, [x0, #0, mul vl]
+	ST1B	{ Z0.B - Z1.B }, PN8, [X0]
+	st1b	{ z30.b - z31.b }, pn8, [x0]
+	st1b	{ z0.b - z1.b }, pn15, [x0]
+	st1b	{ z0.b - z1.b }, pn8, [x30]
+	st1b	{ z0.b - z1.b }, pn8, [sp]
+	st1b	{ z0.b - z1.b }, pn8, [x0, #-16, mul vl]
+	st1b	{ z0.b - z1.b }, pn8, [x0, #14, mul vl]
+	st1b	{ z12.b - z13.b }, pn13, [x11, #-10, mul vl]
+
+	st1b	{ z0.b - z3.b }, pn8, [x0]
+	st1b	{ z0.b - z3.b }, pn8, [x0, #0, mul vl]
+	ST1B	{ Z0.B - Z3.B }, PN8, [X0]
+	st1b	{ z28.b - z31.b }, pn8, [x0]
+	st1b	{ z0.b - z3.b }, pn15, [x0]
+	st1b	{ z0.b - z3.b }, pn8, [x30]
+	st1b	{ z0.b - z3.b }, pn8, [sp]
+	st1b	{ z0.b - z3.b }, pn8, [x0, #-32, mul vl]
+	st1b	{ z0.b - z3.b }, pn8, [x0, #28, mul vl]
+	st1b	{ z8.b - z11.b }, pn11, [x17, #20, mul vl]
+
+	st1b	{ z0.b - z1.b }, pn8, [x0, x1]
+	st1b	{ z0.b - z1.b }, pn8, [x0, x1, lsl #0]
+	ST1B	{ Z0.B - Z1.B }, PN8, [X0, X1]
+	st1b	{ z30.b - z31.b }, pn8, [x0, x1]
+	st1b	{ z0.b - z1.b }, pn15, [x0, x1]
+	st1b	{ z0.b - z1.b }, pn8, [x30, x1]
+	st1b	{ z0.b - z1.b }, pn8, [sp, x1]
+	st1b	{ z0.b - z1.b }, pn8, [x0, x30]
+	st1b	{ z0.b - z1.b }, pn8, [x0, xzr]
+	st1b	{ z14.b - z15.b }, pn9, [x26, x3]
+
+	st1b	{ z0.b - z3.b }, pn8, [x0, x1]
+	st1b	{ z0.b - z3.b }, pn8, [x0, x1, lsl #0]
+	ST1B	{ Z0.B - Z3.B }, PN8, [X0, X1]
+	st1b	{ z28.b - z31.b }, pn8, [x0, x1]
+	st1b	{ z0.b - z3.b }, pn15, [x0, x1]
+	st1b	{ z0.b - z3.b }, pn8, [x30, x1]
+	st1b	{ z0.b - z3.b }, pn8, [sp, x1]
+	st1b	{ z0.b - z3.b }, pn8, [x0, x30]
+	st1b	{ z0.b - z3.b }, pn8, [x0, xzr]
+	st1b	{ z8.b - z11.b }, pn11, [x27, x1]
+
+	stnt1b	{ z0.b - z1.b }, pn8, [x0]
+	stnt1b	{ z0.b - z1.b }, pn8, [x0, #0, mul vl]
+	STNT1B	{ Z0.B - Z1.B }, PN8, [X0]
+	stnt1b	{ z30.b - z31.b }, pn8, [x0]
+	stnt1b	{ z0.b - z1.b }, pn15, [x0]
+	stnt1b	{ z0.b - z1.b }, pn8, [x30]
+	stnt1b	{ z0.b - z1.b }, pn8, [sp]
+	stnt1b	{ z0.b - z1.b }, pn8, [x0, #-16, mul vl]
+	stnt1b	{ z0.b - z1.b }, pn8, [x0, #14, mul vl]
+	stnt1b	{ z12.b - z13.b }, pn13, [x11, #-10, mul vl]
+
+	stnt1b	{ z0.b - z3.b }, pn8, [x0]
+	stnt1b	{ z0.b - z3.b }, pn8, [x0, #0, mul vl]
+	STNT1B	{ Z0.B - Z3.B }, PN8, [X0]
+	stnt1b	{ z28.b - z31.b }, pn8, [x0]
+	stnt1b	{ z0.b - z3.b }, pn15, [x0]
+	stnt1b	{ z0.b - z3.b }, pn8, [x30]
+	stnt1b	{ z0.b - z3.b }, pn8, [sp]
+	stnt1b	{ z0.b - z3.b }, pn8, [x0, #-32, mul vl]
+	stnt1b	{ z0.b - z3.b }, pn8, [x0, #28, mul vl]
+	stnt1b	{ z8.b - z11.b }, pn11, [x17, #20, mul vl]
+
+	stnt1b	{ z0.b - z1.b }, pn8, [x0, x1]
+	stnt1b	{ z0.b - z1.b }, pn8, [x0, x1, lsl #0]
+	STNT1B	{ Z0.B - Z1.B }, PN8, [X0, X1]
+	stnt1b	{ z30.b - z31.b }, pn8, [x0, x1]
+	stnt1b	{ z0.b - z1.b }, pn15, [x0, x1]
+	stnt1b	{ z0.b - z1.b }, pn8, [x30, x1]
+	stnt1b	{ z0.b - z1.b }, pn8, [sp, x1]
+	stnt1b	{ z0.b - z1.b }, pn8, [x0, x30]
+	stnt1b	{ z0.b - z1.b }, pn8, [x0, xzr]
+	stnt1b	{ z14.b - z15.b }, pn9, [x26, x3]
+
+	stnt1b	{ z0.b - z3.b }, pn8, [x0, x1]
+	stnt1b	{ z0.b - z3.b }, pn8, [x0, x1, lsl #0]
+	STNT1B	{ Z0.B - Z3.B }, PN8, [X0, X1]
+	stnt1b	{ z28.b - z31.b }, pn8, [x0, x1]
+	stnt1b	{ z0.b - z3.b }, pn15, [x0, x1]
+	stnt1b	{ z0.b - z3.b }, pn8, [x30, x1]
+	stnt1b	{ z0.b - z3.b }, pn8, [sp, x1]
+	stnt1b	{ z0.b - z3.b }, pn8, [x0, x30]
+	stnt1b	{ z0.b - z3.b }, pn8, [x0, xzr]
+	stnt1b	{ z8.b - z11.b }, pn11, [x27, x1]
diff --git a/gas/testsuite/gas/aarch64/sme2-3-sve2p1.d b/gas/testsuite/gas/aarch64/sme2-3-sve2p1.d
new file mode 100644
index 00000000000..4e39bddcfbc
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-3-sve2p1.d
@@ -0,0 +1,169 @@
+#as: -march=armv8-a+sve2p1
+#objdump: -dr
+
+[^:]+:     file format .*
+
+
+[^:]+:
+
+[^:]+:
+[^:]+:	a0406000 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x0\]
+[^:]+:	a0406000 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x0\]
+[^:]+:	a0406000 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x0\]
+[^:]+:	a040601e 	ld1d	{z30\.d-z31\.d}, pn8/z, \[x0\]
+[^:]+:	a0407c00 	ld1d	{z0\.d-z1\.d}, pn15/z, \[x0\]
+[^:]+:	a04063c0 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x30\]
+[^:]+:	a04063e0 	ld1d	{z0\.d-z1\.d}, pn8/z, \[sp\]
+[^:]+:	a0486000 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x0, #-16, mul vl\]
+[^:]+:	a0476000 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x0, #14, mul vl\]
+[^:]+:	a04b756c 	ld1d	{z12\.d-z13\.d}, pn13/z, \[x11, #-10, mul vl\]
+[^:]+:	a040e000 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x0\]
+[^:]+:	a040e000 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x0\]
+[^:]+:	a040e000 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x0\]
+[^:]+:	a040e01c 	ld1d	{z28\.d-z31\.d}, pn8/z, \[x0\]
+[^:]+:	a040fc00 	ld1d	{z0\.d-z3\.d}, pn15/z, \[x0\]
+[^:]+:	a040e3c0 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x30\]
+[^:]+:	a040e3e0 	ld1d	{z0\.d-z3\.d}, pn8/z, \[sp\]
+[^:]+:	a048e000 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x0, #-32, mul vl\]
+[^:]+:	a047e000 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x0, #28, mul vl\]
+[^:]+:	a045ee28 	ld1d	{z8\.d-z11\.d}, pn11/z, \[x17, #20, mul vl\]
+[^:]+:	a0016000 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a0016000 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a0016000 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a001601e 	ld1d	{z30\.d-z31\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a0017c00 	ld1d	{z0\.d-z1\.d}, pn15/z, \[x0, x1, lsl #3\]
+[^:]+:	a00163c0 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x30, x1, lsl #3\]
+[^:]+:	a00163e0 	ld1d	{z0\.d-z1\.d}, pn8/z, \[sp, x1, lsl #3\]
+[^:]+:	a01e6000 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x0, x30, lsl #3\]
+[^:]+:	a01f6000 	ld1d	{z0\.d-z1\.d}, pn8/z, \[x0, xzr, lsl #3\]
+[^:]+:	a003674e 	ld1d	{z14\.d-z15\.d}, pn9/z, \[x26, x3, lsl #3\]
+[^:]+:	a001e000 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a001e000 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a001e000 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a001e01c 	ld1d	{z28\.d-z31\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a001fc00 	ld1d	{z0\.d-z3\.d}, pn15/z, \[x0, x1, lsl #3\]
+[^:]+:	a001e3c0 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x30, x1, lsl #3\]
+[^:]+:	a001e3e0 	ld1d	{z0\.d-z3\.d}, pn8/z, \[sp, x1, lsl #3\]
+[^:]+:	a01ee000 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x0, x30, lsl #3\]
+[^:]+:	a01fe000 	ld1d	{z0\.d-z3\.d}, pn8/z, \[x0, xzr, lsl #3\]
+[^:]+:	a001ef68 	ld1d	{z8\.d-z11\.d}, pn11/z, \[x27, x1, lsl #3\]
+[^:]+:	a0406001 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x0\]
+[^:]+:	a0406001 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x0\]
+[^:]+:	a0406001 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x0\]
+[^:]+:	a040601f 	ldnt1d	{z30\.d-z31\.d}, pn8/z, \[x0\]
+[^:]+:	a0407c01 	ldnt1d	{z0\.d-z1\.d}, pn15/z, \[x0\]
+[^:]+:	a04063c1 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x30\]
+[^:]+:	a04063e1 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[sp\]
+[^:]+:	a0486001 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x0, #-16, mul vl\]
+[^:]+:	a0476001 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x0, #14, mul vl\]
+[^:]+:	a04b756d 	ldnt1d	{z12\.d-z13\.d}, pn13/z, \[x11, #-10, mul vl\]
+[^:]+:	a040e001 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x0\]
+[^:]+:	a040e001 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x0\]
+[^:]+:	a040e001 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x0\]
+[^:]+:	a040e01d 	ldnt1d	{z28\.d-z31\.d}, pn8/z, \[x0\]
+[^:]+:	a040fc01 	ldnt1d	{z0\.d-z3\.d}, pn15/z, \[x0\]
+[^:]+:	a040e3c1 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x30\]
+[^:]+:	a040e3e1 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[sp\]
+[^:]+:	a048e001 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x0, #-32, mul vl\]
+[^:]+:	a047e001 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x0, #28, mul vl\]
+[^:]+:	a045ee29 	ldnt1d	{z8\.d-z11\.d}, pn11/z, \[x17, #20, mul vl\]
+[^:]+:	a0016001 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a0016001 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a0016001 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a001601f 	ldnt1d	{z30\.d-z31\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a0017c01 	ldnt1d	{z0\.d-z1\.d}, pn15/z, \[x0, x1, lsl #3\]
+[^:]+:	a00163c1 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x30, x1, lsl #3\]
+[^:]+:	a00163e1 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[sp, x1, lsl #3\]
+[^:]+:	a01e6001 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x0, x30, lsl #3\]
+[^:]+:	a01f6001 	ldnt1d	{z0\.d-z1\.d}, pn8/z, \[x0, xzr, lsl #3\]
+[^:]+:	a003674f 	ldnt1d	{z14\.d-z15\.d}, pn9/z, \[x26, x3, lsl #3\]
+[^:]+:	a001e001 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a001e001 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a001e001 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a001e01d 	ldnt1d	{z28\.d-z31\.d}, pn8/z, \[x0, x1, lsl #3\]
+[^:]+:	a001fc01 	ldnt1d	{z0\.d-z3\.d}, pn15/z, \[x0, x1, lsl #3\]
+[^:]+:	a001e3c1 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x30, x1, lsl #3\]
+[^:]+:	a001e3e1 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[sp, x1, lsl #3\]
+[^:]+:	a01ee001 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x0, x30, lsl #3\]
+[^:]+:	a01fe001 	ldnt1d	{z0\.d-z3\.d}, pn8/z, \[x0, xzr, lsl #3\]
+[^:]+:	a001ef69 	ldnt1d	{z8\.d-z11\.d}, pn11/z, \[x27, x1, lsl #3\]
+[^:]+:	a0606000 	st1d	{z0\.d-z1\.d}, pn8, \[x0\]
+[^:]+:	a0606000 	st1d	{z0\.d-z1\.d}, pn8, \[x0\]
+[^:]+:	a0606000 	st1d	{z0\.d-z1\.d}, pn8, \[x0\]
+[^:]+:	a060601e 	st1d	{z30\.d-z31\.d}, pn8, \[x0\]
+[^:]+:	a0607c00 	st1d	{z0\.d-z1\.d}, pn15, \[x0\]
+[^:]+:	a06063c0 	st1d	{z0\.d-z1\.d}, pn8, \[x30\]
+[^:]+:	a06063e0 	st1d	{z0\.d-z1\.d}, pn8, \[sp\]
+[^:]+:	a0686000 	st1d	{z0\.d-z1\.d}, pn8, \[x0, #-16, mul vl\]
+[^:]+:	a0676000 	st1d	{z0\.d-z1\.d}, pn8, \[x0, #14, mul vl\]
+[^:]+:	a06b756c 	st1d	{z12\.d-z13\.d}, pn13, \[x11, #-10, mul vl\]
+[^:]+:	a060e000 	st1d	{z0\.d-z3\.d}, pn8, \[x0\]
+[^:]+:	a060e000 	st1d	{z0\.d-z3\.d}, pn8, \[x0\]
+[^:]+:	a060e000 	st1d	{z0\.d-z3\.d}, pn8, \[x0\]
+[^:]+:	a060e01c 	st1d	{z28\.d-z31\.d}, pn8, \[x0\]
+[^:]+:	a060fc00 	st1d	{z0\.d-z3\.d}, pn15, \[x0\]
+[^:]+:	a060e3c0 	st1d	{z0\.d-z3\.d}, pn8, \[x30\]
+[^:]+:	a060e3e0 	st1d	{z0\.d-z3\.d}, pn8, \[sp\]
+[^:]+:	a068e000 	st1d	{z0\.d-z3\.d}, pn8, \[x0, #-32, mul vl\]
+[^:]+:	a067e000 	st1d	{z0\.d-z3\.d}, pn8, \[x0, #28, mul vl\]
+[^:]+:	a065ee28 	st1d	{z8\.d-z11\.d}, pn11, \[x17, #20, mul vl\]
+[^:]+:	a0216000 	st1d	{z0\.d-z1\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a0216000 	st1d	{z0\.d-z1\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a0216000 	st1d	{z0\.d-z1\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a021601e 	st1d	{z30\.d-z31\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a0217c00 	st1d	{z0\.d-z1\.d}, pn15, \[x0, x1, lsl #3\]
+[^:]+:	a02163c0 	st1d	{z0\.d-z1\.d}, pn8, \[x30, x1, lsl #3\]
+[^:]+:	a02163e0 	st1d	{z0\.d-z1\.d}, pn8, \[sp, x1, lsl #3\]
+[^:]+:	a03e6000 	st1d	{z0\.d-z1\.d}, pn8, \[x0, x30, lsl #3\]
+[^:]+:	a03f6000 	st1d	{z0\.d-z1\.d}, pn8, \[x0, xzr, lsl #3\]
+[^:]+:	a023674e 	st1d	{z14\.d-z15\.d}, pn9, \[x26, x3, lsl #3\]
+[^:]+:	a021e000 	st1d	{z0\.d-z3\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a021e000 	st1d	{z0\.d-z3\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a021e000 	st1d	{z0\.d-z3\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a021e01c 	st1d	{z28\.d-z31\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a021fc00 	st1d	{z0\.d-z3\.d}, pn15, \[x0, x1, lsl #3\]
+[^:]+:	a021e3c0 	st1d	{z0\.d-z3\.d}, pn8, \[x30, x1, lsl #3\]
+[^:]+:	a021e3e0 	st1d	{z0\.d-z3\.d}, pn8, \[sp, x1, lsl #3\]
+[^:]+:	a03ee000 	st1d	{z0\.d-z3\.d}, pn8, \[x0, x30, lsl #3\]
+[^:]+:	a03fe000 	st1d	{z0\.d-z3\.d}, pn8, \[x0, xzr, lsl #3\]
+[^:]+:	a021ef68 	st1d	{z8\.d-z11\.d}, pn11, \[x27, x1, lsl #3\]
+[^:]+:	a0606001 	stnt1d	{z0\.d-z1\.d}, pn8, \[x0\]
+[^:]+:	a0606001 	stnt1d	{z0\.d-z1\.d}, pn8, \[x0\]
+[^:]+:	a0606001 	stnt1d	{z0\.d-z1\.d}, pn8, \[x0\]
+[^:]+:	a060601f 	stnt1d	{z30\.d-z31\.d}, pn8, \[x0\]
+[^:]+:	a0607c01 	stnt1d	{z0\.d-z1\.d}, pn15, \[x0\]
+[^:]+:	a06063c1 	stnt1d	{z0\.d-z1\.d}, pn8, \[x30\]
+[^:]+:	a06063e1 	stnt1d	{z0\.d-z1\.d}, pn8, \[sp\]
+[^:]+:	a0686001 	stnt1d	{z0\.d-z1\.d}, pn8, \[x0, #-16, mul vl\]
+[^:]+:	a0676001 	stnt1d	{z0\.d-z1\.d}, pn8, \[x0, #14, mul vl\]
+[^:]+:	a06b756d 	stnt1d	{z12\.d-z13\.d}, pn13, \[x11, #-10, mul vl\]
+[^:]+:	a060e001 	stnt1d	{z0\.d-z3\.d}, pn8, \[x0\]
+[^:]+:	a060e001 	stnt1d	{z0\.d-z3\.d}, pn8, \[x0\]
+[^:]+:	a060e001 	stnt1d	{z0\.d-z3\.d}, pn8, \[x0\]
+[^:]+:	a060e01d 	stnt1d	{z28\.d-z31\.d}, pn8, \[x0\]
+[^:]+:	a060fc01 	stnt1d	{z0\.d-z3\.d}, pn15, \[x0\]
+[^:]+:	a060e3c1 	stnt1d	{z0\.d-z3\.d}, pn8, \[x30\]
+[^:]+:	a060e3e1 	stnt1d	{z0\.d-z3\.d}, pn8, \[sp\]
+[^:]+:	a068e001 	stnt1d	{z0\.d-z3\.d}, pn8, \[x0, #-32, mul vl\]
+[^:]+:	a067e001 	stnt1d	{z0\.d-z3\.d}, pn8, \[x0, #28, mul vl\]
+[^:]+:	a065ee29 	stnt1d	{z8\.d-z11\.d}, pn11, \[x17, #20, mul vl\]
+[^:]+:	a0216001 	stnt1d	{z0\.d-z1\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a0216001 	stnt1d	{z0\.d-z1\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a0216001 	stnt1d	{z0\.d-z1\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a021601f 	stnt1d	{z30\.d-z31\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a0217c01 	stnt1d	{z0\.d-z1\.d}, pn15, \[x0, x1, lsl #3\]
+[^:]+:	a02163c1 	stnt1d	{z0\.d-z1\.d}, pn8, \[x30, x1, lsl #3\]
+[^:]+:	a02163e1 	stnt1d	{z0\.d-z1\.d}, pn8, \[sp, x1, lsl #3\]
+[^:]+:	a03e6001 	stnt1d	{z0\.d-z1\.d}, pn8, \[x0, x30, lsl #3\]
+[^:]+:	a03f6001 	stnt1d	{z0\.d-z1\.d}, pn8, \[x0, xzr, lsl #3\]
+[^:]+:	a023674f 	stnt1d	{z14\.d-z15\.d}, pn9, \[x26, x3, lsl #3\]
+[^:]+:	a021e001 	stnt1d	{z0\.d-z3\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a021e001 	stnt1d	{z0\.d-z3\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a021e001 	stnt1d	{z0\.d-z3\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a021e01d 	stnt1d	{z28\.d-z31\.d}, pn8, \[x0, x1, lsl #3\]
+[^:]+:	a021fc01 	stnt1d	{z0\.d-z3\.d}, pn15, \[x0, x1, lsl #3\]
+[^:]+:	a021e3c1 	stnt1d	{z0\.d-z3\.d}, pn8, \[x30, x1, lsl #3\]
+[^:]+:	a021e3e1 	stnt1d	{z0\.d-z3\.d}, pn8, \[sp, x1, lsl #3\]
+[^:]+:	a03ee001 	stnt1d	{z0\.d-z3\.d}, pn8, \[x0, x30, lsl #3\]
+[^:]+:	a03fe001 	stnt1d	{z0\.d-z3\.d}, pn8, \[x0, xzr, lsl #3\]
+[^:]+:	a021ef69 	stnt1d	{z8\.d-z11\.d}, pn11, \[x27, x1, lsl #3\]
diff --git a/gas/testsuite/gas/aarch64/sme2-3-sve2p1.s b/gas/testsuite/gas/aarch64/sme2-3-sve2p1.s
new file mode 100644
index 00000000000..42c56b46a7b
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-3-sve2p1.s
@@ -0,0 +1,175 @@
+	ld1d	{ z0.d - z1.d }, pn8/z, [x0]
+	ld1d	{ z0.d - z1.d }, pn8/z, [x0, #0, mul vl]
+	LD1D	{ Z0.D - Z1.D }, PN8/Z, [X0]
+	ld1d	{ z30.d - z31.d }, pn8/z, [x0]
+	ld1d	{ z0.d - z1.d }, pn15/z, [x0]
+	ld1d	{ z0.d - z1.d }, pn8/z, [x30]
+	ld1d	{ z0.d - z1.d }, pn8/z, [sp]
+	ld1d	{ z0.d - z1.d }, pn8/z, [x0, #-16, mul vl]
+	ld1d	{ z0.d - z1.d }, pn8/z, [x0, #14, mul vl]
+	ld1d	{ z12.d - z13.d }, pn13/z, [x11, #-10, mul vl]
+
+	ld1d	{ z0.d - z3.d }, pn8/z, [x0]
+	ld1d	{ z0.d - z3.d }, pn8/z, [x0, #0, mul vl]
+	LD1D	{ Z0.D - Z3.D }, PN8/Z, [X0]
+	ld1d	{ z28.d - z31.d }, pn8/z, [x0]
+	ld1d	{ z0.d - z3.d }, pn15/z, [x0]
+	ld1d	{ z0.d - z3.d }, pn8/z, [x30]
+	ld1d	{ z0.d - z3.d }, pn8/z, [sp]
+	ld1d	{ z0.d - z3.d }, pn8/z, [x0, #-32, mul vl]
+	ld1d	{ z0.d - z3.d }, pn8/z, [x0, #28, mul vl]
+	ld1d	{ z8.d - z11.d }, pn11/z, [x17, #20, mul vl]
+
+	ld1d	{ z0.d - z1.d }, pn8/z, [x0, x1, lsl 3]
+	ld1d	{ z0.d - z1.d }, pn8/z, [x0, x1, lsl #3]
+	LD1D	{ Z0.D - Z1.D }, PN8/Z, [X0, X1, LSL #3]
+	ld1d	{ z30.d - z31.d }, pn8/z, [x0, x1, lsl #3]
+	ld1d	{ z0.d - z1.d }, pn15/z, [x0, x1, lsl #3]
+	ld1d	{ z0.d - z1.d }, pn8/z, [x30, x1, lsl #3]
+	ld1d	{ z0.d - z1.d }, pn8/z, [sp, x1, lsl #3]
+	ld1d	{ z0.d - z1.d }, pn8/z, [x0, x30, lsl #3]
+	ld1d	{ z0.d - z1.d }, pn8/z, [x0, xzr, lsl #3]
+	ld1d	{ z14.d - z15.d }, pn9/z, [x26, x3, lsl #3]
+
+	ld1d	{ z0.d - z3.d }, pn8/z, [x0, x1, lsl 3]
+	ld1d	{ z0.d - z3.d }, pn8/z, [x0, x1, lsl #3]
+	LD1D	{ Z0.D - Z3.D }, PN8/Z, [X0, X1, LSL #3]
+	ld1d	{ z28.d - z31.d }, pn8/z, [x0, x1, lsl #3]
+	ld1d	{ z0.d - z3.d }, pn15/z, [x0, x1, lsl #3]
+	ld1d	{ z0.d - z3.d }, pn8/z, [x30, x1, lsl #3]
+	ld1d	{ z0.d - z3.d }, pn8/z, [sp, x1, lsl #3]
+	ld1d	{ z0.d - z3.d }, pn8/z, [x0, x30, lsl #3]
+	ld1d	{ z0.d - z3.d }, pn8/z, [x0, xzr, lsl #3]
+	ld1d	{ z8.d - z11.d }, pn11/z, [x27, x1, lsl #3]
+
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [x0]
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [x0, #0, mul vl]
+	LDNT1D	{ Z0.D - Z1.D }, PN8/Z, [X0]
+	ldnt1d	{ z30.d - z31.d }, pn8/z, [x0]
+	ldnt1d	{ z0.d - z1.d }, pn15/z, [x0]
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [x30]
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [sp]
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [x0, #-16, mul vl]
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [x0, #14, mul vl]
+	ldnt1d	{ z12.d - z13.d }, pn13/z, [x11, #-10, mul vl]
+
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [x0]
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [x0, #0, mul vl]
+	LDNT1D	{ Z0.D - Z3.D }, PN8/Z, [X0]
+	ldnt1d	{ z28.d - z31.d }, pn8/z, [x0]
+	ldnt1d	{ z0.d - z3.d }, pn15/z, [x0]
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [x30]
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [sp]
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [x0, #-32, mul vl]
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [x0, #28, mul vl]
+	ldnt1d	{ z8.d - z11.d }, pn11/z, [x17, #20, mul vl]
+
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [x0, x1, lsl 3]
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [x0, x1, lsl #3]
+	LDNT1D	{ Z0.D - Z1.D }, PN8/Z, [X0, X1, LSL #3]
+	ldnt1d	{ z30.d - z31.d }, pn8/z, [x0, x1, lsl #3]
+	ldnt1d	{ z0.d - z1.d }, pn15/z, [x0, x1, lsl #3]
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [x30, x1, lsl #3]
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [sp, x1, lsl #3]
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [x0, x30, lsl #3]
+	ldnt1d	{ z0.d - z1.d }, pn8/z, [x0, xzr, lsl #3]
+	ldnt1d	{ z14.d - z15.d }, pn9/z, [x26, x3, lsl #3]
+
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [x0, x1, lsl 3]
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [x0, x1, lsl #3]
+	LDNT1D	{ Z0.D - Z3.D }, PN8/Z, [X0, X1, LSL #3]
+	ldnt1d	{ z28.d - z31.d }, pn8/z, [x0, x1, lsl #3]
+	ldnt1d	{ z0.d - z3.d }, pn15/z, [x0, x1, lsl #3]
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [x30, x1, lsl #3]
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [sp, x1, lsl #3]
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [x0, x30, lsl #3]
+	ldnt1d	{ z0.d - z3.d }, pn8/z, [x0, xzr, lsl #3]
+	ldnt1d	{ z8.d - z11.d }, pn11/z, [x27, x1, lsl #3]
+
+	st1d	{ z0.d - z1.d }, pn8, [x0]
+	st1d	{ z0.d - z1.d }, pn8, [x0, #0, mul vl]
+	ST1D	{ Z0.D - Z1.D }, PN8, [X0]
+	st1d	{ z30.d - z31.d }, pn8, [x0]
+	st1d	{ z0.d - z1.d }, pn15, [x0]
+	st1d	{ z0.d - z1.d }, pn8, [x30]
+	st1d	{ z0.d - z1.d }, pn8, [sp]
+	st1d	{ z0.d - z1.d }, pn8, [x0, #-16, mul vl]
+	st1d	{ z0.d - z1.d }, pn8, [x0, #14, mul vl]
+	st1d	{ z12.d - z13.d }, pn13, [x11, #-10, mul vl]
+
+	st1d	{ z0.d - z3.d }, pn8, [x0]
+	st1d	{ z0.d - z3.d }, pn8, [x0, #0, mul vl]
+	ST1D	{ Z0.D - Z3.D }, PN8, [X0]
+	st1d	{ z28.d - z31.d }, pn8, [x0]
+	st1d	{ z0.d - z3.d }, pn15, [x0]
+	st1d	{ z0.d - z3.d }, pn8, [x30]
+	st1d	{ z0.d - z3.d }, pn8, [sp]
+	st1d	{ z0.d - z3.d }, pn8, [x0, #-32, mul vl]
+	st1d	{ z0.d - z3.d }, pn8, [x0, #28, mul vl]
+	st1d	{ z8.d - z11.d }, pn11, [x17, #20, mul vl]
+
+	st1d	{ z0.d - z1.d }, pn8, [x0, x1, lsl 3]
+	st1d	{ z0.d - z1.d }, pn8, [x0, x1, lsl #3]
+	ST1D	{ Z0.D - Z1.D }, PN8, [X0, X1, LSL #3]
+	st1d	{ z30.d - z31.d }, pn8, [x0, x1, lsl #3]
+	st1d	{ z0.d - z1.d }, pn15, [x0, x1, lsl #3]
+	st1d	{ z0.d - z1.d }, pn8, [x30, x1, lsl #3]
+	st1d	{ z0.d - z1.d }, pn8, [sp, x1, lsl #3]
+	st1d	{ z0.d - z1.d }, pn8, [x0, x30, lsl #3]
+	st1d	{ z0.d - z1.d }, pn8, [x0, xzr, lsl #3]
+	st1d	{ z14.d - z15.d }, pn9, [x26, x3, lsl #3]
+
+	st1d	{ z0.d - z3.d }, pn8, [x0, x1, lsl 3]
+	st1d	{ z0.d - z3.d }, pn8, [x0, x1, lsl #3]
+	ST1D	{ Z0.D - Z3.D }, PN8, [X0, X1, LSL #3]
+	st1d	{ z28.d - z31.d }, pn8, [x0, x1, lsl #3]
+	st1d	{ z0.d - z3.d }, pn15, [x0, x1, lsl #3]
+	st1d	{ z0.d - z3.d }, pn8, [x30, x1, lsl #3]
+	st1d	{ z0.d - z3.d }, pn8, [sp, x1, lsl #3]
+	st1d	{ z0.d - z3.d }, pn8, [x0, x30, lsl #3]
+	st1d	{ z0.d - z3.d }, pn8, [x0, xzr, lsl #3]
+	st1d	{ z8.d - z11.d }, pn11, [x27, x1, lsl #3]
+
+	stnt1d	{ z0.d - z1.d }, pn8, [x0]
+	stnt1d	{ z0.d - z1.d }, pn8, [x0, #0, mul vl]
+	STNT1D	{ Z0.D - Z1.D }, PN8, [X0]
+	stnt1d	{ z30.d - z31.d }, pn8, [x0]
+	stnt1d	{ z0.d - z1.d }, pn15, [x0]
+	stnt1d	{ z0.d - z1.d }, pn8, [x30]
+	stnt1d	{ z0.d - z1.d }, pn8, [sp]
+	stnt1d	{ z0.d - z1.d }, pn8, [x0, #-16, mul vl]
+	stnt1d	{ z0.d - z1.d }, pn8, [x0, #14, mul vl]
+	stnt1d	{ z12.d - z13.d }, pn13, [x11, #-10, mul vl]
+
+	stnt1d	{ z0.d - z3.d }, pn8, [x0]
+	stnt1d	{ z0.d - z3.d }, pn8, [x0, #0, mul vl]
+	STNT1D	{ Z0.D - Z3.D }, PN8, [X0]
+	stnt1d	{ z28.d - z31.d }, pn8, [x0]
+	stnt1d	{ z0.d - z3.d }, pn15, [x0]
+	stnt1d	{ z0.d - z3.d }, pn8, [x30]
+	stnt1d	{ z0.d - z3.d }, pn8, [sp]
+	stnt1d	{ z0.d - z3.d }, pn8, [x0, #-32, mul vl]
+	stnt1d	{ z0.d - z3.d }, pn8, [x0, #28, mul vl]
+	stnt1d	{ z8.d - z11.d }, pn11, [x17, #20, mul vl]
+
+	stnt1d	{ z0.d - z1.d }, pn8, [x0, x1, lsl 3]
+	stnt1d	{ z0.d - z1.d }, pn8, [x0, x1, lsl #3]
+	STNT1D	{ Z0.D - Z1.D }, PN8, [X0, X1, LSL #3]
+	stnt1d	{ z30.d - z31.d }, pn8, [x0, x1, lsl #3]
+	stnt1d	{ z0.d - z1.d }, pn15, [x0, x1, lsl #3]
+	stnt1d	{ z0.d - z1.d }, pn8, [x30, x1, lsl #3]
+	stnt1d	{ z0.d - z1.d }, pn8, [sp, x1, lsl #3]
+	stnt1d	{ z0.d - z1.d }, pn8, [x0, x30, lsl #3]
+	stnt1d	{ z0.d - z1.d }, pn8, [x0, xzr, lsl #3]
+	stnt1d	{ z14.d - z15.d }, pn9, [x26, x3, lsl #3]
+
+	stnt1d	{ z0.d - z3.d }, pn8, [x0, x1, lsl 3]
+	stnt1d	{ z0.d - z3.d }, pn8, [x0, x1, lsl #3]
+	STNT1D	{ Z0.D - Z3.D }, PN8, [X0, X1, LSL #3]
+	stnt1d	{ z28.d - z31.d }, pn8, [x0, x1, lsl #3]
+	stnt1d	{ z0.d - z3.d }, pn15, [x0, x1, lsl #3]
+	stnt1d	{ z0.d - z3.d }, pn8, [x30, x1, lsl #3]
+	stnt1d	{ z0.d - z3.d }, pn8, [sp, x1, lsl #3]
+	stnt1d	{ z0.d - z3.d }, pn8, [x0, x30, lsl #3]
+	stnt1d	{ z0.d - z3.d }, pn8, [x0, xzr, lsl #3]
+	stnt1d	{ z8.d - z11.d }, pn11, [x27, x1, lsl #3]
diff --git a/gas/testsuite/gas/aarch64/sme2-4-sve2p1.d b/gas/testsuite/gas/aarch64/sme2-4-sve2p1.d
new file mode 100644
index 00000000000..83baa5d4f3b
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-4-sve2p1.d
@@ -0,0 +1,169 @@
+#as: -march=armv8-a+sve2p1
+#objdump: -dr
+
+[^:]+:     file format .*
+
+
+[^:]+:
+
+[^:]+:
+[^:]+:	a0402000 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x0\]
+[^:]+:	a0402000 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x0\]
+[^:]+:	a0402000 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x0\]
+[^:]+:	a040201e 	ld1h	{z30\.h-z31\.h}, pn8/z, \[x0\]
+[^:]+:	a0403c00 	ld1h	{z0\.h-z1\.h}, pn15/z, \[x0\]
+[^:]+:	a04023c0 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x30\]
+[^:]+:	a04023e0 	ld1h	{z0\.h-z1\.h}, pn8/z, \[sp\]
+[^:]+:	a0482000 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x0, #-16, mul vl\]
+[^:]+:	a0472000 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x0, #14, mul vl\]
+[^:]+:	a04b356c 	ld1h	{z12\.h-z13\.h}, pn13/z, \[x11, #-10, mul vl\]
+[^:]+:	a040a000 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x0\]
+[^:]+:	a040a000 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x0\]
+[^:]+:	a040a000 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x0\]
+[^:]+:	a040a01c 	ld1h	{z28\.h-z31\.h}, pn8/z, \[x0\]
+[^:]+:	a040bc00 	ld1h	{z0\.h-z3\.h}, pn15/z, \[x0\]
+[^:]+:	a040a3c0 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x30\]
+[^:]+:	a040a3e0 	ld1h	{z0\.h-z3\.h}, pn8/z, \[sp\]
+[^:]+:	a048a000 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x0, #-32, mul vl\]
+[^:]+:	a047a000 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x0, #28, mul vl\]
+[^:]+:	a045ae28 	ld1h	{z8\.h-z11\.h}, pn11/z, \[x17, #20, mul vl\]
+[^:]+:	a0012000 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a0012000 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a0012000 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a001201e 	ld1h	{z30\.h-z31\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a0013c00 	ld1h	{z0\.h-z1\.h}, pn15/z, \[x0, x1, lsl #1\]
+[^:]+:	a00123c0 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x30, x1, lsl #1\]
+[^:]+:	a00123e0 	ld1h	{z0\.h-z1\.h}, pn8/z, \[sp, x1, lsl #1\]
+[^:]+:	a01e2000 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x0, x30, lsl #1\]
+[^:]+:	a01f2000 	ld1h	{z0\.h-z1\.h}, pn8/z, \[x0, xzr, lsl #1\]
+[^:]+:	a003274e 	ld1h	{z14\.h-z15\.h}, pn9/z, \[x26, x3, lsl #1\]
+[^:]+:	a001a000 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a001a000 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a001a000 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a001a01c 	ld1h	{z28\.h-z31\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a001bc00 	ld1h	{z0\.h-z3\.h}, pn15/z, \[x0, x1, lsl #1\]
+[^:]+:	a001a3c0 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x30, x1, lsl #1\]
+[^:]+:	a001a3e0 	ld1h	{z0\.h-z3\.h}, pn8/z, \[sp, x1, lsl #1\]
+[^:]+:	a01ea000 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x0, x30, lsl #1\]
+[^:]+:	a01fa000 	ld1h	{z0\.h-z3\.h}, pn8/z, \[x0, xzr, lsl #1\]
+[^:]+:	a001af68 	ld1h	{z8\.h-z11\.h}, pn11/z, \[x27, x1, lsl #1\]
+[^:]+:	a0402001 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x0\]
+[^:]+:	a0402001 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x0\]
+[^:]+:	a0402001 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x0\]
+[^:]+:	a040201f 	ldnt1h	{z30\.h-z31\.h}, pn8/z, \[x0\]
+[^:]+:	a0403c01 	ldnt1h	{z0\.h-z1\.h}, pn15/z, \[x0\]
+[^:]+:	a04023c1 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x30\]
+[^:]+:	a04023e1 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[sp\]
+[^:]+:	a0482001 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x0, #-16, mul vl\]
+[^:]+:	a0472001 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x0, #14, mul vl\]
+[^:]+:	a04b356d 	ldnt1h	{z12\.h-z13\.h}, pn13/z, \[x11, #-10, mul vl\]
+[^:]+:	a040a001 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x0\]
+[^:]+:	a040a001 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x0\]
+[^:]+:	a040a001 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x0\]
+[^:]+:	a040a01d 	ldnt1h	{z28\.h-z31\.h}, pn8/z, \[x0\]
+[^:]+:	a040bc01 	ldnt1h	{z0\.h-z3\.h}, pn15/z, \[x0\]
+[^:]+:	a040a3c1 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x30\]
+[^:]+:	a040a3e1 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[sp\]
+[^:]+:	a048a001 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x0, #-32, mul vl\]
+[^:]+:	a047a001 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x0, #28, mul vl\]
+[^:]+:	a045ae29 	ldnt1h	{z8\.h-z11\.h}, pn11/z, \[x17, #20, mul vl\]
+[^:]+:	a0012001 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a0012001 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a0012001 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a001201f 	ldnt1h	{z30\.h-z31\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a0013c01 	ldnt1h	{z0\.h-z1\.h}, pn15/z, \[x0, x1, lsl #1\]
+[^:]+:	a00123c1 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x30, x1, lsl #1\]
+[^:]+:	a00123e1 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[sp, x1, lsl #1\]
+[^:]+:	a01e2001 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x0, x30, lsl #1\]
+[^:]+:	a01f2001 	ldnt1h	{z0\.h-z1\.h}, pn8/z, \[x0, xzr, lsl #1\]
+[^:]+:	a003274f 	ldnt1h	{z14\.h-z15\.h}, pn9/z, \[x26, x3, lsl #1\]
+[^:]+:	a001a001 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a001a001 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a001a001 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a001a01d 	ldnt1h	{z28\.h-z31\.h}, pn8/z, \[x0, x1, lsl #1\]
+[^:]+:	a001bc01 	ldnt1h	{z0\.h-z3\.h}, pn15/z, \[x0, x1, lsl #1\]
+[^:]+:	a001a3c1 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x30, x1, lsl #1\]
+[^:]+:	a001a3e1 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[sp, x1, lsl #1\]
+[^:]+:	a01ea001 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x0, x30, lsl #1\]
+[^:]+:	a01fa001 	ldnt1h	{z0\.h-z3\.h}, pn8/z, \[x0, xzr, lsl #1\]
+[^:]+:	a001af69 	ldnt1h	{z8\.h-z11\.h}, pn11/z, \[x27, x1, lsl #1\]
+[^:]+:	a0602000 	st1h	{z0\.h-z1\.h}, pn8, \[x0\]
+[^:]+:	a0602000 	st1h	{z0\.h-z1\.h}, pn8, \[x0\]
+[^:]+:	a0602000 	st1h	{z0\.h-z1\.h}, pn8, \[x0\]
+[^:]+:	a060201e 	st1h	{z30\.h-z31\.h}, pn8, \[x0\]
+[^:]+:	a0603c00 	st1h	{z0\.h-z1\.h}, pn15, \[x0\]
+[^:]+:	a06023c0 	st1h	{z0\.h-z1\.h}, pn8, \[x30\]
+[^:]+:	a06023e0 	st1h	{z0\.h-z1\.h}, pn8, \[sp\]
+[^:]+:	a0682000 	st1h	{z0\.h-z1\.h}, pn8, \[x0, #-16, mul vl\]
+[^:]+:	a0672000 	st1h	{z0\.h-z1\.h}, pn8, \[x0, #14, mul vl\]
+[^:]+:	a06b356c 	st1h	{z12\.h-z13\.h}, pn13, \[x11, #-10, mul vl\]
+[^:]+:	a060a000 	st1h	{z0\.h-z3\.h}, pn8, \[x0\]
+[^:]+:	a060a000 	st1h	{z0\.h-z3\.h}, pn8, \[x0\]
+[^:]+:	a060a000 	st1h	{z0\.h-z3\.h}, pn8, \[x0\]
+[^:]+:	a060a01c 	st1h	{z28\.h-z31\.h}, pn8, \[x0\]
+[^:]+:	a060bc00 	st1h	{z0\.h-z3\.h}, pn15, \[x0\]
+[^:]+:	a060a3c0 	st1h	{z0\.h-z3\.h}, pn8, \[x30\]
+[^:]+:	a060a3e0 	st1h	{z0\.h-z3\.h}, pn8, \[sp\]
+[^:]+:	a068a000 	st1h	{z0\.h-z3\.h}, pn8, \[x0, #-32, mul vl\]
+[^:]+:	a067a000 	st1h	{z0\.h-z3\.h}, pn8, \[x0, #28, mul vl\]
+[^:]+:	a065ae28 	st1h	{z8\.h-z11\.h}, pn11, \[x17, #20, mul vl\]
+[^:]+:	a0212000 	st1h	{z0\.h-z1\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a0212000 	st1h	{z0\.h-z1\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a0212000 	st1h	{z0\.h-z1\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a021201e 	st1h	{z30\.h-z31\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a0213c00 	st1h	{z0\.h-z1\.h}, pn15, \[x0, x1, lsl #1\]
+[^:]+:	a02123c0 	st1h	{z0\.h-z1\.h}, pn8, \[x30, x1, lsl #1\]
+[^:]+:	a02123e0 	st1h	{z0\.h-z1\.h}, pn8, \[sp, x1, lsl #1\]
+[^:]+:	a03e2000 	st1h	{z0\.h-z1\.h}, pn8, \[x0, x30, lsl #1\]
+[^:]+:	a03f2000 	st1h	{z0\.h-z1\.h}, pn8, \[x0, xzr, lsl #1\]
+[^:]+:	a023274e 	st1h	{z14\.h-z15\.h}, pn9, \[x26, x3, lsl #1\]
+[^:]+:	a021a000 	st1h	{z0\.h-z3\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a021a000 	st1h	{z0\.h-z3\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a021a000 	st1h	{z0\.h-z3\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a021a01c 	st1h	{z28\.h-z31\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a021bc00 	st1h	{z0\.h-z3\.h}, pn15, \[x0, x1, lsl #1\]
+[^:]+:	a021a3c0 	st1h	{z0\.h-z3\.h}, pn8, \[x30, x1, lsl #1\]
+[^:]+:	a021a3e0 	st1h	{z0\.h-z3\.h}, pn8, \[sp, x1, lsl #1\]
+[^:]+:	a03ea000 	st1h	{z0\.h-z3\.h}, pn8, \[x0, x30, lsl #1\]
+[^:]+:	a03fa000 	st1h	{z0\.h-z3\.h}, pn8, \[x0, xzr, lsl #1\]
+[^:]+:	a021af68 	st1h	{z8\.h-z11\.h}, pn11, \[x27, x1, lsl #1\]
+[^:]+:	a0602001 	stnt1h	{z0\.h-z1\.h}, pn8, \[x0\]
+[^:]+:	a0602001 	stnt1h	{z0\.h-z1\.h}, pn8, \[x0\]
+[^:]+:	a0602001 	stnt1h	{z0\.h-z1\.h}, pn8, \[x0\]
+[^:]+:	a060201f 	stnt1h	{z30\.h-z31\.h}, pn8, \[x0\]
+[^:]+:	a0603c01 	stnt1h	{z0\.h-z1\.h}, pn15, \[x0\]
+[^:]+:	a06023c1 	stnt1h	{z0\.h-z1\.h}, pn8, \[x30\]
+[^:]+:	a06023e1 	stnt1h	{z0\.h-z1\.h}, pn8, \[sp\]
+[^:]+:	a0682001 	stnt1h	{z0\.h-z1\.h}, pn8, \[x0, #-16, mul vl\]
+[^:]+:	a0672001 	stnt1h	{z0\.h-z1\.h}, pn8, \[x0, #14, mul vl\]
+[^:]+:	a06b356d 	stnt1h	{z12\.h-z13\.h}, pn13, \[x11, #-10, mul vl\]
+[^:]+:	a060a001 	stnt1h	{z0\.h-z3\.h}, pn8, \[x0\]
+[^:]+:	a060a001 	stnt1h	{z0\.h-z3\.h}, pn8, \[x0\]
+[^:]+:	a060a001 	stnt1h	{z0\.h-z3\.h}, pn8, \[x0\]
+[^:]+:	a060a01d 	stnt1h	{z28\.h-z31\.h}, pn8, \[x0\]
+[^:]+:	a060bc01 	stnt1h	{z0\.h-z3\.h}, pn15, \[x0\]
+[^:]+:	a060a3c1 	stnt1h	{z0\.h-z3\.h}, pn8, \[x30\]
+[^:]+:	a060a3e1 	stnt1h	{z0\.h-z3\.h}, pn8, \[sp\]
+[^:]+:	a068a001 	stnt1h	{z0\.h-z3\.h}, pn8, \[x0, #-32, mul vl\]
+[^:]+:	a067a001 	stnt1h	{z0\.h-z3\.h}, pn8, \[x0, #28, mul vl\]
+[^:]+:	a065ae29 	stnt1h	{z8\.h-z11\.h}, pn11, \[x17, #20, mul vl\]
+[^:]+:	a0212001 	stnt1h	{z0\.h-z1\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a0212001 	stnt1h	{z0\.h-z1\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a0212001 	stnt1h	{z0\.h-z1\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a021201f 	stnt1h	{z30\.h-z31\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a0213c01 	stnt1h	{z0\.h-z1\.h}, pn15, \[x0, x1, lsl #1\]
+[^:]+:	a02123c1 	stnt1h	{z0\.h-z1\.h}, pn8, \[x30, x1, lsl #1\]
+[^:]+:	a02123e1 	stnt1h	{z0\.h-z1\.h}, pn8, \[sp, x1, lsl #1\]
+[^:]+:	a03e2001 	stnt1h	{z0\.h-z1\.h}, pn8, \[x0, x30, lsl #1\]
+[^:]+:	a03f2001 	stnt1h	{z0\.h-z1\.h}, pn8, \[x0, xzr, lsl #1\]
+[^:]+:	a023274f 	stnt1h	{z14\.h-z15\.h}, pn9, \[x26, x3, lsl #1\]
+[^:]+:	a021a001 	stnt1h	{z0\.h-z3\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a021a001 	stnt1h	{z0\.h-z3\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a021a001 	stnt1h	{z0\.h-z3\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a021a01d 	stnt1h	{z28\.h-z31\.h}, pn8, \[x0, x1, lsl #1\]
+[^:]+:	a021bc01 	stnt1h	{z0\.h-z3\.h}, pn15, \[x0, x1, lsl #1\]
+[^:]+:	a021a3c1 	stnt1h	{z0\.h-z3\.h}, pn8, \[x30, x1, lsl #1\]
+[^:]+:	a021a3e1 	stnt1h	{z0\.h-z3\.h}, pn8, \[sp, x1, lsl #1\]
+[^:]+:	a03ea001 	stnt1h	{z0\.h-z3\.h}, pn8, \[x0, x30, lsl #1\]
+[^:]+:	a03fa001 	stnt1h	{z0\.h-z3\.h}, pn8, \[x0, xzr, lsl #1\]
+[^:]+:	a021af69 	stnt1h	{z8\.h-z11\.h}, pn11, \[x27, x1, lsl #1\]
diff --git a/gas/testsuite/gas/aarch64/sme2-4-sve2p1.s b/gas/testsuite/gas/aarch64/sme2-4-sve2p1.s
new file mode 100644
index 00000000000..ec92bbf8207
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-4-sve2p1.s
@@ -0,0 +1,175 @@
+	ld1h	{ z0.h - z1.h }, pn8/z, [x0]
+	ld1h	{ z0.h - z1.h }, pn8/z, [x0, #0, mul vl]
+	LD1H	{ Z0.H - Z1.H }, PN8/Z, [X0]
+	ld1h	{ z30.h - z31.h }, pn8/z, [x0]
+	ld1h	{ z0.h - z1.h }, pn15/z, [x0]
+	ld1h	{ z0.h - z1.h }, pn8/z, [x30]
+	ld1h	{ z0.h - z1.h }, pn8/z, [sp]
+	ld1h	{ z0.h - z1.h }, pn8/z, [x0, #-16, mul vl]
+	ld1h	{ z0.h - z1.h }, pn8/z, [x0, #14, mul vl]
+	ld1h	{ z12.h - z13.h }, pn13/z, [x11, #-10, mul vl]
+
+	ld1h	{ z0.h - z3.h }, pn8/z, [x0]
+	ld1h	{ z0.h - z3.h }, pn8/z, [x0, #0, mul vl]
+	LD1H	{ Z0.H - Z3.H }, PN8/Z, [X0]
+	ld1h	{ z28.h - z31.h }, pn8/z, [x0]
+	ld1h	{ z0.h - z3.h }, pn15/z, [x0]
+	ld1h	{ z0.h - z3.h }, pn8/z, [x30]
+	ld1h	{ z0.h - z3.h }, pn8/z, [sp]
+	ld1h	{ z0.h - z3.h }, pn8/z, [x0, #-32, mul vl]
+	ld1h	{ z0.h - z3.h }, pn8/z, [x0, #28, mul vl]
+	ld1h	{ z8.h - z11.h }, pn11/z, [x17, #20, mul vl]
+
+	ld1h	{ z0.h - z1.h }, pn8/z, [x0, x1, lsl 1]
+	ld1h	{ z0.h - z1.h }, pn8/z, [x0, x1, lsl #1]
+	LD1H	{ Z0.H - Z1.H }, PN8/Z, [X0, X1, LSL #1]
+	ld1h	{ z30.h - z31.h }, pn8/z, [x0, x1, lsl #1]
+	ld1h	{ z0.h - z1.h }, pn15/z, [x0, x1, lsl #1]
+	ld1h	{ z0.h - z1.h }, pn8/z, [x30, x1, lsl #1]
+	ld1h	{ z0.h - z1.h }, pn8/z, [sp, x1, lsl #1]
+	ld1h	{ z0.h - z1.h }, pn8/z, [x0, x30, lsl #1]
+	ld1h	{ z0.h - z1.h }, pn8/z, [x0, xzr, lsl #1]
+	ld1h	{ z14.h - z15.h }, pn9/z, [x26, x3, lsl #1]
+
+	ld1h	{ z0.h - z3.h }, pn8/z, [x0, x1, lsl 1]
+	ld1h	{ z0.h - z3.h }, pn8/z, [x0, x1, lsl #1]
+	LD1H	{ Z0.H - Z3.H }, PN8/Z, [X0, X1, LSL #1]
+	ld1h	{ z28.h - z31.h }, pn8/z, [x0, x1, lsl #1]
+	ld1h	{ z0.h - z3.h }, pn15/z, [x0, x1, lsl #1]
+	ld1h	{ z0.h - z3.h }, pn8/z, [x30, x1, lsl #1]
+	ld1h	{ z0.h - z3.h }, pn8/z, [sp, x1, lsl #1]
+	ld1h	{ z0.h - z3.h }, pn8/z, [x0, x30, lsl #1]
+	ld1h	{ z0.h - z3.h }, pn8/z, [x0, xzr, lsl #1]
+	ld1h	{ z8.h - z11.h }, pn11/z, [x27, x1, lsl #1]
+
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [x0]
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [x0, #0, mul vl]
+	LDNT1H	{ Z0.H - Z1.H }, PN8/Z, [X0]
+	ldnt1h	{ z30.h - z31.h }, pn8/z, [x0]
+	ldnt1h	{ z0.h - z1.h }, pn15/z, [x0]
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [x30]
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [sp]
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [x0, #-16, mul vl]
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [x0, #14, mul vl]
+	ldnt1h	{ z12.h - z13.h }, pn13/z, [x11, #-10, mul vl]
+
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [x0]
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [x0, #0, mul vl]
+	LDNT1H	{ Z0.H - Z3.H }, PN8/Z, [X0]
+	ldnt1h	{ z28.h - z31.h }, pn8/z, [x0]
+	ldnt1h	{ z0.h - z3.h }, pn15/z, [x0]
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [x30]
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [sp]
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [x0, #-32, mul vl]
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [x0, #28, mul vl]
+	ldnt1h	{ z8.h - z11.h }, pn11/z, [x17, #20, mul vl]
+
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [x0, x1, lsl 1]
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [x0, x1, lsl #1]
+	LDNT1H	{ Z0.H - Z1.H }, PN8/Z, [X0, X1, LSL #1]
+	ldnt1h	{ z30.h - z31.h }, pn8/z, [x0, x1, lsl #1]
+	ldnt1h	{ z0.h - z1.h }, pn15/z, [x0, x1, lsl #1]
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [x30, x1, lsl #1]
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [sp, x1, lsl #1]
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [x0, x30, lsl #1]
+	ldnt1h	{ z0.h - z1.h }, pn8/z, [x0, xzr, lsl #1]
+	ldnt1h	{ z14.h - z15.h }, pn9/z, [x26, x3, lsl #1]
+
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [x0, x1, lsl 1]
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [x0, x1, lsl #1]
+	LDNT1H	{ Z0.H - Z3.H }, PN8/Z, [X0, X1, LSL #1]
+	ldnt1h	{ z28.h - z31.h }, pn8/z, [x0, x1, lsl #1]
+	ldnt1h	{ z0.h - z3.h }, pn15/z, [x0, x1, lsl #1]
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [x30, x1, lsl #1]
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [sp, x1, lsl #1]
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [x0, x30, lsl #1]
+	ldnt1h	{ z0.h - z3.h }, pn8/z, [x0, xzr, lsl #1]
+	ldnt1h	{ z8.h - z11.h }, pn11/z, [x27, x1, lsl #1]
+
+	st1h	{ z0.h - z1.h }, pn8, [x0]
+	st1h	{ z0.h - z1.h }, pn8, [x0, #0, mul vl]
+	ST1H	{ Z0.H - Z1.H }, PN8, [X0]
+	st1h	{ z30.h - z31.h }, pn8, [x0]
+	st1h	{ z0.h - z1.h }, pn15, [x0]
+	st1h	{ z0.h - z1.h }, pn8, [x30]
+	st1h	{ z0.h - z1.h }, pn8, [sp]
+	st1h	{ z0.h - z1.h }, pn8, [x0, #-16, mul vl]
+	st1h	{ z0.h - z1.h }, pn8, [x0, #14, mul vl]
+	st1h	{ z12.h - z13.h }, pn13, [x11, #-10, mul vl]
+
+	st1h	{ z0.h - z3.h }, pn8, [x0]
+	st1h	{ z0.h - z3.h }, pn8, [x0, #0, mul vl]
+	ST1H	{ Z0.H - Z3.H }, PN8, [X0]
+	st1h	{ z28.h - z31.h }, pn8, [x0]
+	st1h	{ z0.h - z3.h }, pn15, [x0]
+	st1h	{ z0.h - z3.h }, pn8, [x30]
+	st1h	{ z0.h - z3.h }, pn8, [sp]
+	st1h	{ z0.h - z3.h }, pn8, [x0, #-32, mul vl]
+	st1h	{ z0.h - z3.h }, pn8, [x0, #28, mul vl]
+	st1h	{ z8.h - z11.h }, pn11, [x17, #20, mul vl]
+
+	st1h	{ z0.h - z1.h }, pn8, [x0, x1, lsl 1]
+	st1h	{ z0.h - z1.h }, pn8, [x0, x1, lsl #1]
+	ST1H	{ Z0.H - Z1.H }, PN8, [X0, X1, LSL #1]
+	st1h	{ z30.h - z31.h }, pn8, [x0, x1, lsl #1]
+	st1h	{ z0.h - z1.h }, pn15, [x0, x1, lsl #1]
+	st1h	{ z0.h - z1.h }, pn8, [x30, x1, lsl #1]
+	st1h	{ z0.h - z1.h }, pn8, [sp, x1, lsl #1]
+	st1h	{ z0.h - z1.h }, pn8, [x0, x30, lsl #1]
+	st1h	{ z0.h - z1.h }, pn8, [x0, xzr, lsl #1]
+	st1h	{ z14.h - z15.h }, pn9, [x26, x3, lsl #1]
+
+	st1h	{ z0.h - z3.h }, pn8, [x0, x1, lsl 1]
+	st1h	{ z0.h - z3.h }, pn8, [x0, x1, lsl #1]
+	ST1H	{ Z0.H - Z3.H }, PN8, [X0, X1, LSL #1]
+	st1h	{ z28.h - z31.h }, pn8, [x0, x1, lsl #1]
+	st1h	{ z0.h - z3.h }, pn15, [x0, x1, lsl #1]
+	st1h	{ z0.h - z3.h }, pn8, [x30, x1, lsl #1]
+	st1h	{ z0.h - z3.h }, pn8, [sp, x1, lsl #1]
+	st1h	{ z0.h - z3.h }, pn8, [x0, x30, lsl #1]
+	st1h	{ z0.h - z3.h }, pn8, [x0, xzr, lsl #1]
+	st1h	{ z8.h - z11.h }, pn11, [x27, x1, lsl #1]
+
+	stnt1h	{ z0.h - z1.h }, pn8, [x0]
+	stnt1h	{ z0.h - z1.h }, pn8, [x0, #0, mul vl]
+	STNT1H	{ Z0.H - Z1.H }, PN8, [X0]
+	stnt1h	{ z30.h - z31.h }, pn8, [x0]
+	stnt1h	{ z0.h - z1.h }, pn15, [x0]
+	stnt1h	{ z0.h - z1.h }, pn8, [x30]
+	stnt1h	{ z0.h - z1.h }, pn8, [sp]
+	stnt1h	{ z0.h - z1.h }, pn8, [x0, #-16, mul vl]
+	stnt1h	{ z0.h - z1.h }, pn8, [x0, #14, mul vl]
+	stnt1h	{ z12.h - z13.h }, pn13, [x11, #-10, mul vl]
+
+	stnt1h	{ z0.h - z3.h }, pn8, [x0]
+	stnt1h	{ z0.h - z3.h }, pn8, [x0, #0, mul vl]
+	STNT1H	{ Z0.H - Z3.H }, PN8, [X0]
+	stnt1h	{ z28.h - z31.h }, pn8, [x0]
+	stnt1h	{ z0.h - z3.h }, pn15, [x0]
+	stnt1h	{ z0.h - z3.h }, pn8, [x30]
+	stnt1h	{ z0.h - z3.h }, pn8, [sp]
+	stnt1h	{ z0.h - z3.h }, pn8, [x0, #-32, mul vl]
+	stnt1h	{ z0.h - z3.h }, pn8, [x0, #28, mul vl]
+	stnt1h	{ z8.h - z11.h }, pn11, [x17, #20, mul vl]
+
+	stnt1h	{ z0.h - z1.h }, pn8, [x0, x1, lsl 1]
+	stnt1h	{ z0.h - z1.h }, pn8, [x0, x1, lsl #1]
+	STNT1H	{ Z0.H - Z1.H }, PN8, [X0, X1, LSL #1]
+	stnt1h	{ z30.h - z31.h }, pn8, [x0, x1, lsl #1]
+	stnt1h	{ z0.h - z1.h }, pn15, [x0, x1, lsl #1]
+	stnt1h	{ z0.h - z1.h }, pn8, [x30, x1, lsl #1]
+	stnt1h	{ z0.h - z1.h }, pn8, [sp, x1, lsl #1]
+	stnt1h	{ z0.h - z1.h }, pn8, [x0, x30, lsl #1]
+	stnt1h	{ z0.h - z1.h }, pn8, [x0, xzr, lsl #1]
+	stnt1h	{ z14.h - z15.h }, pn9, [x26, x3, lsl #1]
+
+	stnt1h	{ z0.h - z3.h }, pn8, [x0, x1, lsl 1]
+	stnt1h	{ z0.h - z3.h }, pn8, [x0, x1, lsl #1]
+	STNT1H	{ Z0.H - Z3.H }, PN8, [X0, X1, LSL #1]
+	stnt1h	{ z28.h - z31.h }, pn8, [x0, x1, lsl #1]
+	stnt1h	{ z0.h - z3.h }, pn15, [x0, x1, lsl #1]
+	stnt1h	{ z0.h - z3.h }, pn8, [x30, x1, lsl #1]
+	stnt1h	{ z0.h - z3.h }, pn8, [sp, x1, lsl #1]
+	stnt1h	{ z0.h - z3.h }, pn8, [x0, x30, lsl #1]
+	stnt1h	{ z0.h - z3.h }, pn8, [x0, xzr, lsl #1]
+	stnt1h	{ z8.h - z11.h }, pn11, [x27, x1, lsl #1]
diff --git a/gas/testsuite/gas/aarch64/sme2-5-sve2p1.d b/gas/testsuite/gas/aarch64/sme2-5-sve2p1.d
new file mode 100644
index 00000000000..e9cb7f296b3
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-5-sve2p1.d
@@ -0,0 +1,169 @@
+#as: -march=armv8-a+sve2p1
+#objdump: -dr
+
+[^:]+:     file format .*
+
+
+[^:]+:
+
+[^:]+:
+[^:]+:	a0404000 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x0\]
+[^:]+:	a0404000 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x0\]
+[^:]+:	a0404000 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x0\]
+[^:]+:	a040401e 	ld1w	{z30\.s-z31\.s}, pn8/z, \[x0\]
+[^:]+:	a0405c00 	ld1w	{z0\.s-z1\.s}, pn15/z, \[x0\]
+[^:]+:	a04043c0 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x30\]
+[^:]+:	a04043e0 	ld1w	{z0\.s-z1\.s}, pn8/z, \[sp\]
+[^:]+:	a0484000 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x0, #-16, mul vl\]
+[^:]+:	a0474000 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x0, #14, mul vl\]
+[^:]+:	a04b556c 	ld1w	{z12\.s-z13\.s}, pn13/z, \[x11, #-10, mul vl\]
+[^:]+:	a040c000 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x0\]
+[^:]+:	a040c000 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x0\]
+[^:]+:	a040c000 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x0\]
+[^:]+:	a040c01c 	ld1w	{z28\.s-z31\.s}, pn8/z, \[x0\]
+[^:]+:	a040dc00 	ld1w	{z0\.s-z3\.s}, pn15/z, \[x0\]
+[^:]+:	a040c3c0 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x30\]
+[^:]+:	a040c3e0 	ld1w	{z0\.s-z3\.s}, pn8/z, \[sp\]
+[^:]+:	a048c000 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x0, #-32, mul vl\]
+[^:]+:	a047c000 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x0, #28, mul vl\]
+[^:]+:	a045ce28 	ld1w	{z8\.s-z11\.s}, pn11/z, \[x17, #20, mul vl\]
+[^:]+:	a0014000 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a0014000 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a0014000 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a001401e 	ld1w	{z30\.s-z31\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a0015c00 	ld1w	{z0\.s-z1\.s}, pn15/z, \[x0, x1, lsl #2\]
+[^:]+:	a00143c0 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x30, x1, lsl #2\]
+[^:]+:	a00143e0 	ld1w	{z0\.s-z1\.s}, pn8/z, \[sp, x1, lsl #2\]
+[^:]+:	a01e4000 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x0, x30, lsl #2\]
+[^:]+:	a01f4000 	ld1w	{z0\.s-z1\.s}, pn8/z, \[x0, xzr, lsl #2\]
+[^:]+:	a003474e 	ld1w	{z14\.s-z15\.s}, pn9/z, \[x26, x3, lsl #2\]
+[^:]+:	a001c000 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a001c000 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a001c000 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a001c01c 	ld1w	{z28\.s-z31\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a001dc00 	ld1w	{z0\.s-z3\.s}, pn15/z, \[x0, x1, lsl #2\]
+[^:]+:	a001c3c0 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x30, x1, lsl #2\]
+[^:]+:	a001c3e0 	ld1w	{z0\.s-z3\.s}, pn8/z, \[sp, x1, lsl #2\]
+[^:]+:	a01ec000 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x0, x30, lsl #2\]
+[^:]+:	a01fc000 	ld1w	{z0\.s-z3\.s}, pn8/z, \[x0, xzr, lsl #2\]
+[^:]+:	a001cf68 	ld1w	{z8\.s-z11\.s}, pn11/z, \[x27, x1, lsl #2\]
+[^:]+:	a0404001 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x0\]
+[^:]+:	a0404001 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x0\]
+[^:]+:	a0404001 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x0\]
+[^:]+:	a040401f 	ldnt1w	{z30\.s-z31\.s}, pn8/z, \[x0\]
+[^:]+:	a0405c01 	ldnt1w	{z0\.s-z1\.s}, pn15/z, \[x0\]
+[^:]+:	a04043c1 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x30\]
+[^:]+:	a04043e1 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[sp\]
+[^:]+:	a0484001 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x0, #-16, mul vl\]
+[^:]+:	a0474001 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x0, #14, mul vl\]
+[^:]+:	a04b556d 	ldnt1w	{z12\.s-z13\.s}, pn13/z, \[x11, #-10, mul vl\]
+[^:]+:	a040c001 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x0\]
+[^:]+:	a040c001 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x0\]
+[^:]+:	a040c001 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x0\]
+[^:]+:	a040c01d 	ldnt1w	{z28\.s-z31\.s}, pn8/z, \[x0\]
+[^:]+:	a040dc01 	ldnt1w	{z0\.s-z3\.s}, pn15/z, \[x0\]
+[^:]+:	a040c3c1 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x30\]
+[^:]+:	a040c3e1 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[sp\]
+[^:]+:	a048c001 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x0, #-32, mul vl\]
+[^:]+:	a047c001 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x0, #28, mul vl\]
+[^:]+:	a045ce29 	ldnt1w	{z8\.s-z11\.s}, pn11/z, \[x17, #20, mul vl\]
+[^:]+:	a0014001 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a0014001 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a0014001 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a001401f 	ldnt1w	{z30\.s-z31\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a0015c01 	ldnt1w	{z0\.s-z1\.s}, pn15/z, \[x0, x1, lsl #2\]
+[^:]+:	a00143c1 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x30, x1, lsl #2\]
+[^:]+:	a00143e1 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[sp, x1, lsl #2\]
+[^:]+:	a01e4001 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x0, x30, lsl #2\]
+[^:]+:	a01f4001 	ldnt1w	{z0\.s-z1\.s}, pn8/z, \[x0, xzr, lsl #2\]
+[^:]+:	a003474f 	ldnt1w	{z14\.s-z15\.s}, pn9/z, \[x26, x3, lsl #2\]
+[^:]+:	a001c001 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a001c001 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a001c001 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a001c01d 	ldnt1w	{z28\.s-z31\.s}, pn8/z, \[x0, x1, lsl #2\]
+[^:]+:	a001dc01 	ldnt1w	{z0\.s-z3\.s}, pn15/z, \[x0, x1, lsl #2\]
+[^:]+:	a001c3c1 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x30, x1, lsl #2\]
+[^:]+:	a001c3e1 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[sp, x1, lsl #2\]
+[^:]+:	a01ec001 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x0, x30, lsl #2\]
+[^:]+:	a01fc001 	ldnt1w	{z0\.s-z3\.s}, pn8/z, \[x0, xzr, lsl #2\]
+[^:]+:	a001cf69 	ldnt1w	{z8\.s-z11\.s}, pn11/z, \[x27, x1, lsl #2\]
+[^:]+:	a0604000 	st1w	{z0\.s-z1\.s}, pn8, \[x0\]
+[^:]+:	a0604000 	st1w	{z0\.s-z1\.s}, pn8, \[x0\]
+[^:]+:	a0604000 	st1w	{z0\.s-z1\.s}, pn8, \[x0\]
+[^:]+:	a060401e 	st1w	{z30\.s-z31\.s}, pn8, \[x0\]
+[^:]+:	a0605c00 	st1w	{z0\.s-z1\.s}, pn15, \[x0\]
+[^:]+:	a06043c0 	st1w	{z0\.s-z1\.s}, pn8, \[x30\]
+[^:]+:	a06043e0 	st1w	{z0\.s-z1\.s}, pn8, \[sp\]
+[^:]+:	a0684000 	st1w	{z0\.s-z1\.s}, pn8, \[x0, #-16, mul vl\]
+[^:]+:	a0674000 	st1w	{z0\.s-z1\.s}, pn8, \[x0, #14, mul vl\]
+[^:]+:	a06b556c 	st1w	{z12\.s-z13\.s}, pn13, \[x11, #-10, mul vl\]
+[^:]+:	a060c000 	st1w	{z0\.s-z3\.s}, pn8, \[x0\]
+[^:]+:	a060c000 	st1w	{z0\.s-z3\.s}, pn8, \[x0\]
+[^:]+:	a060c000 	st1w	{z0\.s-z3\.s}, pn8, \[x0\]
+[^:]+:	a060c01c 	st1w	{z28\.s-z31\.s}, pn8, \[x0\]
+[^:]+:	a060dc00 	st1w	{z0\.s-z3\.s}, pn15, \[x0\]
+[^:]+:	a060c3c0 	st1w	{z0\.s-z3\.s}, pn8, \[x30\]
+[^:]+:	a060c3e0 	st1w	{z0\.s-z3\.s}, pn8, \[sp\]
+[^:]+:	a068c000 	st1w	{z0\.s-z3\.s}, pn8, \[x0, #-32, mul vl\]
+[^:]+:	a067c000 	st1w	{z0\.s-z3\.s}, pn8, \[x0, #28, mul vl\]
+[^:]+:	a065ce28 	st1w	{z8\.s-z11\.s}, pn11, \[x17, #20, mul vl\]
+[^:]+:	a0214000 	st1w	{z0\.s-z1\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a0214000 	st1w	{z0\.s-z1\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a0214000 	st1w	{z0\.s-z1\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a021401e 	st1w	{z30\.s-z31\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a0215c00 	st1w	{z0\.s-z1\.s}, pn15, \[x0, x1, lsl #2\]
+[^:]+:	a02143c0 	st1w	{z0\.s-z1\.s}, pn8, \[x30, x1, lsl #2\]
+[^:]+:	a02143e0 	st1w	{z0\.s-z1\.s}, pn8, \[sp, x1, lsl #2\]
+[^:]+:	a03e4000 	st1w	{z0\.s-z1\.s}, pn8, \[x0, x30, lsl #2\]
+[^:]+:	a03f4000 	st1w	{z0\.s-z1\.s}, pn8, \[x0, xzr, lsl #2\]
+[^:]+:	a023474e 	st1w	{z14\.s-z15\.s}, pn9, \[x26, x3, lsl #2\]
+[^:]+:	a021c000 	st1w	{z0\.s-z3\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a021c000 	st1w	{z0\.s-z3\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a021c000 	st1w	{z0\.s-z3\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a021c01c 	st1w	{z28\.s-z31\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a021dc00 	st1w	{z0\.s-z3\.s}, pn15, \[x0, x1, lsl #2\]
+[^:]+:	a021c3c0 	st1w	{z0\.s-z3\.s}, pn8, \[x30, x1, lsl #2\]
+[^:]+:	a021c3e0 	st1w	{z0\.s-z3\.s}, pn8, \[sp, x1, lsl #2\]
+[^:]+:	a03ec000 	st1w	{z0\.s-z3\.s}, pn8, \[x0, x30, lsl #2\]
+[^:]+:	a03fc000 	st1w	{z0\.s-z3\.s}, pn8, \[x0, xzr, lsl #2\]
+[^:]+:	a021cf68 	st1w	{z8\.s-z11\.s}, pn11, \[x27, x1, lsl #2\]
+[^:]+:	a0604001 	stnt1w	{z0\.s-z1\.s}, pn8, \[x0\]
+[^:]+:	a0604001 	stnt1w	{z0\.s-z1\.s}, pn8, \[x0\]
+[^:]+:	a0604001 	stnt1w	{z0\.s-z1\.s}, pn8, \[x0\]
+[^:]+:	a060401f 	stnt1w	{z30\.s-z31\.s}, pn8, \[x0\]
+[^:]+:	a0605c01 	stnt1w	{z0\.s-z1\.s}, pn15, \[x0\]
+[^:]+:	a06043c1 	stnt1w	{z0\.s-z1\.s}, pn8, \[x30\]
+[^:]+:	a06043e1 	stnt1w	{z0\.s-z1\.s}, pn8, \[sp\]
+[^:]+:	a0684001 	stnt1w	{z0\.s-z1\.s}, pn8, \[x0, #-16, mul vl\]
+[^:]+:	a0674001 	stnt1w	{z0\.s-z1\.s}, pn8, \[x0, #14, mul vl\]
+[^:]+:	a06b556d 	stnt1w	{z12\.s-z13\.s}, pn13, \[x11, #-10, mul vl\]
+[^:]+:	a060c001 	stnt1w	{z0\.s-z3\.s}, pn8, \[x0\]
+[^:]+:	a060c001 	stnt1w	{z0\.s-z3\.s}, pn8, \[x0\]
+[^:]+:	a060c001 	stnt1w	{z0\.s-z3\.s}, pn8, \[x0\]
+[^:]+:	a060c01d 	stnt1w	{z28\.s-z31\.s}, pn8, \[x0\]
+[^:]+:	a060dc01 	stnt1w	{z0\.s-z3\.s}, pn15, \[x0\]
+[^:]+:	a060c3c1 	stnt1w	{z0\.s-z3\.s}, pn8, \[x30\]
+[^:]+:	a060c3e1 	stnt1w	{z0\.s-z3\.s}, pn8, \[sp\]
+[^:]+:	a068c001 	stnt1w	{z0\.s-z3\.s}, pn8, \[x0, #-32, mul vl\]
+[^:]+:	a067c001 	stnt1w	{z0\.s-z3\.s}, pn8, \[x0, #28, mul vl\]
+[^:]+:	a065ce29 	stnt1w	{z8\.s-z11\.s}, pn11, \[x17, #20, mul vl\]
+[^:]+:	a0214001 	stnt1w	{z0\.s-z1\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a0214001 	stnt1w	{z0\.s-z1\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a0214001 	stnt1w	{z0\.s-z1\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a021401f 	stnt1w	{z30\.s-z31\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a0215c01 	stnt1w	{z0\.s-z1\.s}, pn15, \[x0, x1, lsl #2\]
+[^:]+:	a02143c1 	stnt1w	{z0\.s-z1\.s}, pn8, \[x30, x1, lsl #2\]
+[^:]+:	a02143e1 	stnt1w	{z0\.s-z1\.s}, pn8, \[sp, x1, lsl #2\]
+[^:]+:	a03e4001 	stnt1w	{z0\.s-z1\.s}, pn8, \[x0, x30, lsl #2\]
+[^:]+:	a03f4001 	stnt1w	{z0\.s-z1\.s}, pn8, \[x0, xzr, lsl #2\]
+[^:]+:	a023474f 	stnt1w	{z14\.s-z15\.s}, pn9, \[x26, x3, lsl #2\]
+[^:]+:	a021c001 	stnt1w	{z0\.s-z3\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a021c001 	stnt1w	{z0\.s-z3\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a021c001 	stnt1w	{z0\.s-z3\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a021c01d 	stnt1w	{z28\.s-z31\.s}, pn8, \[x0, x1, lsl #2\]
+[^:]+:	a021dc01 	stnt1w	{z0\.s-z3\.s}, pn15, \[x0, x1, lsl #2\]
+[^:]+:	a021c3c1 	stnt1w	{z0\.s-z3\.s}, pn8, \[x30, x1, lsl #2\]
+[^:]+:	a021c3e1 	stnt1w	{z0\.s-z3\.s}, pn8, \[sp, x1, lsl #2\]
+[^:]+:	a03ec001 	stnt1w	{z0\.s-z3\.s}, pn8, \[x0, x30, lsl #2\]
+[^:]+:	a03fc001 	stnt1w	{z0\.s-z3\.s}, pn8, \[x0, xzr, lsl #2\]
+[^:]+:	a021cf69 	stnt1w	{z8\.s-z11\.s}, pn11, \[x27, x1, lsl #2\]
diff --git a/gas/testsuite/gas/aarch64/sme2-5-sve2p1.s b/gas/testsuite/gas/aarch64/sme2-5-sve2p1.s
new file mode 100644
index 00000000000..0dda4b0c15b
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-5-sve2p1.s
@@ -0,0 +1,175 @@
+	ld1w	{ z0.s - z1.s }, pn8/z, [x0]
+	ld1w	{ z0.s - z1.s }, pn8/z, [x0, #0, mul vl]
+	LD1W	{ Z0.S - Z1.S }, PN8/Z, [X0]
+	ld1w	{ z30.s - z31.s }, pn8/z, [x0]
+	ld1w	{ z0.s - z1.s }, pn15/z, [x0]
+	ld1w	{ z0.s - z1.s }, pn8/z, [x30]
+	ld1w	{ z0.s - z1.s }, pn8/z, [sp]
+	ld1w	{ z0.s - z1.s }, pn8/z, [x0, #-16, mul vl]
+	ld1w	{ z0.s - z1.s }, pn8/z, [x0, #14, mul vl]
+	ld1w	{ z12.s - z13.s }, pn13/z, [x11, #-10, mul vl]
+
+	ld1w	{ z0.s - z3.s }, pn8/z, [x0]
+	ld1w	{ z0.s - z3.s }, pn8/z, [x0, #0, mul vl]
+	LD1W	{ Z0.S - Z3.S }, PN8/Z, [X0]
+	ld1w	{ z28.s - z31.s }, pn8/z, [x0]
+	ld1w	{ z0.s - z3.s }, pn15/z, [x0]
+	ld1w	{ z0.s - z3.s }, pn8/z, [x30]
+	ld1w	{ z0.s - z3.s }, pn8/z, [sp]
+	ld1w	{ z0.s - z3.s }, pn8/z, [x0, #-32, mul vl]
+	ld1w	{ z0.s - z3.s }, pn8/z, [x0, #28, mul vl]
+	ld1w	{ z8.s - z11.s }, pn11/z, [x17, #20, mul vl]
+
+	ld1w	{ z0.s - z1.s }, pn8/z, [x0, x1, lsl 2]
+	ld1w	{ z0.s - z1.s }, pn8/z, [x0, x1, lsl #2]
+	LD1W	{ Z0.S - Z1.S }, PN8/Z, [X0, X1, LSL #2]
+	ld1w	{ z30.s - z31.s }, pn8/z, [x0, x1, lsl #2]
+	ld1w	{ z0.s - z1.s }, pn15/z, [x0, x1, lsl #2]
+	ld1w	{ z0.s - z1.s }, pn8/z, [x30, x1, lsl #2]
+	ld1w	{ z0.s - z1.s }, pn8/z, [sp, x1, lsl #2]
+	ld1w	{ z0.s - z1.s }, pn8/z, [x0, x30, lsl #2]
+	ld1w	{ z0.s - z1.s }, pn8/z, [x0, xzr, lsl #2]
+	ld1w	{ z14.s - z15.s }, pn9/z, [x26, x3, lsl #2]
+
+	ld1w	{ z0.s - z3.s }, pn8/z, [x0, x1, lsl 2]
+	ld1w	{ z0.s - z3.s }, pn8/z, [x0, x1, lsl #2]
+	LD1W	{ Z0.S - Z3.S }, PN8/Z, [X0, X1, LSL #2]
+	ld1w	{ z28.s - z31.s }, pn8/z, [x0, x1, lsl #2]
+	ld1w	{ z0.s - z3.s }, pn15/z, [x0, x1, lsl #2]
+	ld1w	{ z0.s - z3.s }, pn8/z, [x30, x1, lsl #2]
+	ld1w	{ z0.s - z3.s }, pn8/z, [sp, x1, lsl #2]
+	ld1w	{ z0.s - z3.s }, pn8/z, [x0, x30, lsl #2]
+	ld1w	{ z0.s - z3.s }, pn8/z, [x0, xzr, lsl #2]
+	ld1w	{ z8.s - z11.s }, pn11/z, [x27, x1, lsl #2]
+
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [x0]
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [x0, #0, mul vl]
+	LDNT1W	{ Z0.S - Z1.S }, PN8/Z, [X0]
+	ldnt1w	{ z30.s - z31.s }, pn8/z, [x0]
+	ldnt1w	{ z0.s - z1.s }, pn15/z, [x0]
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [x30]
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [sp]
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [x0, #-16, mul vl]
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [x0, #14, mul vl]
+	ldnt1w	{ z12.s - z13.s }, pn13/z, [x11, #-10, mul vl]
+
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [x0]
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [x0, #0, mul vl]
+	LDNT1W	{ Z0.S - Z3.S }, PN8/Z, [X0]
+	ldnt1w	{ z28.s - z31.s }, pn8/z, [x0]
+	ldnt1w	{ z0.s - z3.s }, pn15/z, [x0]
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [x30]
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [sp]
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [x0, #-32, mul vl]
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [x0, #28, mul vl]
+	ldnt1w	{ z8.s - z11.s }, pn11/z, [x17, #20, mul vl]
+
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [x0, x1, lsl 2]
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [x0, x1, lsl #2]
+	LDNT1W	{ Z0.S - Z1.S }, PN8/Z, [X0, X1, LSL #2]
+	ldnt1w	{ z30.s - z31.s }, pn8/z, [x0, x1, lsl #2]
+	ldnt1w	{ z0.s - z1.s }, pn15/z, [x0, x1, lsl #2]
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [x30, x1, lsl #2]
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [sp, x1, lsl #2]
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [x0, x30, lsl #2]
+	ldnt1w	{ z0.s - z1.s }, pn8/z, [x0, xzr, lsl #2]
+	ldnt1w	{ z14.s - z15.s }, pn9/z, [x26, x3, lsl #2]
+
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [x0, x1, lsl 2]
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [x0, x1, lsl #2]
+	LDNT1W	{ Z0.S - Z3.S }, PN8/Z, [X0, X1, LSL #2]
+	ldnt1w	{ z28.s - z31.s }, pn8/z, [x0, x1, lsl #2]
+	ldnt1w	{ z0.s - z3.s }, pn15/z, [x0, x1, lsl #2]
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [x30, x1, lsl #2]
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [sp, x1, lsl #2]
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [x0, x30, lsl #2]
+	ldnt1w	{ z0.s - z3.s }, pn8/z, [x0, xzr, lsl #2]
+	ldnt1w	{ z8.s - z11.s }, pn11/z, [x27, x1, lsl #2]
+
+	st1w	{ z0.s - z1.s }, pn8, [x0]
+	st1w	{ z0.s - z1.s }, pn8, [x0, #0, mul vl]
+	ST1W	{ Z0.S - Z1.S }, PN8, [X0]
+	st1w	{ z30.s - z31.s }, pn8, [x0]
+	st1w	{ z0.s - z1.s }, pn15, [x0]
+	st1w	{ z0.s - z1.s }, pn8, [x30]
+	st1w	{ z0.s - z1.s }, pn8, [sp]
+	st1w	{ z0.s - z1.s }, pn8, [x0, #-16, mul vl]
+	st1w	{ z0.s - z1.s }, pn8, [x0, #14, mul vl]
+	st1w	{ z12.s - z13.s }, pn13, [x11, #-10, mul vl]
+
+	st1w	{ z0.s - z3.s }, pn8, [x0]
+	st1w	{ z0.s - z3.s }, pn8, [x0, #0, mul vl]
+	ST1W	{ Z0.S - Z3.S }, PN8, [X0]
+	st1w	{ z28.s - z31.s }, pn8, [x0]
+	st1w	{ z0.s - z3.s }, pn15, [x0]
+	st1w	{ z0.s - z3.s }, pn8, [x30]
+	st1w	{ z0.s - z3.s }, pn8, [sp]
+	st1w	{ z0.s - z3.s }, pn8, [x0, #-32, mul vl]
+	st1w	{ z0.s - z3.s }, pn8, [x0, #28, mul vl]
+	st1w	{ z8.s - z11.s }, pn11, [x17, #20, mul vl]
+
+	st1w	{ z0.s - z1.s }, pn8, [x0, x1, lsl 2]
+	st1w	{ z0.s - z1.s }, pn8, [x0, x1, lsl #2]
+	ST1W	{ Z0.S - Z1.S }, PN8, [X0, X1, LSL #2]
+	st1w	{ z30.s - z31.s }, pn8, [x0, x1, lsl #2]
+	st1w	{ z0.s - z1.s }, pn15, [x0, x1, lsl #2]
+	st1w	{ z0.s - z1.s }, pn8, [x30, x1, lsl #2]
+	st1w	{ z0.s - z1.s }, pn8, [sp, x1, lsl #2]
+	st1w	{ z0.s - z1.s }, pn8, [x0, x30, lsl #2]
+	st1w	{ z0.s - z1.s }, pn8, [x0, xzr, lsl #2]
+	st1w	{ z14.s - z15.s }, pn9, [x26, x3, lsl #2]
+
+	st1w	{ z0.s - z3.s }, pn8, [x0, x1, lsl 2]
+	st1w	{ z0.s - z3.s }, pn8, [x0, x1, lsl #2]
+	ST1W	{ Z0.S - Z3.S }, PN8, [X0, X1, LSL #2]
+	st1w	{ z28.s - z31.s }, pn8, [x0, x1, lsl #2]
+	st1w	{ z0.s - z3.s }, pn15, [x0, x1, lsl #2]
+	st1w	{ z0.s - z3.s }, pn8, [x30, x1, lsl #2]
+	st1w	{ z0.s - z3.s }, pn8, [sp, x1, lsl #2]
+	st1w	{ z0.s - z3.s }, pn8, [x0, x30, lsl #2]
+	st1w	{ z0.s - z3.s }, pn8, [x0, xzr, lsl #2]
+	st1w	{ z8.s - z11.s }, pn11, [x27, x1, lsl #2]
+
+	stnt1w	{ z0.s - z1.s }, pn8, [x0]
+	stnt1w	{ z0.s - z1.s }, pn8, [x0, #0, mul vl]
+	STNT1W	{ Z0.S - Z1.S }, PN8, [X0]
+	stnt1w	{ z30.s - z31.s }, pn8, [x0]
+	stnt1w	{ z0.s - z1.s }, pn15, [x0]
+	stnt1w	{ z0.s - z1.s }, pn8, [x30]
+	stnt1w	{ z0.s - z1.s }, pn8, [sp]
+	stnt1w	{ z0.s - z1.s }, pn8, [x0, #-16, mul vl]
+	stnt1w	{ z0.s - z1.s }, pn8, [x0, #14, mul vl]
+	stnt1w	{ z12.s - z13.s }, pn13, [x11, #-10, mul vl]
+
+	stnt1w	{ z0.s - z3.s }, pn8, [x0]
+	stnt1w	{ z0.s - z3.s }, pn8, [x0, #0, mul vl]
+	STNT1W	{ Z0.S - Z3.S }, PN8, [X0]
+	stnt1w	{ z28.s - z31.s }, pn8, [x0]
+	stnt1w	{ z0.s - z3.s }, pn15, [x0]
+	stnt1w	{ z0.s - z3.s }, pn8, [x30]
+	stnt1w	{ z0.s - z3.s }, pn8, [sp]
+	stnt1w	{ z0.s - z3.s }, pn8, [x0, #-32, mul vl]
+	stnt1w	{ z0.s - z3.s }, pn8, [x0, #28, mul vl]
+	stnt1w	{ z8.s - z11.s }, pn11, [x17, #20, mul vl]
+
+	stnt1w	{ z0.s - z1.s }, pn8, [x0, x1, lsl 2]
+	stnt1w	{ z0.s - z1.s }, pn8, [x0, x1, lsl #2]
+	STNT1W	{ Z0.S - Z1.S }, PN8, [X0, X1, LSL #2]
+	stnt1w	{ z30.s - z31.s }, pn8, [x0, x1, lsl #2]
+	stnt1w	{ z0.s - z1.s }, pn15, [x0, x1, lsl #2]
+	stnt1w	{ z0.s - z1.s }, pn8, [x30, x1, lsl #2]
+	stnt1w	{ z0.s - z1.s }, pn8, [sp, x1, lsl #2]
+	stnt1w	{ z0.s - z1.s }, pn8, [x0, x30, lsl #2]
+	stnt1w	{ z0.s - z1.s }, pn8, [x0, xzr, lsl #2]
+	stnt1w	{ z14.s - z15.s }, pn9, [x26, x3, lsl #2]
+
+	stnt1w	{ z0.s - z3.s }, pn8, [x0, x1, lsl 2]
+	stnt1w	{ z0.s - z3.s }, pn8, [x0, x1, lsl #2]
+	STNT1W	{ Z0.S - Z3.S }, PN8, [X0, X1, LSL #2]
+	stnt1w	{ z28.s - z31.s }, pn8, [x0, x1, lsl #2]
+	stnt1w	{ z0.s - z3.s }, pn15, [x0, x1, lsl #2]
+	stnt1w	{ z0.s - z3.s }, pn8, [x30, x1, lsl #2]
+	stnt1w	{ z0.s - z3.s }, pn8, [sp, x1, lsl #2]
+	stnt1w	{ z0.s - z3.s }, pn8, [x0, x30, lsl #2]
+	stnt1w	{ z0.s - z3.s }, pn8, [x0, xzr, lsl #2]
+	stnt1w	{ z8.s - z11.s }, pn11, [x27, x1, lsl #2]
diff --git a/gas/testsuite/gas/aarch64/sme2-6-sve2p1.d b/gas/testsuite/gas/aarch64/sme2-6-sve2p1.d
new file mode 100644
index 00000000000..a71d7845dc1
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-6-sve2p1.d
@@ -0,0 +1,109 @@
+#as: -march=armv8-a+sme2
+#objdump: -dr
+
+[^:]+:     file format .*
+
+
+[^:]+:
+
+[^:]+:
+[^:]+:	25208200 	cntp	x0, pn0\.b, vlx2
+[^:]+:	25208200 	cntp	x0, pn0\.b, vlx2
+[^:]+:	2520821e 	cntp	x30, pn0\.b, vlx2
+[^:]+:	2520821f 	cntp	xzr, pn0\.b, vlx2
+[^:]+:	252083e0 	cntp	x0, pn15\.b, vlx2
+[^:]+:	25208600 	cntp	x0, pn0\.b, vlx4
+[^:]+:	252087ab 	cntp	x11, pn13\.b, vlx4
+[^:]+:	25608200 	cntp	x0, pn0\.h, vlx2
+[^:]+:	25608200 	cntp	x0, pn0\.h, vlx2
+[^:]+:	2560821e 	cntp	x30, pn0\.h, vlx2
+[^:]+:	2560821f 	cntp	xzr, pn0\.h, vlx2
+[^:]+:	256083e0 	cntp	x0, pn15\.h, vlx2
+[^:]+:	25608600 	cntp	x0, pn0\.h, vlx4
+[^:]+:	25608334 	cntp	x20, pn9\.h, vlx2
+[^:]+:	25a08200 	cntp	x0, pn0\.s, vlx2
+[^:]+:	25a08200 	cntp	x0, pn0\.s, vlx2
+[^:]+:	25a0821e 	cntp	x30, pn0\.s, vlx2
+[^:]+:	25a0821f 	cntp	xzr, pn0\.s, vlx2
+[^:]+:	25a083e0 	cntp	x0, pn15\.s, vlx2
+[^:]+:	25a08600 	cntp	x0, pn0\.s, vlx4
+[^:]+:	25a0870f 	cntp	x15, pn8\.s, vlx4
+[^:]+:	25e08200 	cntp	x0, pn0\.d, vlx2
+[^:]+:	25e08200 	cntp	x0, pn0\.d, vlx2
+[^:]+:	25e0821e 	cntp	x30, pn0\.d, vlx2
+[^:]+:	25e0821f 	cntp	xzr, pn0\.d, vlx2
+[^:]+:	25e083e0 	cntp	x0, pn15\.d, vlx2
+[^:]+:	25e08600 	cntp	x0, pn0\.d, vlx4
+[^:]+:	25e082a4 	cntp	x4, pn5\.d, vlx2
+[^:]+:	25207010 	pext	p0\.b, pn8\[0\]
+[^:]+:	25207010 	pext	p0\.b, pn8\[0\]
+[^:]+:	2520701f 	pext	p15\.b, pn8\[0\]
+[^:]+:	252070f0 	pext	p0\.b, pn15\[0\]
+[^:]+:	25207310 	pext	p0\.b, pn8\[3\]
+[^:]+:	25207274 	pext	p4\.b, pn11\[2\]
+[^:]+:	25607010 	pext	p0\.h, pn8\[0\]
+[^:]+:	25607010 	pext	p0\.h, pn8\[0\]
+[^:]+:	2560701f 	pext	p15\.h, pn8\[0\]
+[^:]+:	256070f0 	pext	p0\.h, pn15\[0\]
+[^:]+:	25607310 	pext	p0\.h, pn8\[3\]
+[^:]+:	256071d5 	pext	p5\.h, pn14\[1\]
+[^:]+:	25a07010 	pext	p0\.s, pn8\[0\]
+[^:]+:	25a07010 	pext	p0\.s, pn8\[0\]
+[^:]+:	25a0701f 	pext	p15\.s, pn8\[0\]
+[^:]+:	25a070f0 	pext	p0\.s, pn15\[0\]
+[^:]+:	25a07310 	pext	p0\.s, pn8\[3\]
+[^:]+:	25a07256 	pext	p6\.s, pn10\[2\]
+[^:]+:	25e07010 	pext	p0\.d, pn8\[0\]
+[^:]+:	25e07010 	pext	p0\.d, pn8\[0\]
+[^:]+:	25e0701f 	pext	p15\.d, pn8\[0\]
+[^:]+:	25e070f0 	pext	p0\.d, pn15\[0\]
+[^:]+:	25e07310 	pext	p0\.d, pn8\[3\]
+[^:]+:	25e07137 	pext	p7\.d, pn9\[1\]
+[^:]+:	25207410 	pext	{p0\.b-p1\.b}, pn8\[0\]
+[^:]+:	25207410 	pext	{p0\.b-p1\.b}, pn8\[0\]
+[^:]+:	25207410 	pext	{p0\.b-p1\.b}, pn8\[0\]
+[^:]+:	2520741e 	pext	{p14\.b-p15\.b}, pn8\[0\]
+[^:]+:	2520741f 	pext	{p15\.b-p0\.b}, pn8\[0\]
+[^:]+:	2520741f 	pext	{p15\.b-p0\.b}, pn8\[0\]
+[^:]+:	252074f0 	pext	{p0\.b-p1\.b}, pn15\[0\]
+[^:]+:	25207510 	pext	{p0\.b-p1\.b}, pn8\[1\]
+[^:]+:	25207497 	pext	{p7\.b-p8\.b}, pn12\[0\]
+[^:]+:	25607410 	pext	{p0\.h-p1\.h}, pn8\[0\]
+[^:]+:	25607410 	pext	{p0\.h-p1\.h}, pn8\[0\]
+[^:]+:	25607410 	pext	{p0\.h-p1\.h}, pn8\[0\]
+[^:]+:	2560741e 	pext	{p14\.h-p15\.h}, pn8\[0\]
+[^:]+:	2560741f 	pext	{p15\.h-p0\.h}, pn8\[0\]
+[^:]+:	2560741f 	pext	{p15\.h-p0\.h}, pn8\[0\]
+[^:]+:	256074f0 	pext	{p0\.h-p1\.h}, pn15\[0\]
+[^:]+:	25607510 	pext	{p0\.h-p1\.h}, pn8\[1\]
+[^:]+:	256074d2 	pext	{p2\.h-p3\.h}, pn14\[0\]
+[^:]+:	25a07410 	pext	{p0\.s-p1\.s}, pn8\[0\]
+[^:]+:	25a07410 	pext	{p0\.s-p1\.s}, pn8\[0\]
+[^:]+:	25a07410 	pext	{p0\.s-p1\.s}, pn8\[0\]
+[^:]+:	25a0741e 	pext	{p14\.s-p15\.s}, pn8\[0\]
+[^:]+:	25a0741f 	pext	{p15\.s-p0\.s}, pn8\[0\]
+[^:]+:	25a0741f 	pext	{p15\.s-p0\.s}, pn8\[0\]
+[^:]+:	25a074f0 	pext	{p0\.s-p1\.s}, pn15\[0\]
+[^:]+:	25a07510 	pext	{p0\.s-p1\.s}, pn8\[1\]
+[^:]+:	25a074b5 	pext	{p5\.s-p6\.s}, pn13\[0\]
+[^:]+:	25e07410 	pext	{p0\.d-p1\.d}, pn8\[0\]
+[^:]+:	25e07410 	pext	{p0\.d-p1\.d}, pn8\[0\]
+[^:]+:	25e07410 	pext	{p0\.d-p1\.d}, pn8\[0\]
+[^:]+:	25e0741e 	pext	{p14\.d-p15\.d}, pn8\[0\]
+[^:]+:	25e0741f 	pext	{p15\.d-p0\.d}, pn8\[0\]
+[^:]+:	25e0741f 	pext	{p15\.d-p0\.d}, pn8\[0\]
+[^:]+:	25e074f0 	pext	{p0\.d-p1\.d}, pn15\[0\]
+[^:]+:	25e07510 	pext	{p0\.d-p1\.d}, pn8\[1\]
+[^:]+:	25e0743c 	pext	{p12\.d-p13\.d}, pn9\[0\]
+[^:]+:	25207810 	ptrue	pn8\.b
+[^:]+:	25207813 	ptrue	pn11\.b
+[^:]+:	25207817 	ptrue	pn15\.b
+[^:]+:	25607810 	ptrue	pn8\.h
+[^:]+:	25607811 	ptrue	pn9\.h
+[^:]+:	25607817 	ptrue	pn15\.h
+[^:]+:	25a07810 	ptrue	pn8\.s
+[^:]+:	25a07816 	ptrue	pn14\.s
+[^:]+:	25a07817 	ptrue	pn15\.s
+[^:]+:	25e07810 	ptrue	pn8\.d
+[^:]+:	25e07814 	ptrue	pn12\.d
+[^:]+:	25e07817 	ptrue	pn15\.d
diff --git a/gas/testsuite/gas/aarch64/sme2-6-sve2p1.s b/gas/testsuite/gas/aarch64/sme2-6-sve2p1.s
new file mode 100644
index 00000000000..5fad1252e0c
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-6-sve2p1.s
@@ -0,0 +1,112 @@
+	cntp	x0, pn0.b, vlx2
+	CNTP	X0, PN0.B, VLx2
+	cntp	x30, pn0.b, vlx2
+	cntp	xzr, pn0.b, vlx2
+	cntp	x0, pn15.b, vlx2
+	cntp	x0, pn0.b, vlx4
+	CNTP	X11, PN13.b, VLx4
+
+	cntp	x0, pn0.h, vlx2
+	CNTP	X0, PN0.H, VLx2
+	cntp	x30, pn0.h, vlx2
+	cntp	xzr, pn0.h, vlx2
+	cntp	x0, pn15.h, vlx2
+	cntp	x0, pn0.h, vlx4
+	CNTP	X20, PN9.h, VLx2
+
+	cntp	x0, pn0.s, vlx2
+	CNTP	X0, PN0.s, VLx2
+	cntp	x30, pn0.s, vlx2
+	cntp	xzr, pn0.s, vlx2
+	cntp	x0, pn15.s, vlx2
+	cntp	x0, pn0.s, vlx4
+	CNTP	X15, PN8.s, VLx4
+
+	cntp	x0, pn0.d, vlx2
+	CNTP	X0, PN0.d, VLx2
+	cntp	x30, pn0.d, vlx2
+	cntp	xzr, pn0.d, vlx2
+	cntp	x0, pn15.d, vlx2
+	cntp	x0, pn0.d, vlx4
+	CNTP	X4, PN5.d, VLx2
+
+	pext	p0.b, pn8[0]
+	PEXT	P0.B, PN8[0]
+	pext	p15.b, pn8[0]
+	pext	p0.b, pn15[0]
+	pext	p0.b, pn8[3]
+	pext	p4.b, pn11[2]
+
+	pext	p0.h, pn8[0]
+	PEXT	P0.H, PN8[0]
+	pext	p15.h, pn8[0]
+	pext	p0.h, pn15[0]
+	pext	p0.h, pn8[3]
+	pext	p5.h, pn14[1]
+
+	pext	p0.s, pn8[0]
+	PEXT	P0.S, PN8[0]
+	pext	p15.s, pn8[0]
+	pext	p0.s, pn15[0]
+	pext	p0.s, pn8[3]
+	pext	p6.s, pn10[2]
+
+	pext	p0.d, pn8[0]
+	PEXT	P0.D, PN8[0]
+	pext	p15.d, pn8[0]
+	pext	p0.d, pn15[0]
+	pext	p0.d, pn8[3]
+	pext	p7.d, pn9[1]
+
+	pext	{ p0.b, p1.b }, pn8[0]
+	pext	{ p0.b - p1.b }, pn8[0]
+	PEXT	{ P0.B - P1.B }, PN8[0]
+	pext	{ p14.b - p15.b }, pn8[0]
+	pext	{ p15.b, p0.b }, pn8[0]
+	pext	{ p15.b - p0.b }, pn8[0]
+	pext	{ p0.b - p1.b }, pn15[0]
+	pext	{ p0.b - p1.b }, pn8[1]
+	pext	{ p7.b - p8.b }, pn12[0]
+
+	pext	{ p0.h, p1.h }, pn8[0]
+	pext	{ p0.h - p1.h }, pn8[0]
+	PEXT	{ P0.H - P1.H }, PN8[0]
+	pext	{ p14.h - p15.h }, pn8[0]
+	pext	{ p15.h, p0.h }, pn8[0]
+	pext	{ p15.h - p0.h }, pn8[0]
+	pext	{ p0.h - p1.h }, pn15[0]
+	pext	{ p0.h - p1.h }, pn8[1]
+	pext	{ p2.h - p3.h }, pn14[0]
+
+	pext	{ p0.s, p1.s }, pn8[0]
+	pext	{ p0.s - p1.s }, pn8[0]
+	PEXT	{ P0.S - P1.S }, PN8[0]
+	pext	{ p14.s - p15.s }, pn8[0]
+	pext	{ p15.s, p0.s }, pn8[0]
+	pext	{ p15.s - p0.s }, pn8[0]
+	pext	{ p0.s - p1.s }, pn15[0]
+	pext	{ p0.s - p1.s }, pn8[1]
+	pext	{ p5.s - p6.s }, pn13[0]
+
+	pext	{ p0.d, p1.d }, pn8[0]
+	pext	{ p0.d - p1.d }, pn8[0]
+	PEXT	{ P0.D - P1.D }, PN8[0]
+	pext	{ p14.d - p15.d }, pn8[0]
+	pext	{ p15.d, p0.d }, pn8[0]
+	pext	{ p15.d - p0.d }, pn8[0]
+	pext	{ p0.d - p1.d }, pn15[0]
+	pext	{ p0.d - p1.d }, pn8[1]
+	pext	{ p12.d - p13.d }, pn9[0]
+
+	ptrue	pn8.b
+	ptrue	pn11.b
+	ptrue	pn15.b
+	ptrue	pn8.h
+	ptrue	pn9.h
+	ptrue	pn15.h
+	ptrue	pn8.s
+	ptrue	pn14.s
+	ptrue	pn15.s
+	ptrue	pn8.d
+	ptrue	pn12.d
+	ptrue	pn15.d
diff --git a/gas/testsuite/gas/aarch64/sme2-7.d b/gas/testsuite/gas/aarch64/sme2-7.d
index 8c6fdc5d508..3fcad5d8408 100644
--- a/gas/testsuite/gas/aarch64/sme2-7.d
+++ b/gas/testsuite/gas/aarch64/sme2-7.d
@@ -1,4 +1,5 @@
 #as: -march=armv8-a+sme2
+#as: -march=armv8-a+sve2p1
 #objdump: -dr
 
 [^:]+:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sve2-sme2-2.d b/gas/testsuite/gas/aarch64/sve2-sme2-2.d
index 9e60d1fd9b0..6e9df901975 100644
--- a/gas/testsuite/gas/aarch64/sve2-sme2-2.d
+++ b/gas/testsuite/gas/aarch64/sve2-sme2-2.d
@@ -1,4 +1,5 @@
 #as: -march=armv8-a+sme2
+#as: -march=armv8-a+sve2p1
 #objdump: -dr
 
 [^:]+:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sve2-sme2-3.d b/gas/testsuite/gas/aarch64/sve2-sme2-3.d
index 2095aba0e65..1305d41ba33 100644
--- a/gas/testsuite/gas/aarch64/sve2-sme2-3.d
+++ b/gas/testsuite/gas/aarch64/sve2-sme2-3.d
@@ -1,4 +1,5 @@
 #as: -march=armv8-a+sme2
+#as: -march=armv8-a+sve2p1
 #objdump: -dr
 
 [^:]+:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sve2-sme2-4.d b/gas/testsuite/gas/aarch64/sve2-sme2-4.d
index b7bf3afbcad..e3a5d16c103 100644
--- a/gas/testsuite/gas/aarch64/sve2-sme2-4.d
+++ b/gas/testsuite/gas/aarch64/sve2-sme2-4.d
@@ -1,4 +1,5 @@
 #as: -march=armv8-a+sme2
+#as: -march=armv8-a+sve2p1
 #objdump: -dr
 
 [^:]+:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sve2-sme2-5.d b/gas/testsuite/gas/aarch64/sve2-sme2-5.d
index a1e5dc19a1c..a73144ac216 100644
--- a/gas/testsuite/gas/aarch64/sve2-sme2-5.d
+++ b/gas/testsuite/gas/aarch64/sve2-sme2-5.d
@@ -1,4 +1,5 @@
 #as: -march=armv8-a+sme2
+#as: -march=armv8-a+sve2p1
 #objdump: -dr
 
 [^:]+:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sve2-sme2-6.d b/gas/testsuite/gas/aarch64/sve2-sme2-6.d
index 0d6f7c1eb3c..7aa5c3e9fe5 100644
--- a/gas/testsuite/gas/aarch64/sve2-sme2-6.d
+++ b/gas/testsuite/gas/aarch64/sve2-sme2-6.d
@@ -1,4 +1,5 @@
 #as: -march=armv8-a+sme2
+#as: -march=armv8-a+sve2p1
 #objdump: -dr
 
 [^:]+:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sve2-sme2-7.d b/gas/testsuite/gas/aarch64/sve2-sme2-7.d
index 2741ad57b04..2c155dee416 100644
--- a/gas/testsuite/gas/aarch64/sve2-sme2-7.d
+++ b/gas/testsuite/gas/aarch64/sve2-sme2-7.d
@@ -1,4 +1,5 @@
 #as: -march=armv8-a+sme2
+#as: -march=armv8-a+sve2p1
 #objdump: -dr
 
 [^:]+:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sve2p1-1.d b/gas/testsuite/gas/aarch64/sve2p1-1.d
index f4c36b65512..fa4ed8cf532 100644
--- a/gas/testsuite/gas/aarch64/sve2p1-1.d
+++ b/gas/testsuite/gas/aarch64/sve2p1-1.d
@@ -1,5 +1,7 @@
 #name: Test of SVE2.1 instructions
 #as: -march=armv9.4-a
+#as: -march=armv8-a+sve2p1
+#as: -march=armv8-a+sme2p1
 #objdump: -dr
 
 [^:]+:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sve2p1-4.d b/gas/testsuite/gas/aarch64/sve2p1-4.d
index 390c63d8acf..94dbecb0927 100644
--- a/gas/testsuite/gas/aarch64/sve2p1-4.d
+++ b/gas/testsuite/gas/aarch64/sve2p1-4.d
@@ -1,5 +1,7 @@
 #name: Test of SVE2.1 ld[1-4]q/st[1-4]q instructions.
 #as: -march=armv9.4-a
+#as: -march=armv8-a+sve2p1
+#as: -march=armv8-a+sme2p1
 #objdump: -dr
 
 [^:]+:     file format .*
@@ -8,15 +10,6 @@
 [^:]+:
 
 [^:]+:
-.*:	c400a000 	ld1q	{z0.q}, p0/z, \[z0.d, x0\]
-.*:	c400a01f 	ld1q	{z31.q}, p0/z, \[z0.d, x0\]
-.*:	c400bc00 	ld1q	{z0.q}, p7/z, \[z0.d, x0\]
-.*:	c400a3e0 	ld1q	{z0.q}, p0/z, \[z31.d, x0\]
-.*:	c41ea000 	ld1q	{z0.q}, p0/z, \[z0.d, x30\]
-.*:	c41fa000 	ld1q	{z0.q}, p0/z, \[z0.d\]
-.*:	c41fa000 	ld1q	{z0.q}, p0/z, \[z0.d\]
-.*:	c41ebfff 	ld1q	{z31.q}, p7/z, \[z31.d, x30\]
-.*:	c404acef 	ld1q	{z15.q}, p3/z, \[z7.d, x4\]
 .*:	a490e000 	ld2q	{z0.q-z1.q}, p0/z, \[x0\]
 .*:	a490e01f 	ld2q	{z31.q-z0.q}, p0/z, \[x0\]
 .*:	a490fc00 	ld2q	{z0.q-z1.q}, p7/z, \[x0\]
@@ -79,15 +72,6 @@
 .*:	a5a4886a 	ld4q	{z10.q-z13.q}, p2/z, \[x3, x4, lsl #4\]
 .*:	a5a4886a 	ld4q	{z10.q-z13.q}, p2/z, \[x3, x4, lsl #4\]
 .*:	a5a48bea 	ld4q	{z10.q-z13.q}, p2/z, \[sp, x4, lsl #4\]
-.*:	e4202000 	st1q	{z0.q}, p0, \[z0.d, x0\]
-.*:	e420201f 	st1q	{z31.q}, p0, \[z0.d, x0\]
-.*:	e4203c00 	st1q	{z0.q}, p7, \[z0.d, x0\]
-.*:	e42023e0 	st1q	{z0.q}, p0, \[z31.d, x0\]
-.*:	e43e2000 	st1q	{z0.q}, p0, \[z0.d, x30\]
-.*:	e43f2000 	st1q	{z0.q}, p0, \[z0.d\]
-.*:	e43f2000 	st1q	{z0.q}, p0, \[z0.d\]
-.*:	e43e3fff 	st1q	{z31.q}, p7, \[z31.d, x30\]
-.*:	e4242cef 	st1q	{z15.q}, p3, \[z7.d, x4\]
 .*:	e4400000 	st2q	{z0.q-z1.q}, p0, \[x0\]
 .*:	e440001f 	st2q	{z31.q-z0.q}, p0, \[x0\]
 .*:	e4401c00 	st2q	{z0.q-z1.q}, p7, \[x0\]
diff --git a/gas/testsuite/gas/aarch64/sve2p1-4.s b/gas/testsuite/gas/aarch64/sve2p1-4.s
index 70d5044bcaa..4a8f805d5df 100644
--- a/gas/testsuite/gas/aarch64/sve2p1-4.s
+++ b/gas/testsuite/gas/aarch64/sve2p1-4.s
@@ -1,13 +1,3 @@
-ld1q { Z0.Q }, P0/Z, [Z0.D, x0]
-ld1q { Z31.Q }, P0/Z, [Z0.D, x0]
-ld1q { Z0.Q }, P7/Z, [Z0.D, x0]
-ld1q { Z0.Q }, P0/Z, [Z31.D, x0]
-ld1q { Z0.Q }, P0/Z, [Z0.D, x30]
-ld1q { Z0.Q }, P0/Z, [Z0.D, xzr]
-ld1q { Z0.Q }, P0/Z, [Z0.D]
-ld1q { Z31.Q }, P7/Z, [Z31.D, x30]
-ld1q { Z15.Q }, P3/Z, [Z7.D, x4]
-
 ld2q {Z0.Q, Z1.Q}, p0/Z, [x0,  #0, MUL VL]
 ld2q {Z31.Q, Z0.Q}, p0/Z, [x0,  #0, MUL VL]
 ld2q {Z0.Q, Z1.Q}, p7/Z, [x0,  #0, MUL VL]
@@ -76,16 +66,6 @@ ld4q {Z10.Q - Z11.Q - Z12.Q - Z13.Q}, p2/Z, [x3,  x4, LSL  #4]
 ld4q {Z10.Q - Z13.Q}, p2/Z, [x3,  x4, LSL  #4]
 ld4q {Z10.Q, Z11.Q, Z12.Q, Z13.Q}, p2/Z, [sp,  x4, LSL  #4]
 
-st1q { Z0.Q }, P0, [Z0.D, x0]
-st1q { Z31.Q }, P0, [Z0.D, x0]
-st1q { Z0.Q }, P7, [Z0.D, x0]
-st1q { Z0.Q }, P0, [Z31.D, x0]
-st1q { Z0.Q }, P0, [Z0.D, x30]
-st1q { Z0.Q }, P0, [Z0.D, xzr]
-st1q { Z0.Q }, P0, [Z0.D]
-st1q { Z31.Q }, P7, [Z31.D, x30]
-st1q { Z15.Q }, P3, [Z7.D, x4]
-
 st2q {Z0.Q, Z1.Q}, p0, [x0,  #0, MUL VL]
 st2q {Z31.Q, Z0.Q}, p0, [x0,  #0, MUL VL]
 st2q {Z0.Q, Z1.Q}, p7, [x0,  #0, MUL VL]
diff --git a/gas/testsuite/gas/aarch64/sve2p1-5.d b/gas/testsuite/gas/aarch64/sve2p1-5.d
index f581e345f58..1c23eb0e717 100644
--- a/gas/testsuite/gas/aarch64/sve2p1-5.d
+++ b/gas/testsuite/gas/aarch64/sve2p1-5.d
@@ -1,5 +1,8 @@
 #name: Test of SVE2.1 orqv instruction.
 #as: -march=armv9.4-a
+#as: -march=armv8-a+sve2p1
+#as: -march=armv8-a+sme2p1
+#as: -march=armv9.4-a
 #objdump: -dr
 
 [^:]+:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sve2p1-6.d b/gas/testsuite/gas/aarch64/sve2p1-6.d
index 42d1ee41e99..388c33ef711 100644
--- a/gas/testsuite/gas/aarch64/sve2p1-6.d
+++ b/gas/testsuite/gas/aarch64/sve2p1-6.d
@@ -1,5 +1,7 @@
 #name: Test of SVE2.1 tblq, tbxq, uzpq[1-2] and zipq[1-2] instruction.
 #as: -march=armv9.4-a
+#as: -march=armv8-a+sve2p1
+#as: -march=armv8-a+sme2p1
 #objdump: -dr
 
 [^:]+:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sve2p1-7.d b/gas/testsuite/gas/aarch64/sve2p1-7.d
index 6bd1a22aaf4..d3358b4425a 100644
--- a/gas/testsuite/gas/aarch64/sve2p1-7.d
+++ b/gas/testsuite/gas/aarch64/sve2p1-7.d
@@ -1,5 +1,7 @@
 #name: Test of SVE2.1 pmov instruction.
 #as: -march=armv9.4-a
+#as: -march=armv8-a+sve2p1
+#as: -march=armv8-a+sme2p1
 #objdump: -dr
 
 [^:]+:     file format .*
diff --git a/gas/testsuite/gas/aarch64/sve2p1-8.d b/gas/testsuite/gas/aarch64/sve2p1-8.d
new file mode 100644
index 00000000000..bb2ca4618ee
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2p1-8.d
@@ -0,0 +1,29 @@
+#name: Test of SVE2.1 ld1q/st1q instructions.
+#as: -march=armv9.4-a
+#as: -march=armv8-a+sve2p1
+#objdump: -dr
+
+[^:]+:     file format .*
+
+
+[^:]+:
+
+[^:]+:
+.*:	c400a000 	ld1q	{z0.q}, p0/z, \[z0.d, x0\]
+.*:	c400a01f 	ld1q	{z31.q}, p0/z, \[z0.d, x0\]
+.*:	c400bc00 	ld1q	{z0.q}, p7/z, \[z0.d, x0\]
+.*:	c400a3e0 	ld1q	{z0.q}, p0/z, \[z31.d, x0\]
+.*:	c41ea000 	ld1q	{z0.q}, p0/z, \[z0.d, x30\]
+.*:	c41fa000 	ld1q	{z0.q}, p0/z, \[z0.d\]
+.*:	c41fa000 	ld1q	{z0.q}, p0/z, \[z0.d\]
+.*:	c41ebfff 	ld1q	{z31.q}, p7/z, \[z31.d, x30\]
+.*:	c404acef 	ld1q	{z15.q}, p3/z, \[z7.d, x4\]
+.*:	e4202000 	st1q	{z0.q}, p0, \[z0.d, x0\]
+.*:	e420201f 	st1q	{z31.q}, p0, \[z0.d, x0\]
+.*:	e4203c00 	st1q	{z0.q}, p7, \[z0.d, x0\]
+.*:	e42023e0 	st1q	{z0.q}, p0, \[z31.d, x0\]
+.*:	e43e2000 	st1q	{z0.q}, p0, \[z0.d, x30\]
+.*:	e43f2000 	st1q	{z0.q}, p0, \[z0.d\]
+.*:	e43f2000 	st1q	{z0.q}, p0, \[z0.d\]
+.*:	e43e3fff 	st1q	{z31.q}, p7, \[z31.d, x30\]
+.*:	e4242cef 	st1q	{z15.q}, p3, \[z7.d, x4\]
diff --git a/gas/testsuite/gas/aarch64/sve2p1-8.s b/gas/testsuite/gas/aarch64/sve2p1-8.s
new file mode 100644
index 00000000000..0606238fb4a
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2p1-8.s
@@ -0,0 +1,19 @@
+ld1q { Z0.Q }, P0/Z, [Z0.D, x0]
+ld1q { Z31.Q }, P0/Z, [Z0.D, x0]
+ld1q { Z0.Q }, P7/Z, [Z0.D, x0]
+ld1q { Z0.Q }, P0/Z, [Z31.D, x0]
+ld1q { Z0.Q }, P0/Z, [Z0.D, x30]
+ld1q { Z0.Q }, P0/Z, [Z0.D, xzr]
+ld1q { Z0.Q }, P0/Z, [Z0.D]
+ld1q { Z31.Q }, P7/Z, [Z31.D, x30]
+ld1q { Z15.Q }, P3/Z, [Z7.D, x4]
+
+st1q { Z0.Q }, P0, [Z0.D, x0]
+st1q { Z31.Q }, P0, [Z0.D, x0]
+st1q { Z0.Q }, P7, [Z0.D, x0]
+st1q { Z0.Q }, P0, [Z31.D, x0]
+st1q { Z0.Q }, P0, [Z0.D, x30]
+st1q { Z0.Q }, P0, [Z0.D, xzr]
+st1q { Z0.Q }, P0, [Z0.D]
+st1q { Z31.Q }, P7, [Z31.D, x30]
+st1q { Z15.Q }, P3, [Z7.D, x4]
diff --git a/gas/testsuite/gas/aarch64/sve2p1-9-invalid.d b/gas/testsuite/gas/aarch64/sve2p1-9-invalid.d
new file mode 100644
index 00000000000..ac49bc8a050
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2p1-9-invalid.d
@@ -0,0 +1,2 @@
+#as: -march=armv9.4-a
+#error_output: sve2p1-9-invalid.l
diff --git a/gas/testsuite/gas/aarch64/sve2p1-9-invalid.l b/gas/testsuite/gas/aarch64/sve2p1-9-invalid.l
new file mode 100644
index 00000000000..d2739e7b187
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2p1-9-invalid.l
@@ -0,0 +1,73 @@
+.*: Assembler messages:
+.*: Error: p0-p7 expected at operand 2 -- `ld1d { ?z0.q ?},p8/z,\[x0\]'
+.*: Error: invalid base register at operand 3 -- `ld1d { ?z0.q ?},p0/z,\[x31\]'
+.*: Error: immediate offset out of range -8 to 7 at operand 3 -- `ld1d { ?z0.q ?},p0/z,\[x0,#8,mul vl\]'
+.*: Error: immediate offset out of range -8 to 7 at operand 3 -- `ld1d { ?z0.q ?},p0/z,\[x0,#-9,mul vl\]'
+.*: Error: operand mismatch -- `ld1d { ?z0.q ?},p0,\[x0\]'
+.*: Info:    did you mean this\?
+.*: Info:    	ld1d { ?z0.q ?}, p0/z, \[x0\]
+.*: Error: p0-p7 expected at operand 2 -- `ld1d { ?z0.q ?},p8/z,\[x0,x0,LSL#3\]'
+.*: Error: invalid base register at operand 3 -- `ld1d { ?z0.q ?},p0/z,\[x31,x0,LSL#3\]'
+.*: Error: invalid base register at operand 3 -- `ld1d { ?z0.q ?},p0/z,\[xzr,x0,LSL#3\]'
+.*: Error: only 'MUL VL' is permitted at operand 3 -- `ld1d { ?z0.q ?},p0/z,\[x0,x31,LSL#3\]'
+.*: Error: index register xzr is not allowed at operand 3 -- `ld1d { ?z0.q ?},p0/z,\[x0,xzr,LSL#3\]'
+.*: Error: invalid offset register at operand 3 -- `ld1d { ?z0.q ?},p0/z,\[x0,sp,LSL#3\]'
+.*: Error: invalid addressing mode at operand 3 -- `ld1d { ?z0.q ?},p0/z,\[x0,x0\]'
+.*: Error: invalid addressing mode at operand 3 -- `ld1d { ?z0.q ?},p0/z,\[x0,x0,LSL#2\]'
+.*: Error: operand mismatch -- `ld1d { ?z0.q ?},p0,\[x0,x0,LSL#3\]'
+.*: Info:    did you mean this\?
+.*: Info:    	ld1d { ?z0.q ?}, p0/z, \[x0, x0, lsl #3\]
+.*: Error: p0-p7 expected at operand 2 -- `ld1w { ?z0.q ?},p8/z,\[x0\]'
+.*: Error: invalid base register at operand 3 -- `ld1w { ?z0.q ?},p0/z,\[x31\]'
+.*: Error: immediate offset out of range -8 to 7 at operand 3 -- `ld1w { ?z0.q ?},p0/z,\[x0,#8,mul vl\]'
+.*: Error: immediate offset out of range -8 to 7 at operand 3 -- `ld1w { ?z0.q ?},p0/z,\[x0,#-9,mul vl\]'
+.*: Error: operand mismatch -- `ld1w { ?z0.q ?},p0,\[x0\]'
+.*: Info:    did you mean this\?
+.*: Info:    	ld1w { ?z0.q ?}, p0/z, \[x0\]
+.*: Error: p0-p7 expected at operand 2 -- `ld1w { ?z0.q ?},p8/z,\[x0,x0,LSL#2\]'
+.*: Error: invalid base register at operand 3 -- `ld1w { ?z0.q ?},p0/z,\[x31,x0,LSL#2\]'
+.*: Error: invalid base register at operand 3 -- `ld1w { ?z0.q ?},p0/z,\[xzr,x0,LSL#2\]'
+.*: Error: only 'MUL VL' is permitted at operand 3 -- `ld1w { ?z0.q ?},p0/z,\[x0,x31,LSL#2\]'
+.*: Error: index register xzr is not allowed at operand 3 -- `ld1w { ?z0.q ?},p0/z,\[x0,xzr,LSL#2\]'
+.*: Error: invalid offset register at operand 3 -- `ld1w { ?z0.q ?},p0/z,\[x0,sp,LSL#2\]'
+.*: Error: invalid addressing mode at operand 3 -- `ld1w { ?z0.q ?},p0/z,\[x0,x0\]'
+.*: Error: invalid addressing mode at operand 3 -- `ld1w { ?z0.q ?},p0/z,\[x0,x0,LSL#3\]'
+.*: Error: operand mismatch -- `ld1w { ?z0.q ?},p0,\[x0,x0,LSL#2\]'
+.*: Info:    did you mean this\?
+.*: Info:    	ld1w { ?z0.q ?}, p0/z, \[x0, x0, lsl #2\]
+.*: Error: p0-p7 expected at operand 2 -- `st1d { ?z0.q ?},p8,\[x0\]'
+.*: Error: invalid base register at operand 3 -- `st1d { ?z0.q ?},p0,\[x31\]'
+.*: Error: immediate offset out of range -8 to 7 at operand 3 -- `st1d { ?z0.q ?},p0,\[x0,#8,mul vl\]'
+.*: Error: immediate offset out of range -8 to 7 at operand 3 -- `st1d { ?z0.q ?},p0,\[x0,#-9,mul vl\]'
+.*: Error: operand mismatch -- `st1d { ?z0.q ?},p0/z,\[x0\]'
+.*: Info:    did you mean this\?
+.*: Info:    	st1d { ?z0.q ?}, p0, \[x0\]
+.*: Error: p0-p7 expected at operand 2 -- `st1d { ?z0.q ?},p8,\[x0,x0,LSL#3\]'
+.*: Error: invalid base register at operand 3 -- `st1d { ?z0.q ?},p0,\[x31,x0,LSL#3\]'
+.*: Error: invalid base register at operand 3 -- `st1d { ?z0.q ?},p0,\[xzr,x0,LSL#3\]'
+.*: Error: only 'MUL VL' is permitted at operand 3 -- `st1d { ?z0.q ?},p0,\[x0,x31,LSL#3\]'
+.*: Error: index register xzr is not allowed at operand 3 -- `st1d { ?z0.q ?},p0,\[x0,xzr,LSL#3\]'
+.*: Error: invalid offset register at operand 3 -- `st1d { ?z0.q ?},p0,\[x0,sp,LSL#3\]'
+.*: Error: invalid addressing mode at operand 3 -- `st1d { ?z0.q ?},p0,\[x0,x0\]'
+.*: Error: invalid addressing mode at operand 3 -- `st1d { ?z0.q ?},p0,\[x0,x0,LSL#2\]'
+.*: Error: operand mismatch -- `st1d { ?z0.q ?},p0/z,\[x0,x0,LSL#3\]'
+.*: Info:    did you mean this\?
+.*: Info:    	st1d { ?z0.q ?}, p0, \[x0, x0, lsl #3\]
+.*: Error: p0-p7 expected at operand 2 -- `st1w { ?z0.q ?},p8,\[x0\]'
+.*: Error: invalid base register at operand 3 -- `st1w { ?z0.q ?},p0,\[x31\]'
+.*: Error: immediate offset out of range -8 to 7 at operand 3 -- `st1w { ?z0.q ?},p0,\[x0,#8,mul vl\]'
+.*: Error: immediate offset out of range -8 to 7 at operand 3 -- `st1w { ?z0.q ?},p0,\[x0,#-9,mul vl\]'
+.*: Error: operand mismatch -- `st1w { ?z0.q ?},p0/z,\[x0\]'
+.*: Info:    did you mean this\?
+.*: Info:    	st1w { ?z0.q ?}, p0, \[x0\]
+.*: Error: p0-p7 expected at operand 2 -- `st1w { ?z0.q ?},p8,\[x0,x0,LSL#2\]'
+.*: Error: invalid base register at operand 3 -- `st1w { ?z0.q ?},p0,\[x31,x0,LSL#2\]'
+.*: Error: invalid base register at operand 3 -- `st1w { ?z0.q ?},p0,\[xzr,x0,LSL#2\]'
+.*: Error: only 'MUL VL' is permitted at operand 3 -- `st1w { ?z0.q ?},p0,\[x0,x31,LSL#2\]'
+.*: Error: index register xzr is not allowed at operand 3 -- `st1w { ?z0.q ?},p0,\[x0,xzr,LSL#2\]'
+.*: Error: invalid offset register at operand 3 -- `st1w { ?z0.q ?},p0,\[x0,sp,LSL#2\]'
+.*: Error: invalid addressing mode at operand 3 -- `st1w { ?z0.q ?},p0,\[x0,x0\]'
+.*: Error: invalid addressing mode at operand 3 -- `st1w { ?z0.q ?},p0,\[x0,x0,LSL#3\]'
+.*: Error: operand mismatch -- `st1w { ?z0.q ?},p0/z,\[x0,x0,LSL#2\]'
+.*: Info:    did you mean this\?
+.*: Info:    	st1w { ?z0.q ?}, p0, \[x0, x0, lsl #2\]
diff --git a/gas/testsuite/gas/aarch64/sve2p1-9-invalid.s b/gas/testsuite/gas/aarch64/sve2p1-9-invalid.s
new file mode 100644
index 00000000000..757d0b1b8f2
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2p1-9-invalid.s
@@ -0,0 +1,69 @@
+ld1d { z0.q }, p8/z, [x0]
+ld1d { z0.q }, p0/z, [x31]
+ld1d { z0.q }, p0/z, [x0, #8, mul vl]
+ld1d { z0.q }, p0/z, [x0, #-9, mul vl]
+// FIXME: This form is incorrectly accepted:
+ld1d { z0.q }, p0/z, [x0, #0]
+ld1d { z0.q }, p0, [x0]
+
+ld1d { z0.q }, p8/z, [x0, x0, LSL #3]
+ld1d { z0.q }, p0/z, [x31, x0, LSL #3]
+ld1d { z0.q }, p0/z, [xzr, x0, LSL #3]
+// FIXME: confusing error message:
+ld1d { z0.q }, p0/z, [x0, x31, LSL #3]
+ld1d { z0.q }, p0/z, [x0, xzr, LSL #3]
+ld1d { z0.q }, p0/z, [x0, sp, LSL #3]
+ld1d { z0.q }, p0/z, [x0, x0]
+ld1d { z0.q }, p0/z, [x0, x0, LSL #2]
+ld1d { z0.q }, p0, [x0, x0, LSL #3]
+
+ld1w { z0.q }, p8/z, [x0]
+ld1w { z0.q }, p0/z, [x31]
+ld1w { z0.q }, p0/z, [x0, #8, mul vl]
+ld1w { z0.q }, p0/z, [x0, #-9, mul vl]
+ld1w { z0.q }, p0/z, [x0, #0]
+ld1w { z0.q }, p0, [x0]
+
+ld1w { z0.q }, p8/z, [x0, x0, LSL #2]
+ld1w { z0.q }, p0/z, [x31, x0, LSL #2]
+ld1w { z0.q }, p0/z, [xzr, x0, LSL #2]
+ld1w { z0.q }, p0/z, [x0, x31, LSL #2]
+ld1w { z0.q }, p0/z, [x0, xzr, LSL #2]
+ld1w { z0.q }, p0/z, [x0, sp, LSL #2]
+ld1w { z0.q }, p0/z, [x0, x0]
+ld1w { z0.q }, p0/z, [x0, x0, LSL #3]
+ld1w { z0.q }, p0, [x0, x0, LSL #2]
+
+st1d { z0.q }, p8, [x0]
+st1d { z0.q }, p0, [x31]
+st1d { z0.q }, p0, [x0, #8, mul vl]
+st1d { z0.q }, p0, [x0, #-9, mul vl]
+st1d { z0.q }, p0, [x0, #0]
+st1d { z0.q }, p0/z, [x0]
+
+st1d { z0.q }, p8, [x0, x0, LSL #3]
+st1d { z0.q }, p0, [x31, x0, LSL #3]
+st1d { z0.q }, p0, [xzr, x0, LSL #3]
+st1d { z0.q }, p0, [x0, x31, LSL #3]
+st1d { z0.q }, p0, [x0, xzr, LSL #3]
+st1d { z0.q }, p0, [x0, sp, LSL #3]
+st1d { z0.q }, p0, [x0, x0]
+st1d { z0.q }, p0, [x0, x0, LSL #2]
+st1d { z0.q }, p0/z, [x0, x0, LSL #3]
+
+st1w { z0.q }, p8, [x0]
+st1w { z0.q }, p0, [x31]
+st1w { z0.q }, p0, [x0, #8, mul vl]
+st1w { z0.q }, p0, [x0, #-9, mul vl]
+st1w { z0.q }, p0, [x0, #0]
+st1w { z0.q }, p0/z, [x0]
+
+st1w { z0.q }, p8, [x0, x0, LSL #2]
+st1w { z0.q }, p0, [x31, x0, LSL #2]
+st1w { z0.q }, p0, [xzr, x0, LSL #2]
+st1w { z0.q }, p0, [x0, x31, LSL #2]
+st1w { z0.q }, p0, [x0, xzr, LSL #2]
+st1w { z0.q }, p0, [x0, sp, LSL #2]
+st1w { z0.q }, p0, [x0, x0]
+st1w { z0.q }, p0, [x0, x0, LSL #3]
+st1w { z0.q }, p0/z, [x0, x0, LSL #2]
diff --git a/gas/testsuite/gas/aarch64/sve2p1-9.d b/gas/testsuite/gas/aarch64/sve2p1-9.d
new file mode 100644
index 00000000000..9a5c0d28b19
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2p1-9.d
@@ -0,0 +1,75 @@
+#name: Test of SVE2.1 ld1q/st1q instructions.
+#as: -march=armv9.4-a
+#as: -march=armv8-a+sve2p1
+#objdump: -dr
+
+[^:]+:     file format .*
+
+
+[^:]+:
+
+[^:]+:
+.*:	a5902000 	ld1d	{z0.q}, p0/z, \[x0\]
+.*:	a5902000 	ld1d	{z0.q}, p0/z, \[x0\]
+.*:	a5972000 	ld1d	{z0.q}, p0/z, \[x0, #7, mul vl\]
+.*:	a5982000 	ld1d	{z0.q}, p0/z, \[x0, #-8, mul vl\]
+.*:	a59f2000 	ld1d	{z0.q}, p0/z, \[x0, #-1, mul vl\]
+.*:	a590201f 	ld1d	{z31.q}, p0/z, \[x0\]
+.*:	a5903c00 	ld1d	{z0.q}, p7/z, \[x0\]
+.*:	a59023c0 	ld1d	{z0.q}, p0/z, \[x30\]
+.*:	a59023e0 	ld1d	{z0.q}, p0/z, \[sp\]
+.*:	a5808000 	ld1d	{z0.q}, p0/z, \[x0, x0, lsl #3\]
+.*:	a580801f 	ld1d	{z31.q}, p0/z, \[x0, x0, lsl #3\]
+.*:	a5809c00 	ld1d	{z0.q}, p7/z, \[x0, x0, lsl #3\]
+.*:	a58083c0 	ld1d	{z0.q}, p0/z, \[x30, x0, lsl #3\]
+.*:	a58083e0 	ld1d	{z0.q}, p0/z, \[sp, x0, lsl #3\]
+.*:	a58f8000 	ld1d	{z0.q}, p0/z, \[x0, x15, lsl #3\]
+.*:	a59e8000 	ld1d	{z0.q}, p0/z, \[x0, x30, lsl #3\]
+.*:	a5102000 	ld1w	{z0.q}, p0/z, \[x0\]
+.*:	a5102000 	ld1w	{z0.q}, p0/z, \[x0\]
+.*:	a5172000 	ld1w	{z0.q}, p0/z, \[x0, #7, mul vl\]
+.*:	a5182000 	ld1w	{z0.q}, p0/z, \[x0, #-8, mul vl\]
+.*:	a51f2000 	ld1w	{z0.q}, p0/z, \[x0, #-1, mul vl\]
+.*:	a510201f 	ld1w	{z31.q}, p0/z, \[x0\]
+.*:	a5103c00 	ld1w	{z0.q}, p7/z, \[x0\]
+.*:	a51023c0 	ld1w	{z0.q}, p0/z, \[x30\]
+.*:	a51023e0 	ld1w	{z0.q}, p0/z, \[sp\]
+.*:	a5008000 	ld1w	{z0.q}, p0/z, \[x0, x0, lsl #2\]
+.*:	a500801f 	ld1w	{z31.q}, p0/z, \[x0, x0, lsl #2\]
+.*:	a5009c00 	ld1w	{z0.q}, p7/z, \[x0, x0, lsl #2\]
+.*:	a50083c0 	ld1w	{z0.q}, p0/z, \[x30, x0, lsl #2\]
+.*:	a50083e0 	ld1w	{z0.q}, p0/z, \[sp, x0, lsl #2\]
+.*:	a50f8000 	ld1w	{z0.q}, p0/z, \[x0, x15, lsl #2\]
+.*:	a51e8000 	ld1w	{z0.q}, p0/z, \[x0, x30, lsl #2\]
+.*:	e5c0e000 	st1d	{z0.q}, p0, \[x0\]
+.*:	e5c0e000 	st1d	{z0.q}, p0, \[x0\]
+.*:	e5c7e000 	st1d	{z0.q}, p0, \[x0, #7, mul vl\]
+.*:	e5c8e000 	st1d	{z0.q}, p0, \[x0, #-8, mul vl\]
+.*:	e5cfe000 	st1d	{z0.q}, p0, \[x0, #-1, mul vl\]
+.*:	e5c0e01f 	st1d	{z31.q}, p0, \[x0\]
+.*:	e5c0fc00 	st1d	{z0.q}, p7, \[x0\]
+.*:	e5c0e3c0 	st1d	{z0.q}, p0, \[x30\]
+.*:	e5c0e3e0 	st1d	{z0.q}, p0, \[sp\]
+.*:	e5c04000 	st1d	{z0.q}, p0, \[x0, x0, lsl #3\]
+.*:	e5c0401f 	st1d	{z31.q}, p0, \[x0, x0, lsl #3\]
+.*:	e5c05c00 	st1d	{z0.q}, p7, \[x0, x0, lsl #3\]
+.*:	e5c043c0 	st1d	{z0.q}, p0, \[x30, x0, lsl #3\]
+.*:	e5c043e0 	st1d	{z0.q}, p0, \[sp, x0, lsl #3\]
+.*:	e5cf4000 	st1d	{z0.q}, p0, \[x0, x15, lsl #3\]
+.*:	e5de4000 	st1d	{z0.q}, p0, \[x0, x30, lsl #3\]
+.*:	e500e000 	st1w	{z0.q}, p0, \[x0\]
+.*:	e500e000 	st1w	{z0.q}, p0, \[x0\]
+.*:	e507e000 	st1w	{z0.q}, p0, \[x0, #7, mul vl\]
+.*:	e508e000 	st1w	{z0.q}, p0, \[x0, #-8, mul vl\]
+.*[...]

[diff truncated at 100000 bytes]


More information about the Binutils-cvs mailing list