1 // RUN
: not llvm-mc
-triple
=aarch64
-show-encoding
-mattr
=+sme2p2
2>&1 < %s| FileCheck
%s
3 // --------------------------------------------------------------------------//
6 stmopa za4.s
, {z30.b-z31.
b}, z31.
b, z31
[3]
7 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
8 // CHECK-NEXT
: stmopa za4.s
, {z30.b-z31.
b}, z31.
b, z31
[3]
9 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
11 stmopa za4.s
, {z30.h-z31.h
}, z31.h
, z31
[3]
12 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
13 // CHECK-NEXT
: stmopa za4.s
, {z30.h-z31.h
}, z31.h
, z31
[3]
14 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
16 // --------------------------------------------------------------------------//
17 // Invalid vector list operand
19 stmopa za3.s
, {z29.b-z30.
b}, z31.
b, z31
[3]
20 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: Invalid vector list
, expected list with
2 consecutive SVE vectors
, where the first vector is
a multiple of
2 and with matching element types
21 // CHECK-NEXT
: stmopa za3.s
, {z29.b-z30.
b}, z31.
b, z31
[3]
22 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
24 stmopa za3.s
, {z29.h-z30.h
}, z31.h
, z31
[3]
25 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: Invalid vector list
, expected list with
2 consecutive SVE vectors
, where the first vector is
a multiple of
2 and with matching element types
26 // CHECK-NEXT
: stmopa za3.s
, {z29.h-z30.h
}, z31.h
, z31
[3]
27 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
29 // --------------------------------------------------------------------------//
30 // Invalid ZK register
31 stmopa za3.s
, {z28.b-z29.
b}, z31.
b, z19
[3]
32 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid restricted vector register
, expected register in z20.
.z23 or z28..z31
33 // CHECK-NEXT
: stmopa za3.s
, {z28.b-z29.
b}, z31.
b, z19
[3]
34 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
36 stmopa za3.s
, {z28.b-z29.
b}, z31.
b, z24
[3]
37 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid restricted vector register
, expected register in z20.
.z23 or z28..z31
38 // CHECK-NEXT
: stmopa za3.s
, {z28.b-z29.
b}, z31.
b, z24
[3]
39 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
41 stmopa za3.s
, {z28.b-z29.
b}, z31.
b, z27
[3]
42 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid restricted vector register
, expected register in z20.
.z23 or z28..z31
43 // CHECK-NEXT
: stmopa za3.s
, {z28.b-z29.
b}, z31.
b, z27
[3]
44 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
46 stmopa za3.s
, {z28.h-z29.h
}, z31.h
, z19
[3]
47 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid restricted vector register
, expected register in z20.
.z23 or z28..z31
48 // CHECK-NEXT
: stmopa za3.s
, {z28.h-z29.h
}, z31.h
, z19
[3]
49 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
51 stmopa za3.s
, {z28.h-z29.h
}, z31.h
, z24
[3]
52 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid restricted vector register
, expected register in z20.
.z23 or z28..z31
53 // CHECK-NEXT
: stmopa za3.s
, {z28.h-z29.h
}, z31.h
, z24
[3]
54 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
56 stmopa za3.s
, {z28.h-z29.h
}, z31.h
, z27
[3]
57 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid restricted vector register
, expected register in z20.
.z23 or z28..z31
58 // CHECK-NEXT
: stmopa za3.s
, {z28.h-z29.h
}, z31.h
, z27
[3]
59 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
61 // --------------------------------------------------------------------------//
64 stmopa za3.s
, {z28.b-z29.
b}, z31.
b, z20
[4]
65 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 3].
66 // CHECK-NEXT
: stmopa za3.s
, {z28.b-z29.
b}, z31.
b, z20
[4]
67 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
69 stmopa za3.s
, {z28.h-z29.h
}, z31.h
, z20
[4]
70 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: vector lane must
be an integer in range
[0, 3].
71 // CHECK-NEXT
: stmopa za3.s
, {z28.h-z29.h
}, z31.h
, z20
[4]
72 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
74 // --------------------------------------------------------------------------//
75 // Invalid ZPR type suffix
77 stmopa za0.h
, {z28.b-z29.
b}, z31.
b, z20
[2]
78 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid matrix operand
, expected za
[0-3].s
79 // CHECK-NEXT
: stmopa za0.h
, {z28.b-z29.
b}, z31.
b, z20
[2]
80 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
82 stmopa za0.h
, {z28.h-z29.h
}, z31.h
, z20
[2]
83 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid matrix operand
, expected za
[0-3].s
84 // CHECK-NEXT
: stmopa za0.h
, {z28.h-z29.h
}, z31.h
, z20
[2]
85 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
87 stmopa za3.s
, {z28.s-z29.s
}, z31.s
, z20
[2]
88 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid operand for instruction
89 // CHECK-NEXT
: stmopa za3.s
, {z28.s-z29.s
}, z31.s
, z20
[2]
90 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
92 stmopa za3.d
, {z28.s-z29.s
}, z31.s
, z20
[3]
93 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid matrix operand
, expected za
[0-3].s
94 // CHECK-NEXT
: stmopa za3.d
, {z28.s-z29.s
}, z31.s
, z20
[3]
95 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}:
97 stmopa za3.d
, {z28.h-z29.h
}, z31.h
, z20
[3]
98 // CHECK
: [[@LINE-
1]]:{{[0-9]+}}: error
: invalid matrix operand
, expected za
[0-3].s
99 // CHECK-NEXT
: stmopa za3.d
, {z28.h-z29.h
}, z31.h
, z20
[3]
100 // CHECK-
NOT: [[@LINE-
1]]:{{[0-9]+}}: