1// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme < %s \
2// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
4// RUN:        | FileCheck %s --check-prefix=CHECK-ERROR
5// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme < %s \
6// RUN:        | llvm-objdump -d --mattr=+sme - | FileCheck %s --check-prefix=CHECK-INST
7// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sme < %s \
8// RUN:        | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
9// Disassemble encoding and check the re-encoding (-show-encoding) matches.
10// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme < %s \
11// RUN:        | sed '/.text/d' | sed 's/.*encoding: //g' \
12// RUN:        | llvm-mc -triple=aarch64 -mattr=+sme -disassemble -show-encoding \
13// RUN:        | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
14
15// --------------------------------------------------------------------------//
16// Widening
17
18fmopa   za0.s, p0/m, p0/m, z0.h, z0.h
19// CHECK-INST: fmopa   za0.s, p0/m, p0/m, z0.h, z0.h
20// CHECK-ENCODING: [0x00,0x00,0xa0,0x81]
21// CHECK-ERROR: instruction requires: sme
22// CHECK-UNKNOWN: 00 00 a0 81 <unknown>
23
24fmopa   za1.s, p5/m, p2/m, z10.h, z21.h
25// CHECK-INST: fmopa   za1.s, p5/m, p2/m, z10.h, z21.h
26// CHECK-ENCODING: [0x41,0x55,0xb5,0x81]
27// CHECK-ERROR: instruction requires: sme
28// CHECK-UNKNOWN: 41 55 b5 81 <unknown>
29
30fmopa   za3.s, p3/m, p7/m, z13.h, z8.h
31// CHECK-INST: fmopa   za3.s, p3/m, p7/m, z13.h, z8.h
32// CHECK-ENCODING: [0xa3,0xed,0xa8,0x81]
33// CHECK-ERROR: instruction requires: sme
34// CHECK-UNKNOWN: a3 ed a8 81 <unknown>
35
36fmopa   za3.s, p7/m, p7/m, z31.h, z31.h
37// CHECK-INST: fmopa   za3.s, p7/m, p7/m, z31.h, z31.h
38// CHECK-ENCODING: [0xe3,0xff,0xbf,0x81]
39// CHECK-ERROR: instruction requires: sme
40// CHECK-UNKNOWN: e3 ff bf 81 <unknown>
41
42fmopa   za1.s, p3/m, p0/m, z17.h, z16.h
43// CHECK-INST: fmopa   za1.s, p3/m, p0/m, z17.h, z16.h
44// CHECK-ENCODING: [0x21,0x0e,0xb0,0x81]
45// CHECK-ERROR: instruction requires: sme
46// CHECK-UNKNOWN: 21 0e b0 81 <unknown>
47
48fmopa   za1.s, p1/m, p4/m, z1.h, z30.h
49// CHECK-INST: fmopa   za1.s, p1/m, p4/m, z1.h, z30.h
50// CHECK-ENCODING: [0x21,0x84,0xbe,0x81]
51// CHECK-ERROR: instruction requires: sme
52// CHECK-UNKNOWN: 21 84 be 81 <unknown>
53
54fmopa   za0.s, p5/m, p2/m, z19.h, z20.h
55// CHECK-INST: fmopa   za0.s, p5/m, p2/m, z19.h, z20.h
56// CHECK-ENCODING: [0x60,0x56,0xb4,0x81]
57// CHECK-ERROR: instruction requires: sme
58// CHECK-UNKNOWN: 60 56 b4 81 <unknown>
59
60fmopa   za0.s, p6/m, p0/m, z12.h, z2.h
61// CHECK-INST: fmopa   za0.s, p6/m, p0/m, z12.h, z2.h
62// CHECK-ENCODING: [0x80,0x19,0xa2,0x81]
63// CHECK-ERROR: instruction requires: sme
64// CHECK-UNKNOWN: 80 19 a2 81 <unknown>
65
66fmopa   za1.s, p2/m, p6/m, z1.h, z26.h
67// CHECK-INST: fmopa   za1.s, p2/m, p6/m, z1.h, z26.h
68// CHECK-ENCODING: [0x21,0xc8,0xba,0x81]
69// CHECK-ERROR: instruction requires: sme
70// CHECK-UNKNOWN: 21 c8 ba 81 <unknown>
71
72fmopa   za1.s, p2/m, p0/m, z22.h, z30.h
73// CHECK-INST: fmopa   za1.s, p2/m, p0/m, z22.h, z30.h
74// CHECK-ENCODING: [0xc1,0x0a,0xbe,0x81]
75// CHECK-ERROR: instruction requires: sme
76// CHECK-UNKNOWN: c1 0a be 81 <unknown>
77
78fmopa   za2.s, p5/m, p7/m, z9.h, z1.h
79// CHECK-INST: fmopa   za2.s, p5/m, p7/m, z9.h, z1.h
80// CHECK-ENCODING: [0x22,0xf5,0xa1,0x81]
81// CHECK-ERROR: instruction requires: sme
82// CHECK-UNKNOWN: 22 f5 a1 81 <unknown>
83
84fmopa   za3.s, p2/m, p5/m, z12.h, z11.h
85// CHECK-INST: fmopa   za3.s, p2/m, p5/m, z12.h, z11.h
86// CHECK-ENCODING: [0x83,0xa9,0xab,0x81]
87// CHECK-ERROR: instruction requires: sme
88// CHECK-UNKNOWN: 83 a9 ab 81 <unknown>
89
90// --------------------------------------------------------------------------//
91// Non-widening (single-precision)
92
93fmopa   za0.s, p0/m, p0/m, z0.s, z0.s
94// CHECK-INST: fmopa   za0.s, p0/m, p0/m, z0.s, z0.s
95// CHECK-ENCODING: [0x00,0x00,0x80,0x80]
96// CHECK-ERROR: instruction requires: sme
97// CHECK-UNKNOWN: 00 00 80 80 <unknown>
98
99fmopa   za1.s, p5/m, p2/m, z10.s, z21.s
100// CHECK-INST: fmopa   za1.s, p5/m, p2/m, z10.s, z21.s
101// CHECK-ENCODING: [0x41,0x55,0x95,0x80]
102// CHECK-ERROR: instruction requires: sme
103// CHECK-UNKNOWN: 41 55 95 80 <unknown>
104
105fmopa   za3.s, p3/m, p7/m, z13.s, z8.s
106// CHECK-INST: fmopa   za3.s, p3/m, p7/m, z13.s, z8.s
107// CHECK-ENCODING: [0xa3,0xed,0x88,0x80]
108// CHECK-ERROR: instruction requires: sme
109// CHECK-UNKNOWN: a3 ed 88 80 <unknown>
110
111fmopa   za3.s, p7/m, p7/m, z31.s, z31.s
112// CHECK-INST: fmopa   za3.s, p7/m, p7/m, z31.s, z31.s
113// CHECK-ENCODING: [0xe3,0xff,0x9f,0x80]
114// CHECK-ERROR: instruction requires: sme
115// CHECK-UNKNOWN: e3 ff 9f 80 <unknown>
116
117fmopa   za1.s, p3/m, p0/m, z17.s, z16.s
118// CHECK-INST: fmopa   za1.s, p3/m, p0/m, z17.s, z16.s
119// CHECK-ENCODING: [0x21,0x0e,0x90,0x80]
120// CHECK-ERROR: instruction requires: sme
121// CHECK-UNKNOWN: 21 0e 90 80 <unknown>
122
123fmopa   za1.s, p1/m, p4/m, z1.s, z30.s
124// CHECK-INST: fmopa   za1.s, p1/m, p4/m, z1.s, z30.s
125// CHECK-ENCODING: [0x21,0x84,0x9e,0x80]
126// CHECK-ERROR: instruction requires: sme
127// CHECK-UNKNOWN: 21 84 9e 80 <unknown>
128
129fmopa   za0.s, p5/m, p2/m, z19.s, z20.s
130// CHECK-INST: fmopa   za0.s, p5/m, p2/m, z19.s, z20.s
131// CHECK-ENCODING: [0x60,0x56,0x94,0x80]
132// CHECK-ERROR: instruction requires: sme
133// CHECK-UNKNOWN: 60 56 94 80 <unknown>
134
135fmopa   za0.s, p6/m, p0/m, z12.s, z2.s
136// CHECK-INST: fmopa   za0.s, p6/m, p0/m, z12.s, z2.s
137// CHECK-ENCODING: [0x80,0x19,0x82,0x80]
138// CHECK-ERROR: instruction requires: sme
139// CHECK-UNKNOWN: 80 19 82 80 <unknown>
140
141fmopa   za1.s, p2/m, p6/m, z1.s, z26.s
142// CHECK-INST: fmopa   za1.s, p2/m, p6/m, z1.s, z26.s
143// CHECK-ENCODING: [0x21,0xc8,0x9a,0x80]
144// CHECK-ERROR: instruction requires: sme
145// CHECK-UNKNOWN: 21 c8 9a 80 <unknown>
146
147fmopa   za1.s, p2/m, p0/m, z22.s, z30.s
148// CHECK-INST: fmopa   za1.s, p2/m, p0/m, z22.s, z30.s
149// CHECK-ENCODING: [0xc1,0x0a,0x9e,0x80]
150// CHECK-ERROR: instruction requires: sme
151// CHECK-UNKNOWN: c1 0a 9e 80 <unknown>
152
153fmopa   za2.s, p5/m, p7/m, z9.s, z1.s
154// CHECK-INST: fmopa   za2.s, p5/m, p7/m, z9.s, z1.s
155// CHECK-ENCODING: [0x22,0xf5,0x81,0x80]
156// CHECK-ERROR: instruction requires: sme
157// CHECK-UNKNOWN: 22 f5 81 80 <unknown>
158
159fmopa   za3.s, p2/m, p5/m, z12.s, z11.s
160// CHECK-INST: fmopa   za3.s, p2/m, p5/m, z12.s, z11.s
161// CHECK-ENCODING: [0x83,0xa9,0x8b,0x80]
162// CHECK-ERROR: instruction requires: sme
163// CHECK-UNKNOWN: 83 a9 8b 80 <unknown>
164