Fix Windows build by including raw_ostream.h
[oota-llvm.git] / test / MC / AArch64 / neon-2velem.s
1 // RUN: llvm-mc -triple=arm64 -mattr=+neon -show-encoding < %s | FileCheck %s
2
3 // Check that the assembler can handle the documented syntax for AArch64
4
5 //------------------------------------------------------------------------------
6 // Instructions with 2 vectors and an element
7 //------------------------------------------------------------------------------
8
9         mla v0.2s, v1.2s, v2.s[2]
10         mla v0.2s, v1.2s, v22.s[2]
11         mla v3.4s, v8.4s, v2.s[1]
12         mla v3.4s, v8.4s, v22.s[3]
13
14 // CHECK: mla   v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x08,0x82,0x2f]
15 // CHECK: mla   v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x08,0x96,0x2f]
16 // CHECK: mla   v3.4s, v8.4s, v2.s[1]   // encoding: [0x03,0x01,0xa2,0x6f]
17 // CHECK: mla   v3.4s, v8.4s, v22.s[3]  // encoding: [0x03,0x09,0xb6,0x6f]
18
19         mla v0.4h, v1.4h, v2.h[2]
20         mla v0.4h, v1.4h, v15.h[2]
21         mla v0.8h, v1.8h, v2.h[7]
22         mla v0.8h, v1.8h, v14.h[6]
23
24 // CHECK: mla   v0.4h, v1.4h, v2.h[2]   // encoding: [0x20,0x00,0x62,0x2f]
25 // CHECK: mla   v0.4h, v1.4h, v15.h[2]  // encoding: [0x20,0x00,0x6f,0x2f]
26 // CHECK: mla   v0.8h, v1.8h, v2.h[7]   // encoding: [0x20,0x08,0x72,0x6f]
27 // CHECK: mla   v0.8h, v1.8h, v14.h[6]  // encoding: [0x20,0x08,0x6e,0x6f]
28
29         mls v0.2s, v1.2s, v2.s[2]
30         mls v0.2s, v1.2s, v22.s[2]
31         mls v3.4s, v8.4s, v2.s[1]
32         mls v3.4s, v8.4s, v22.s[3]
33
34 // CHECK: mls   v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x48,0x82,0x2f]
35 // CHECK: mls   v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x48,0x96,0x2f]
36 // CHECK: mls   v3.4s, v8.4s, v2.s[1]   // encoding: [0x03,0x41,0xa2,0x6f]
37 // CHECK: mls   v3.4s, v8.4s, v22.s[3]  // encoding: [0x03,0x49,0xb6,0x6f]
38
39         mls v0.4h, v1.4h, v2.h[2]
40         mls v0.4h, v1.4h, v15.h[2]
41         mls v0.8h, v1.8h, v2.h[7]
42         mls v0.8h, v1.8h, v14.h[6]
43
44 // CHECK: mls   v0.4h, v1.4h, v2.h[2]   // encoding: [0x20,0x40,0x62,0x2f]
45 // CHECK: mls   v0.4h, v1.4h, v15.h[2]  // encoding: [0x20,0x40,0x6f,0x2f]
46 // CHECK: mls   v0.8h, v1.8h, v2.h[7]   // encoding: [0x20,0x48,0x72,0x6f]
47 // CHECK: mls   v0.8h, v1.8h, v14.h[6]  // encoding: [0x20,0x48,0x6e,0x6f]
48
49         fmla v0.2s, v1.2s, v2.s[2]
50         fmla v0.2s, v1.2s, v22.s[2]
51         fmla v3.4s, v8.4s, v2.s[1]
52         fmla v3.4s, v8.4s, v22.s[3]
53         fmla v0.2d, v1.2d, v2.d[1]
54         fmla v0.2d, v1.2d, v22.d[1]
55
56 // CHECK: fmla  v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x18,0x82,0x0f]
57 // CHECK: fmla  v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x18,0x96,0x0f]
58 // CHECK: fmla  v3.4s, v8.4s, v2.s[1]   // encoding: [0x03,0x11,0xa2,0x4f]
59 // CHECK: fmla  v3.4s, v8.4s, v22.s[3]  // encoding: [0x03,0x19,0xb6,0x4f]
60 // CHECK: fmla  v0.2d, v1.2d, v2.d[1]   // encoding: [0x20,0x18,0xc2,0x4f]
61 // CHECK: fmla  v0.2d, v1.2d, v22.d[1]  // encoding: [0x20,0x18,0xd6,0x4f]
62
63         fmls v0.2s, v1.2s, v2.s[2]
64         fmls v0.2s, v1.2s, v22.s[2]
65         fmls v3.4s, v8.4s, v2.s[1]
66         fmls v3.4s, v8.4s, v22.s[3]
67         fmls v0.2d, v1.2d, v2.d[1]
68         fmls v0.2d, v1.2d, v22.d[1]
69
70 // CHECK: fmls  v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x58,0x82,0x0f]
71 // CHECK: fmls  v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x58,0x96,0x0f]
72 // CHECK: fmls  v3.4s, v8.4s, v2.s[1]   // encoding: [0x03,0x51,0xa2,0x4f]
73 // CHECK: fmls  v3.4s, v8.4s, v22.s[3]  // encoding: [0x03,0x59,0xb6,0x4f]
74 // CHECK: fmls  v0.2d, v1.2d, v2.d[1]   // encoding: [0x20,0x58,0xc2,0x4f]
75 // CHECK: fmls  v0.2d, v1.2d, v22.d[1]  // encoding: [0x20,0x58,0xd6,0x4f]
76
77         smlal v0.4s, v1.4h, v2.h[2]
78         smlal v0.2d, v1.2s, v2.s[2]
79         smlal v0.2d, v1.2s, v22.s[2]
80         smlal2 v0.4s, v1.8h, v1.h[2]
81         smlal2 v0.2d, v1.4s, v1.s[2]
82         smlal2 v0.2d, v1.4s, v22.s[2]
83
84 // CHECK: smlal v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x20,0x62,0x0f]
85 // CHECK: smlal v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x28,0x82,0x0f]
86 // CHECK: smlal v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x28,0x96,0x0f]
87 // CHECK: smlal2        v0.4s, v1.8h, v1.h[2]   // encoding: [0x20,0x20,0x61,0x4f]
88 // CHECK: smlal2        v0.2d, v1.4s, v1.s[2]   // encoding: [0x20,0x28,0x81,0x4f]
89 // CHECK: smlal2        v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0x28,0x96,0x4f]
90
91         smlsl v0.4s, v1.4h, v2.h[2]
92         smlsl v0.2d, v1.2s, v2.s[2]
93         smlsl v0.2d, v1.2s, v22.s[2]
94         smlsl2 v0.4s, v1.8h, v1.h[2]
95         smlsl2 v0.2d, v1.4s, v1.s[2]
96         smlsl2 v0.2d, v1.4s, v22.s[2]
97
98 // CHECK: smlsl v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x60,0x62,0x0f]
99 // CHECK: smlsl v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x68,0x82,0x0f]
100 // CHECK: smlsl v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x68,0x96,0x0f]
101 // CHECK: smlsl2        v0.4s, v1.8h, v1.h[2]   // encoding: [0x20,0x60,0x61,0x4f]
102 // CHECK: smlsl2        v0.2d, v1.4s, v1.s[2]   // encoding: [0x20,0x68,0x81,0x4f]
103 // CHECK: smlsl2        v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0x68,0x96,0x4f]
104
105         sqdmlal v0.4s, v1.4h, v2.h[2]
106         sqdmlal v0.2d, v1.2s, v2.s[2]
107         sqdmlal v0.2d, v1.2s, v22.s[2]
108         sqdmlal2 v0.4s, v1.8h, v1.h[2]
109         sqdmlal2 v0.2d, v1.4s, v1.s[2]
110         sqdmlal2 v0.2d, v1.4s, v22.s[2]
111
112 // CHECK: sqdmlal       v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x30,0x62,0x0f]
113 // CHECK: sqdmlal       v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x38,0x82,0x0f]
114 // CHECK: sqdmlal       v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x38,0x96,0x0f]
115 // CHECK: sqdmlal2      v0.4s, v1.8h, v1.h[2] // encoding: [0x20,0x30,0x61,0x4f]
116 // CHECK: sqdmlal2      v0.2d, v1.4s, v1.s[2] // encoding: [0x20,0x38,0x81,0x4f]
117 // CHECK: sqdmlal2      v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0x38,0x96,0x4f]
118
119         umlal v0.4s, v1.4h, v2.h[2]
120         umlal v0.2d, v1.2s, v2.s[2]
121         umlal v0.2d, v1.2s, v22.s[2]
122         umlal2 v0.4s, v1.8h, v1.h[2]
123         umlal2 v0.2d, v1.4s, v1.s[2]
124         umlal2 v0.2d, v1.4s, v22.s[2]
125
126 // CHECK: umlal v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x20,0x62,0x2f]
127 // CHECK: umlal v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x28,0x82,0x2f]
128 // CHECK: umlal v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x28,0x96,0x2f]
129 // CHECK: umlal2        v0.4s, v1.8h, v1.h[2]   // encoding: [0x20,0x20,0x61,0x6f]
130 // CHECK: umlal2        v0.2d, v1.4s, v1.s[2]   // encoding: [0x20,0x28,0x81,0x6f]
131 // CHECK: umlal2        v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0x28,0x96,0x6f]
132
133         umlsl v0.4s, v1.4h, v2.h[2]
134         umlsl v0.2d, v1.2s, v2.s[2]
135         umlsl v0.2d, v1.2s, v22.s[2]
136         umlsl2 v0.4s, v1.8h, v1.h[2]
137         umlsl2 v0.2d, v1.4s, v1.s[2]
138         umlsl2 v0.2d, v1.4s, v22.s[2]
139
140 // CHECK: umlsl v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x60,0x62,0x2f]
141 // CHECK: umlsl v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x68,0x82,0x2f]
142 // CHECK: umlsl v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x68,0x96,0x2f]
143 // CHECK: umlsl2        v0.4s, v1.8h, v1.h[2]   // encoding: [0x20,0x60,0x61,0x6f]
144 // CHECK: umlsl2        v0.2d, v1.4s, v1.s[2]   // encoding: [0x20,0x68,0x81,0x6f]
145 // CHECK: umlsl2        v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0x68,0x96,0x6f]
146
147         sqdmlsl v0.4s, v1.4h, v2.h[2]
148         sqdmlsl v0.2d, v1.2s, v2.s[2]
149         sqdmlsl v0.2d, v1.2s, v22.s[2]
150         sqdmlsl2 v0.4s, v1.8h, v1.h[2]
151         sqdmlsl2 v0.2d, v1.4s, v1.s[2]
152         sqdmlsl2 v0.2d, v1.4s, v22.s[2]
153
154 // CHECK: sqdmlsl       v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0x70,0x62,0x0f]
155 // CHECK: sqdmlsl       v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0x78,0x82,0x0f]
156 // CHECK: sqdmlsl       v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0x78,0x96,0x0f]
157 // CHECK: sqdmlsl2      v0.4s, v1.8h, v1.h[2] // encoding: [0x20,0x70,0x61,0x4f]
158 // CHECK: sqdmlsl2      v0.2d, v1.4s, v1.s[2] // encoding: [0x20,0x78,0x81,0x4f]
159 // CHECK: sqdmlsl2      v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0x78,0x96,0x4f]
160
161         mul v0.4h, v1.4h, v2.h[2]
162         mul v0.8h, v1.8h, v2.h[2]
163         mul v0.2s, v1.2s, v2.s[2]
164         mul v0.2s, v1.2s, v22.s[2]
165         mul v0.4s, v1.4s, v2.s[2]
166         mul v0.4s, v1.4s, v22.s[2]
167
168 // CHECK: mul   v0.4h, v1.4h, v2.h[2]   // encoding: [0x20,0x80,0x62,0x0f]
169 // CHECK: mul   v0.8h, v1.8h, v2.h[2]   // encoding: [0x20,0x80,0x62,0x4f]
170 // CHECK: mul   v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x88,0x82,0x0f]
171 // CHECK: mul   v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x88,0x96,0x0f]
172 // CHECK: mul   v0.4s, v1.4s, v2.s[2]   // encoding: [0x20,0x88,0x82,0x4f]
173 // CHECK: mul   v0.4s, v1.4s, v22.s[2]  // encoding: [0x20,0x88,0x96,0x4f]
174
175         fmul v0.2s, v1.2s, v2.s[2]
176         fmul v0.2s, v1.2s, v22.s[2]
177         fmul v0.4s, v1.4s, v2.s[2]
178         fmul v0.4s, v1.4s, v22.s[2]
179         fmul v0.2d, v1.2d, v2.d[1]
180         fmul v0.2d, v1.2d, v22.d[1]
181
182 // CHECK: fmul  v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x98,0x82,0x0f]
183 // CHECK: fmul  v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x98,0x96,0x0f]
184 // CHECK: fmul  v0.4s, v1.4s, v2.s[2]   // encoding: [0x20,0x98,0x82,0x4f]
185 // CHECK: fmul  v0.4s, v1.4s, v22.s[2]  // encoding: [0x20,0x98,0x96,0x4f]
186 // CHECK: fmul  v0.2d, v1.2d, v2.d[1]   // encoding: [0x20,0x98,0xc2,0x4f]
187 // CHECK: fmul  v0.2d, v1.2d, v22.d[1]  // encoding: [0x20,0x98,0xd6,0x4f]
188
189         fmulx v0.2s, v1.2s, v2.s[2]
190         fmulx v0.2s, v1.2s, v22.s[2]
191         fmulx v0.4s, v1.4s, v2.s[2]
192         fmulx v0.4s, v1.4s, v22.s[2]
193         fmulx v0.2d, v1.2d, v2.d[1]
194         fmulx v0.2d, v1.2d, v22.d[1]
195
196 // CHECK: fmulx v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0x98,0x82,0x2f]
197 // CHECK: fmulx v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0x98,0x96,0x2f]
198 // CHECK: fmulx v0.4s, v1.4s, v2.s[2]   // encoding: [0x20,0x98,0x82,0x6f]
199 // CHECK: fmulx v0.4s, v1.4s, v22.s[2]  // encoding: [0x20,0x98,0x96,0x6f]
200 // CHECK: fmulx v0.2d, v1.2d, v2.d[1]   // encoding: [0x20,0x98,0xc2,0x6f]
201 // CHECK: fmulx v0.2d, v1.2d, v22.d[1]  // encoding: [0x20,0x98,0xd6,0x6f]
202
203         smull v0.4s, v1.4h, v2.h[2]
204         smull v0.2d, v1.2s, v2.s[2]
205         smull v0.2d, v1.2s, v22.s[2]
206         smull2 v0.4s, v1.8h, v2.h[2]
207         smull2 v0.2d, v1.4s, v2.s[2]
208         smull2 v0.2d, v1.4s, v22.s[2]
209
210 // CHECK: smull v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0xa0,0x62,0x0f]
211 // CHECK: smull v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0xa8,0x82,0x0f]
212 // CHECK: smull v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0xa8,0x96,0x0f]
213 // CHECK: smull2        v0.4s, v1.8h, v2.h[2]   // encoding: [0x20,0xa0,0x62,0x4f]
214 // CHECK: smull2        v0.2d, v1.4s, v2.s[2]   // encoding: [0x20,0xa8,0x82,0x4f]
215 // CHECK: smull2        v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0xa8,0x96,0x4f]
216
217         umull v0.4s, v1.4h, v2.h[2]
218         umull v0.2d, v1.2s, v2.s[2]
219         umull v0.2d, v1.2s, v22.s[2]
220         umull2 v0.4s, v1.8h, v2.h[2]
221         umull2 v0.2d, v1.4s, v2.s[2]
222         umull2 v0.2d, v1.4s, v22.s[2]
223
224 // CHECK: umull v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0xa0,0x62,0x2f]
225 // CHECK: umull v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0xa8,0x82,0x2f]
226 // CHECK: umull v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0xa8,0x96,0x2f]
227 // CHECK: umull2        v0.4s, v1.8h, v2.h[2]   // encoding: [0x20,0xa0,0x62,0x6f]
228 // CHECK: umull2        v0.2d, v1.4s, v2.s[2]   // encoding: [0x20,0xa8,0x82,0x6f]
229 // CHECK: umull2        v0.2d, v1.4s, v22.s[2]  // encoding: [0x20,0xa8,0x96,0x6f]
230
231         sqdmull v0.4s, v1.4h, v2.h[2]
232         sqdmull v0.2d, v1.2s, v2.s[2]
233         sqdmull v0.2d, v1.2s, v22.s[2]
234         sqdmull2 v0.4s, v1.8h, v2.h[2]
235         sqdmull2 v0.2d, v1.4s, v2.s[2]
236         sqdmull2 v0.2d, v1.4s, v22.s[2]
237
238 // CHECK: sqdmull       v0.4s, v1.4h, v2.h[2]   // encoding: [0x20,0xb0,0x62,0x0f]
239 // CHECK: sqdmull       v0.2d, v1.2s, v2.s[2]   // encoding: [0x20,0xb8,0x82,0x0f]
240 // CHECK: sqdmull       v0.2d, v1.2s, v22.s[2]  // encoding: [0x20,0xb8,0x96,0x0f]
241 // CHECK: sqdmull2      v0.4s, v1.8h, v2.h[2] // encoding: [0x20,0xb0,0x62,0x4f]
242 // CHECK: sqdmull2      v0.2d, v1.4s, v2.s[2] // encoding: [0x20,0xb8,0x82,0x4f]
243 // CHECK: sqdmull2      v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0xb8,0x96,0x4f]
244
245         sqdmulh v0.4h, v1.4h, v2.h[2]
246         sqdmulh v0.8h, v1.8h, v2.h[2]
247         sqdmulh v0.2s, v1.2s, v2.s[2]
248         sqdmulh v0.2s, v1.2s, v22.s[2]
249         sqdmulh v0.4s, v1.4s, v2.s[2]
250         sqdmulh v0.4s, v1.4s, v22.s[2]
251
252 // CHECK: sqdmulh       v0.4h, v1.4h, v2.h[2]   // encoding: [0x20,0xc0,0x62,0x0f]
253 // CHECK: sqdmulh       v0.8h, v1.8h, v2.h[2]   // encoding: [0x20,0xc0,0x62,0x4f]
254 // CHECK: sqdmulh       v0.2s, v1.2s, v2.s[2]   // encoding: [0x20,0xc8,0x82,0x0f]
255 // CHECK: sqdmulh       v0.2s, v1.2s, v22.s[2]  // encoding: [0x20,0xc8,0x96,0x0f]
256 // CHECK: sqdmulh       v0.4s, v1.4s, v2.s[2]   // encoding: [0x20,0xc8,0x82,0x4f]
257 // CHECK: sqdmulh       v0.4s, v1.4s, v22.s[2]  // encoding: [0x20,0xc8,0x96,0x4f]
258
259         sqrdmulh v0.4h, v1.4h, v2.h[2]
260         sqrdmulh v0.8h, v1.8h, v2.h[2]
261         sqrdmulh v0.2s, v1.2s, v2.s[2]
262         sqrdmulh v0.2s, v1.2s, v22.s[2]
263         sqrdmulh v0.4s, v1.4s, v2.s[2]
264         sqrdmulh v0.4s, v1.4s, v22.s[2]
265
266 // CHECK: sqrdmulh      v0.4h, v1.4h, v2.h[2] // encoding: [0x20,0xd0,0x62,0x0f]
267 // CHECK: sqrdmulh      v0.8h, v1.8h, v2.h[2] // encoding: [0x20,0xd0,0x62,0x4f]
268 // CHECK: sqrdmulh      v0.2s, v1.2s, v2.s[2] // encoding: [0x20,0xd8,0x82,0x0f]
269 // CHECK: sqrdmulh      v0.2s, v1.2s, v22.s[2] // encoding: [0x20,0xd8,0x96,0x0f]
270 // CHECK: sqrdmulh      v0.4s, v1.4s, v2.s[2] // encoding: [0x20,0xd8,0x82,0x4f]
271 // CHECK: sqrdmulh      v0.4s, v1.4s, v22.s[2] // encoding: [0x20,0xd8,0x96,0x4f]