aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorSrinath Parvathaneni <srinath.parvathaneni@arm.com>2024-07-08 16:36:42 +0100
committerRichard Earnshaw <rearnsha@arm.com>2024-07-12 15:40:48 +0100
commit6ab366f2643d13507e53e85684dc5b5a5e14b54b (patch)
tree09a78622f1825b484ab1c20d816d5702f7681241 /gas
parent9858d3031e5e79fc4b3ec2793f3e1aca569afd6f (diff)
downloadgdb-6ab366f2643d13507e53e85684dc5b5a5e14b54b.zip
gdb-6ab366f2643d13507e53e85684dc5b5a5e14b54b.tar.gz
gdb-6ab366f2643d13507e53e85684dc5b5a5e14b54b.tar.bz2
aarch64: Add support for sme2.1 movaz instructions.
This patch adds support for following sme2.1 movaz instructions and the spec is available here [1]. 1. MOVAZ (array to vector, two registers). 2. MOVAZ (array to vector, four registers). 3. MOVAZ (tile to vector, single). [1]: https://developer.arm.com/documentation/ddi0602/2024-03/SME-Instructions?lang=en
Diffstat (limited to 'gas')
-rw-r--r--gas/config/tc-aarch64.c1
-rw-r--r--gas/testsuite/gas/aarch64/sme2p1-3-bad.d4
-rw-r--r--gas/testsuite/gas/aarch64/sme2p1-3-bad.l30
-rw-r--r--gas/testsuite/gas/aarch64/sme2p1-3-bad.s20
-rw-r--r--gas/testsuite/gas/aarch64/sme2p1-3.d26
-rw-r--r--gas/testsuite/gas/aarch64/sme2p1-3.s19
-rw-r--r--gas/testsuite/gas/aarch64/sme2p1-4-bad.d4
-rw-r--r--gas/testsuite/gas/aarch64/sme2p1-4-bad.l76
-rw-r--r--gas/testsuite/gas/aarch64/sme2p1-4-bad.s48
-rw-r--r--gas/testsuite/gas/aarch64/sme2p1-4.d53
-rw-r--r--gas/testsuite/gas/aarch64/sme2p1-4.s48
11 files changed, 329 insertions, 0 deletions
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index ed5ab76..ceb0f34 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -8181,6 +8181,7 @@ parse_operands (char *str, const aarch64_opcode *opcode)
case AARCH64_OPND_SME_ZA_array_vrsh_2:
case AARCH64_OPND_SME_ZA_array_vrss_2:
case AARCH64_OPND_SME_ZA_array_vrsd_2:
+ case AARCH64_OPND_SME_ZA_ARRAY4:
if (!parse_dual_indexed_reg (&str, REG_TYPE_ZATHV,
&info->indexed_za, &qualifier, 0))
goto failure;
diff --git a/gas/testsuite/gas/aarch64/sme2p1-3-bad.d b/gas/testsuite/gas/aarch64/sme2p1-3-bad.d
new file mode 100644
index 0000000..730d3bf
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2p1-3-bad.d
@@ -0,0 +1,4 @@
+#name: Negative test of SME2.1 movaz array to vector instructions.
+#as: -march=armv9.4-a+sme2p1
+#source: sme2p1-3-bad.s
+#error_output: sme2p1-3-bad.l
diff --git a/gas/testsuite/gas/aarch64/sme2p1-3-bad.l b/gas/testsuite/gas/aarch64/sme2p1-3-bad.l
new file mode 100644
index 0000000..8b7019f
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2p1-3-bad.l
@@ -0,0 +1,30 @@
+.*: Assembler messages:
+.*: Error: operand mismatch -- `movaz {z0.s-z1.s},za.d\[w8,0,vgx2\]'
+.*: Info: did you mean this\?
+.*: Info: movaz {z0.d-z1.d}, za.d\[w8, 0, vgx2\]
+.*: Error: operand mismatch -- `movaz {z30.h-z31.h},za.d\[w8,0,vgx2\]'
+.*: Info: did you mean this\?
+.*: Info: movaz {z30.d-z31.d}, za.d\[w8, 0, vgx2\]
+.*: Error: operand mismatch -- `movaz {z0.b-z1.b},za.b\[w11,0,vgx2\]'
+.*: Info: did you mean this\?
+.*: Info: movaz {z0.d-z1.d}, za.d\[w11, 0, vgx2\]
+.*: Error: expected a selection register in the range w8-w11 at operand 2 -- `movaz {z0.d-z1.d},za.d\[w13,7,vgx2\]'
+.*: Error: immediate offset out of range 0 to 7 at operand 2 -- `movaz {z30.d-z31.d},za.d\[w11,15,vgx2\]'
+.*: Error: invalid vector group size at operand 2 -- `movaz {z14.d-z15.d},za.d\[w9,4,vgx3\]'
+.*: Error: missing immediate offset at operand 2 -- `movaz {z6.d-z7.d},za.d\[w10\]'
+.*: Error: missing immediate offset at operand 2 -- `movaz {z2.d-z4.d},za.d\[w10 6\]'
+.*: Error: operand mismatch -- `movaz {z0.s-z3.s},za.d\[w8,0,vgx4\]'
+.*: Info: did you mean this\?
+.*: Info: movaz {z0.d-z3.d}, za.d\[w8, 0, vgx4\]
+.*: Error: operand mismatch -- `movaz {z28.h-z31.h},za.d\[w8,0,vgx4\]'
+.*: Info: did you mean this\?
+.*: Info: movaz {z28.d-z31.d}, za.d\[w8, 0, vgx4\]
+.*: Error: operand mismatch -- `movaz {z0.b-z3.b},za.b\[w11,0,vgx4\]'
+.*: Info: did you mean this\?
+.*: Info: movaz {z0.d-z3.d}, za.d\[w11, 0, vgx4\]
+.*: Error: expected a selection register in the range w8-w11 at operand 2 -- `movaz {z0.d-z3.d},za.d\[w14,7,vgx4\]'
+.*: Error: invalid vector group size at operand 2 -- `movaz {z28.d-z31.d},za.d\[w11,11,vgx3\]'
+.*: Error: start register out of range at operand 1 -- `movaz {z14.d-z17.d},za.d\[w9,4,vgx4\]'
+.*: Error: too many registers in vector register list at operand 1 -- `movaz {z4.d-z8.d},za.d\[w10,3,vgx4\]'
+.*: Error: missing immediate offset at operand 2 -- `movaz {z0.d,z3.d},za.d\[w10\]'
+.*: Error: the register list must have a stride of 1 at operand 1 -- `movaz {z1.d,z4.d},za.d\[w10,20\]'
diff --git a/gas/testsuite/gas/aarch64/sme2p1-3-bad.s b/gas/testsuite/gas/aarch64/sme2p1-3-bad.s
new file mode 100644
index 0000000..cec5987
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2p1-3-bad.s
@@ -0,0 +1,20 @@
+/* MOVAZ (array to vector, two registers). */
+movaz {z0.s - z1.s} , za.d[w8, 0, vgx2]
+movaz {z30.h - z31.h} , za.d[w8, 0, vgx2]
+movaz {z0.b - z1.b} , za.b[w11, 0, vgx2]
+movaz {z0.d - z1.d} , za.d[w13, 7, vgx2]
+movaz {z30.d - z31.d} , za.d[w11, 15, vgx2]
+movaz {z14.d - z15.d} , za.d[w9, 4, vgx3]
+movaz {z6.d - z7.d} , za.d[w10]
+movaz {z2.d - z4.d} , za.d[w10 6]
+
+/* MOVAZ (array to vector, four registers). */
+movaz {z0.s - z3.s} , za.d[w8, 0, vgx4]
+movaz {z28.h - z31.h} , za.d[w8, 0, vgx4]
+movaz {z0.b - z3.b} , za.b[w11, 0, vgx4]
+movaz {z0.d - z3.d} , za.d[w14, 7, vgx4]
+movaz {z28.d - z31.d} , za.d[w11, 11, vgx3]
+movaz {z14.d - z17.d} , za.d[w9, 4, vgx4]
+movaz {z4.d - z8.d} , za.d[w10, 3, vgx4]
+movaz {z0.d, z3.d} , za.d[w10]
+movaz {z1.d, z4.d} , za.d[w10 , 20]
diff --git a/gas/testsuite/gas/aarch64/sme2p1-3.d b/gas/testsuite/gas/aarch64/sme2p1-3.d
new file mode 100644
index 0000000..f9f20eb
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2p1-3.d
@@ -0,0 +1,26 @@
+#name: Test of SME2.1 movaz array to vector instructions.
+#as: -march=armv9.4-a+sme2p1
+#objdump: -dr
+
+[^:]+: file format .*
+
+
+[^:]+:
+
+[^:]+:
+.*: c0060a00 movaz {z0.d-z1.d}, za.d\[w8, 0, vgx2\]
+.*: c0060a1e movaz {z30.d-z31.d}, za.d\[w8, 0, vgx2\]
+.*: c0066a00 movaz {z0.d-z1.d}, za.d\[w11, 0, vgx2\]
+.*: c0060ae0 movaz {z0.d-z1.d}, za.d\[w8, 7, vgx2\]
+.*: c0066afe movaz {z30.d-z31.d}, za.d\[w11, 7, vgx2\]
+.*: c0062a8e movaz {z14.d-z15.d}, za.d\[w9, 4, vgx2\]
+.*: c0064a66 movaz {z6.d-z7.d}, za.d\[w10, 3, vgx2\]
+.*: c0064ac2 movaz {z2.d-z3.d}, za.d\[w10, 6, vgx2\]
+.*: c0060e00 movaz {z0.d-z3.d}, za.d\[w8, 0, vgx4\]
+.*: c0060e1c movaz {z28.d-z31.d}, za.d\[w8, 0, vgx4\]
+.*: c0066e00 movaz {z0.d-z3.d}, za.d\[w11, 0, vgx4\]
+.*: c0060ee0 movaz {z0.d-z3.d}, za.d\[w8, 7, vgx4\]
+.*: c0066efc movaz {z28.d-z31.d}, za.d\[w11, 7, vgx4\]
+.*: c0062e8c movaz {z12.d-z15.d}, za.d\[w9, 4, vgx4\]
+.*: c0064e64 movaz {z4.d-z7.d}, za.d\[w10, 3, vgx4\]
+.*: c0064ec0 movaz {z0.d-z3.d}, za.d\[w10, 6, vgx4\]
diff --git a/gas/testsuite/gas/aarch64/sme2p1-3.s b/gas/testsuite/gas/aarch64/sme2p1-3.s
new file mode 100644
index 0000000..3a822da
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2p1-3.s
@@ -0,0 +1,19 @@
+/* MOVAZ (array to vector, two registers). */
+movaz {z0.d - z1.d} , za.d[w8, 0, vgx2]
+movaz {z30.d - z31.d} , za.d[w8, 0, vgx2]
+movaz {z0.d - z1.d} , za.d[w11, 0, vgx2]
+movaz {z0.d - z1.d} , za.d[w8, 7, vgx2]
+movaz {z30.d - z31.d} , za.d[w11, 7, vgx2]
+movaz {z14.d - z15.d} , za.d[w9, 4, vgx2]
+movaz {z6.d - z7.d} , za.d[w10, 3, vgx2]
+movaz {z2.d - z3.d} , za.d[w10, 6]
+
+/* MOVAZ (array to vector, four registers). */
+movaz {z0.d - z3.d} , za.d[w8, 0, vgx4]
+movaz {z28.d - z31.d} , za.d[w8, 0, vgx4]
+movaz {z0.d - z3.d} , za.d[w11, 0, vgx4]
+movaz {z0.d - z3.d} , za.d[w8, 7, vgx4]
+movaz {z28.d - z31.d} , za.d[w11, 7, vgx4]
+movaz {z12.d - z15.d} , za.d[w9, 4, vgx4]
+movaz {z4.d - z7.d} , za.d[w10, 3, vgx4]
+movaz {z0.d - z3.d} , za.d[w10, 6]
diff --git a/gas/testsuite/gas/aarch64/sme2p1-4-bad.d b/gas/testsuite/gas/aarch64/sme2p1-4-bad.d
new file mode 100644
index 0000000..4656ad6
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2p1-4-bad.d
@@ -0,0 +1,4 @@
+#name: Negative test of SME2.1 MOVAZ (tile to vector, single) instructions.
+#as: -march=armv9.4-a+sme2p1
+#source: sme2p1-4-bad.s
+#error_output: sme2p1-4-bad.l
diff --git a/gas/testsuite/gas/aarch64/sme2p1-4-bad.l b/gas/testsuite/gas/aarch64/sme2p1-4-bad.l
new file mode 100644
index 0000000..fd35f4f2
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2p1-4-bad.l
@@ -0,0 +1,76 @@
+.*: Assembler messages:
+.*: Error: operand mismatch -- `movaz z0.b,za0h.s\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z0.b, za0h.b \[w12, 0\]
+.*: Error: operand mismatch -- `movaz z31.d,za0h.b\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z31.b, za0h.b \[w12, 0\]
+.*: Error: operand mismatch -- `movaz z0.b,za0v.h\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z0.b, za0v.b \[w12, 0\]
+.*: Error: expected a ZA tile slice at operand 2 -- `movaz z0.q,za0vh.b\[w15,0\]'
+.*: Error: operand mismatch -- `movaz z0.s,za0h.b\[w10,15\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z0.b, za0h.b \[w10, 15\]
+.*: Error: ZA tile number out of range at operand 2 -- `movaz z31.b,za1v.b\[w25,15\]'
+.*: Error: immediate offset out of range 0 to 15 at operand 2 -- `movaz z15.b,za0h.b\[w13,31\]'
+.*: Error: missing immediate offset at operand 2 -- `movaz z7.h,za0h.b\[w14\]'
+.*: Error: operand mismatch -- `movaz z0.s,za0h.h\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z0.h, za0h.h \[w12, 0\]
+.*: Error: operand mismatch -- `movaz z31.h,za0h.d\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z31.h, za0h.h \[w12, 0\]
+.*: Error: ZA tile number out of range at operand 2 -- `movaz z0.h,za1h.b\[w12,0\]'
+.*: Error: expected a ZA tile slice at operand 2 -- `movaz z0.q,za0vh.h\[w12,0\]'
+.*: Error: expected a selection register in the range w12-w15 at operand 2 -- `movaz z0.h,za0h.h\[w17,0\]'
+.*: Error: immediate offset out of range 0 to 15 at operand 2 -- `movaz z0.h,za0h.h\[w12,27\]'
+.*: Error: ZA tile number out of range at operand 2 -- `movaz z31.h,za3v.h\[w15,7\]'
+.*: Error: expected a selection register in the range w12-w15 at operand 2 -- `movaz z15.h,za0h.h\[w2,3\]'
+.*: Error: missing immediate offset at operand 2 -- `movaz z7.d,za0h.h\[w14\]'
+.*: Error: operand mismatch -- `movaz z0.b,za0h.s\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z0.b, za0h.b \[w12, 0\]
+.*: Error: operand mismatch -- `movaz z31.s,za0h.h\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z31.h, za0h.h \[w12, 0\]
+.*: Error: operand mismatch -- `movaz z0.s,za3h\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z0.s, za3h.s \[w12, 0\]
+.*: Error: expected a selection register in the range w12-w15 at operand 2 -- `movaz z0.s,za0v.s\[w1,0\]'
+.*: Error: operand mismatch -- `movaz z0.q,za0h.s\[w25,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z0.s, za0h.s \[w25, 0\]
+.*: Error: ZA tile number out of range at operand 2 -- `movaz z31.s,za5v.s\[w15,3\]'
+.*: Error: missing immediate offset at operand 2 -- `movaz z15.s,za1h.s\[w13\]'
+.*: Error: operand mismatch -- `movaz z7.b,za2h.d\[w14,1\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z7.b, za2h.b \[w14, 1\]
+.*: Error: operand mismatch -- `movaz z0.b,za0h.d\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z0.b, za0h.b \[w12, 0\]
+.*: Error: operand mismatch -- `movaz z31.d,za0h.h\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z31.h, za0h.h \[w12, 0\]
+.*: Error: ZA tile number out of range at operand 2 -- `movaz z0.d,za7h.s\[w12,0\]'
+.*: Error: operand mismatch -- `movaz z0.s,za0v.q\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z0.s, za0v.s \[w12, 0\]
+.*: Error: expected a ZA tile slice at operand 2 -- `movaz z0.d,za0vh.d\[w15,0\]'
+.*: Error: ZA tile number out of range at operand 2 -- `movaz z31.d,za11v.d\[w1,1\]'
+.*: Error: expected a selection register in the range w12-w15 at operand 2 -- `movaz z15.d,za3h.d\[w23,0\]'
+.*: Error: missing immediate offset at operand 2 -- `movaz z7.s,za4h.q\[w14\]'
+.*: Error: operand mismatch -- `movaz z0.b,za0h.q\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z0.b, za0h.b \[w12, 0\]
+.*: Error: expected a ZA tile slice at operand 2 -- `movaz z31.q,za0vh.s\[w12,0\]'
+.*: Error: ZA tile number out of range at operand 2 -- `movaz z0.q,za15h.h\[w20,0\]'
+.*: Error: operand mismatch -- `movaz z0.s,za0v.d\[w12,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z0.s, za0v.s \[w12, 0\]
+.*: Error: expected a selection register in the range w12-w15 at operand 2 -- `movaz z0.q,za0h.q\[w1,0\]'
+.*: Error: operand mismatch -- `movaz z31.q,za15v\[w15,0\]'
+.*: Info: did you mean this\?
+.*: Info: movaz z31.q, za15v.q \[w15, 0\]
+.*: Error: expected a ZA tile slice at operand 2 -- `movaz z5.q,za27.q\[w13,0\]'
+.*: Error: missing immediate offset at operand 2 -- `movaz z7.q,za6h\[w14\]'
diff --git a/gas/testsuite/gas/aarch64/sme2p1-4-bad.s b/gas/testsuite/gas/aarch64/sme2p1-4-bad.s
new file mode 100644
index 0000000..1a13191
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2p1-4-bad.s
@@ -0,0 +1,48 @@
+/* MOVAZ (tile to vector, single). */
+movaz z0.b, za0h.s[w12, 0]
+movaz z31.d, za0h.b[w12, 0]
+movaz z0.b, za0v.h[w12, 0]
+movaz z0.q, za0vh.b[w15, 0]
+movaz z0.s, za0h.b[w10, 15]
+movaz z31.b, za1v.b[w25, 15]
+movaz z15.b, za0h.b[w13, 31]
+movaz z7.h, za0h.b[w14]
+
+movaz z0.s, za0h.h[w12, 0]
+movaz z31.h, za0h.d[w12, 0]
+movaz z0.h, za1h.b[w12, 0]
+movaz z0.q, za0vh.h[w12, 0]
+movaz z0.h, za0h.h[w17, 0]
+movaz z0.h, za0h.h[w12, 27]
+movaz z31.h, za3v.h[w15, 7]
+movaz z15.h, za0h.h[w2, 3]
+movaz z7.d, za0h.h[w14]
+
+movaz z0.b, za0h.s[w12, 0]
+movaz z31.s, za0h.h[w12, 0]
+movaz z0.s, za3h[w12, 0]
+movaz z0.s, za0v.s[w1, 0]
+movaz z0.q, za0h.s[w25, 0]
+movaz z0.s, za0h.s[w12, 13]
+movaz z31.s, za5v.s[w15, 3]
+movaz z15.s, za1h.s[w13]
+movaz z7.b, za2h.d[w14, 1]
+
+movaz z0.b, za0h.d[w12, 0]
+movaz z31.d, za0h.h[w12, 0]
+movaz z0.d, za7h.s[w12, 0]
+movaz z0.s, za0v.q[w12, 0]
+movaz z0.d, za0vh.d[w15, 0]
+movaz z0.d, za0h.d[w12, 1]
+movaz z31.d, za11v.d[w1, 1]
+movaz z15.d, za3h.d[w23, 0]
+movaz z7.s, za4h.q[w14]
+
+movaz z0.b, za0h.q[w12, 0]
+movaz z31.q, za0vh.s[w12, 0]
+movaz z0.q, za15h.h[w20, 0]
+movaz z0.s, za0v.d[w12, 0]
+movaz z0.q, za0h.q[w1, 0]
+movaz z31.q, za15v[w15, 0]
+movaz z5.q, za27.q[w13, 0]
+movaz z7.q, za6h[w14]
diff --git a/gas/testsuite/gas/aarch64/sme2p1-4.d b/gas/testsuite/gas/aarch64/sme2p1-4.d
new file mode 100644
index 0000000..add2708
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2p1-4.d
@@ -0,0 +1,53 @@
+#name: Test of SME2.1 MOVAZ (tile to vector, single) instructions.
+#as: -march=armv9.4-a+sme2p1
+#objdump: -dr
+
+[^:]+: file format .*
+
+
+[^:]+:
+
+[^:]+:
+.*: c0020200 movaz z0.b, za0h.b \[w12, 0\]
+.*: c002021f movaz z31.b, za0h.b \[w12, 0\]
+.*: c0028200 movaz z0.b, za0v.b \[w12, 0\]
+.*: c0026200 movaz z0.b, za0h.b \[w15, 0\]
+.*: c00203e0 movaz z0.b, za0h.b \[w12, 15\]
+.*: c002e3ff movaz z31.b, za0v.b \[w15, 15\]
+.*: c002226f movaz z15.b, za0h.b \[w13, 3\]
+.*: c0024227 movaz z7.b, za0h.b \[w14, 1\]
+.*: c0420200 movaz z0.h, za0h.h \[w12, 0\]
+.*: c042021f movaz z31.h, za0h.h \[w12, 0\]
+.*: c0420300 movaz z0.h, za1h.h \[w12, 0\]
+.*: c0428200 movaz z0.h, za0v.h \[w12, 0\]
+.*: c0426200 movaz z0.h, za0h.h \[w15, 0\]
+.*: c04202e0 movaz z0.h, za0h.h \[w12, 7\]
+.*: c042e3ff movaz z31.h, za1v.h \[w15, 7\]
+.*: c042226f movaz z15.h, za0h.h \[w13, 3\]
+.*: c0424227 movaz z7.h, za0h.h \[w14, 1\]
+.*: c0820200 movaz z0.s, za0h.s \[w12, 0\]
+.*: c082021f movaz z31.s, za0h.s \[w12, 0\]
+.*: c0820380 movaz z0.s, za3h.s \[w12, 0\]
+.*: c0828200 movaz z0.s, za0v.s \[w12, 0\]
+.*: c0826200 movaz z0.s, za0h.s \[w15, 0\]
+.*: c0820260 movaz z0.s, za0h.s \[w12, 3\]
+.*: c082e3ff movaz z31.s, za3v.s \[w15, 3\]
+.*: c08222cf movaz z15.s, za1h.s \[w13, 2\]
+.*: c0824327 movaz z7.s, za2h.s \[w14, 1\]
+.*: c0c20200 movaz z0.d, za0h.d \[w12, 0\]
+.*: c0c2021f movaz z31.d, za0h.d \[w12, 0\]
+.*: c0c203c0 movaz z0.d, za7h.d \[w12, 0\]
+.*: c0c28200 movaz z0.d, za0v.d \[w12, 0\]
+.*: c0c26200 movaz z0.d, za0h.d \[w15, 0\]
+.*: c0c20220 movaz z0.d, za0h.d \[w12, 1\]
+.*: c0c2e3ff movaz z31.d, za7v.d \[w15, 1\]
+.*: c0c222cf movaz z15.d, za3h.d \[w13, 0\]
+.*: c0c24327 movaz z7.d, za4h.d \[w14, 1\]
+.*: c0c30200 movaz z0.q, za0h.q \[w12, 0\]
+.*: c0c3021f movaz z31.q, za0h.q \[w12, 0\]
+.*: c0c303e0 movaz z0.q, za15h.q \[w12, 0\]
+.*: c0c38200 movaz z0.q, za0v.q \[w12, 0\]
+.*: c0c36200 movaz z0.q, za0h.q \[w15, 0\]
+.*: c0c3e3ff movaz z31.q, za15v.q \[w15, 0\]
+.*: c0c322ef movaz z15.q, za7h.q \[w13, 0\]
+.*: c0c342c7 movaz z7.q, za6h.q \[w14, 0\]
diff --git a/gas/testsuite/gas/aarch64/sme2p1-4.s b/gas/testsuite/gas/aarch64/sme2p1-4.s
new file mode 100644
index 0000000..5c48af4
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2p1-4.s
@@ -0,0 +1,48 @@
+/* MOVAZ (tile to vector, single). */
+movaz z0.b, za0h.b[w12, 0]
+movaz z31.b, za0h.b[w12, 0]
+movaz z0.b, za0v.b[w12, 0]
+movaz z0.b, za0h.b[w15, 0]
+movaz z0.b, za0h.b[w12, 15]
+movaz z31.b, za0v.b[w15, 15]
+movaz z15.b, za0h.b[w13, 3]
+movaz z7.b, za0h.b[w14, 1]
+
+movaz z0.h, za0h.h[w12, 0]
+movaz z31.h, za0h.h[w12, 0]
+movaz z0.h, za1h.h[w12, 0]
+movaz z0.h, za0v.h[w12, 0]
+movaz z0.h, za0h.h[w15, 0]
+movaz z0.h, za0h.h[w12, 7]
+movaz z31.h, za1v.h[w15, 7]
+movaz z15.h, za0h.h[w13, 3]
+movaz z7.h, za0h.h[w14, 1]
+
+movaz z0.s, za0h.s[w12, 0]
+movaz z31.s, za0h.s[w12, 0]
+movaz z0.s, za3h.s[w12, 0]
+movaz z0.s, za0v.s[w12, 0]
+movaz z0.s, za0h.s[w15, 0]
+movaz z0.s, za0h.s[w12, 3]
+movaz z31.s, za3v.s[w15, 3]
+movaz z15.s, za1h.s[w13, 2]
+movaz z7.s, za2h.s[w14, 1]
+
+movaz z0.d, za0h.d[w12, 0]
+movaz z31.d, za0h.d[w12, 0]
+movaz z0.d, za7h.d[w12, 0]
+movaz z0.d, za0v.d[w12, 0]
+movaz z0.d, za0h.d[w15, 0]
+movaz z0.d, za0h.d[w12, 1]
+movaz z31.d, za7v.d[w15, 1]
+movaz z15.d, za3h.d[w13, 0]
+movaz z7.d, za4h.d[w14, 1]
+
+movaz z0.q, za0h.q[w12, 0]
+movaz z31.q, za0h.q[w12, 0]
+movaz z0.q, za15h.q[w12, 0]
+movaz z0.q, za0v.q[w12, 0]
+movaz z0.q, za0h.q[w15, 0]
+movaz z31.q, za15v.q[w15, 0]
+movaz z15.q, za7h.q[w13, 0]
+movaz z7.q, za6h.q[w14, 0]