[Hexagon] Enabling ASM parsing on Hexagon backend and adding instruction parsing...
[oota-llvm.git] / test / MC / Hexagon / instructions / xtype_alu.s
1 # RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.10.1 XTYPE/ALU
3
4 # Absolute value doubleword
5 # CHECK: d0 c0 94 80
6 r17:16 = abs(r21:20)
7 # CHECK: 91 c0 95 8c
8 r17 = abs(r21)
9 # CHECK: b1 c0 95 8c
10 r17 = abs(r21):sat
11
12 # Add and accumulate
13 # CHECK: ff d1 35 db
14 r17 = add(r21, add(r31, #23))
15 # CHECK: ff d1 b5 db
16 r17 = add(r21, sub(#23, r31))
17 # CHECK: f1 c2 15 e2
18 r17 += add(r21, #23)
19 # CHECK: f1 c2 95 e2
20 r17 -= add(r21, #23)
21 # CHECK: 31 df 15 ef
22 r17 += add(r21, r31)
23 # CHECK: 31 df 95 ef
24 r17 -= add(r21, r31)
25
26 # Add doublewords
27 # CHECK: f0 de 14 d3
28 r17:16 = add(r21:20, r31:30)
29 # CHECK: b0 de 74 d3
30 r17:16 = add(r21:20, r31:30):sat
31 # CHECK: d0 de 74 d3
32 r17:16 = add(r21:20, r31:30):raw:lo
33 # CHECK: f0 de 74 d3
34 r17:16 = add(r21:20, r31:30):raw:hi
35
36 # Add halfword
37 # CHECK: 11 d5 1f d5
38 r17 = add(r21.l, r31.l)
39 # CHECK: 51 d5 1f d5
40 r17 = add(r21.l, r31.h)
41 # CHECK: 91 d5 1f d5
42 r17 = add(r21.l, r31.l):sat
43 # CHECK: d1 d5 1f d5
44 r17 = add(r21.l, r31.h):sat
45 # CHECK: 11 d5 5f d5
46 r17 = add(r21.l, r31.l):<<16
47 # CHECK: 31 d5 5f d5
48 r17 = add(r21.l, r31.h):<<16
49 # CHECK: 51 d5 5f d5
50 r17 = add(r21.h, r31.l):<<16
51 # CHECK: 71 d5 5f d5
52 r17 = add(r21.h, r31.h):<<16
53 # CHECK: 91 d5 5f d5
54 r17 = add(r21.l, r31.l):sat:<<16
55 # CHECK: b1 d5 5f d5
56 r17 = add(r21.l, r31.h):sat:<<16
57 # CHECK: d1 d5 5f d5
58 r17 = add(r21.h, r31.l):sat:<<16
59 # CHECK: f1 d5 5f d5
60 r17 = add(r21.h, r31.h):sat:<<16
61
62 # Add or subtract doublewords with carry
63 # CHECK: 70 de d4 c2
64 r17:16 = add(r21:20, r31:30, p3):carry
65 # CHECK: 70 de f4 c2
66 r17:16 = sub(r21:20, r31:30, p3):carry
67
68 # Logical doublewords
69 # CHECK: 90 c0 94 80
70 r17:16 = not(r21:20)
71 # CHECK: 10 de f4 d3
72 r17:16 = and(r21:20, r31:30)
73 # CHECK: 30 d4 fe d3
74 r17:16 = and(r21:20, ~r31:30)
75 # CHECK: 50 de f4 d3
76 r17:16 = or(r21:20, r31:30)
77 # CHECK: 70 d4 fe d3
78 r17:16 = or(r21:20, ~r31:30)
79 # CHECK: 90 de f4 d3
80 r17:16 = xor(r21:20, r31:30)
81
82 # Logical-logical doublewords
83 # CHECK: 10 de 94 ca
84 r17:16 ^= xor(r21:20, r31:30)
85
86 # Logical-logical words
87 # CHECK: f1 c3 15 da
88 r17 |= and(r21, #31)
89 # CHECK: f5 c3 51 da
90 r17 = or(r21, and(r17, #31))
91 # CHECK: f1 c3 95 da
92 r17 |= or(r21, #31)
93 # CHECK: 11 df 35 ef
94 r17 |= and(r21, ~r31)
95 # CHECK: 31 df 35 ef
96 r17 &= and(r21, ~r31)
97 # CHECK: 51 df 35 ef
98 r17 ^= and(r21, ~r31)
99 # CHECK: 11 df 55 ef
100 r17 &= and(r21, r31)
101 # CHECK: 31 df 55 ef
102 r17 &= or(r21, r31)
103 # CHECK: 51 df 55 ef
104 r17 &= xor(r21, r31)
105 # CHECK: 71 df 55 ef
106 r17 |= and(r21, r31)
107 # CHECK: 71 df 95 ef
108 r17 ^= xor(r21, r31)
109 # CHECK: 11 df d5 ef
110 r17 |= or(r21, r31)
111 # CHECK: 31 df d5 ef
112 r17 |= xor(r21, r31)
113 # CHECK: 51 df d5 ef
114 r17 ^= and(r21, r31)
115 # CHECK: 71 df d5 ef
116 r17 ^= or(r21, r31)
117
118 # Maximum words
119 # CHECK: 11 df d5 d5
120 r17 = max(r21, r31)
121 # CHECK: 91 df d5 d5
122 r17 = maxu(r21, r31)
123
124 # Maximum doublewords
125 # CHECK: 90 de d4 d3
126 r17:16 = max(r21:20, r31:30)
127 # CHECK: b0 de d4 d3
128 r17:16 = maxu(r21:20, r31:30)
129
130 # Minimum words
131 # CHECK: 11 d5 bf d5
132 r17 = min(r21, r31)
133 # CHECK: 91 d5 bf d5
134 r17 = minu(r21, r31)
135
136 # Minimum doublewords
137 # CHECK: d0 d4 be d3
138 r17:16 = min(r21:20, r31:30)
139 # CHECK: f0 d4 be d3
140 r17:16 = minu(r21:20, r31:30)
141
142 # Module wrap
143 # CHECK: f1 df f5 d3
144 r17 = modwrap(r21, r31)
145
146 # Negate
147 # CHECK: b0 c0 94 80
148 r17:16 = neg(r21:20)
149 # CHECK: d1 c0 95 8c
150 r17 = neg(r21):sat
151
152 # Round
153 # CHECK: 31 c0 d4 88
154 r17 = round(r21:20):sat
155 # CHECK: 11 df f5 8c
156 r17 = cround(r21, #31)
157 # CHECK: 91 df f5 8c
158 r17 = round(r21, #31)
159 # CHECK: d1 df f5 8c
160 r17 = round(r21, #31):sat
161 # CHECK: 11 df d5 c6
162 r17 = cround(r21, r31)
163 # CHECK: 91 df d5 c6
164 r17 = round(r21, r31)
165 # CHECK: d1 df d5 c6
166 r17 = round(r21, r31):sat
167
168 # Subtract doublewords
169 # CHECK: f0 d4 3e d3
170 r17:16 = sub(r21:20, r31:30)
171
172 # Subtract and accumulate words
173 # CHECK: 71 d5 1f ef
174 r17 += sub(r21, r31)
175
176 # Subtract halfword
177 # CHECK: 11 d5 3f d5
178 r17 = sub(r21.l, r31.l)
179 # CHECK: 51 d5 3f d5
180 r17 = sub(r21.l, r31.h)
181 # CHECK: 91 d5 3f d5
182 r17 = sub(r21.l, r31.l):sat
183 # CHECK: d1 d5 3f d5
184 r17 = sub(r21.l, r31.h):sat
185 # CHECK: 11 d5 7f d5
186 r17 = sub(r21.l, r31.l):<<16
187 # CHECK: 31 d5 7f d5
188 r17 = sub(r21.l, r31.h):<<16
189 # CHECK: 51 d5 7f d5
190 r17 = sub(r21.h, r31.l):<<16
191 # CHECK: 71 d5 7f d5
192 r17 = sub(r21.h, r31.h):<<16
193 # CHECK: 91 d5 7f d5
194 r17 = sub(r21.l, r31.l):sat:<<16
195 # CHECK: b1 d5 7f d5
196 r17 = sub(r21.l, r31.h):sat:<<16
197 # CHECK: d1 d5 7f d5
198 r17 = sub(r21.h, r31.l):sat:<<16
199 # CHECK: f1 d5 7f d5
200 r17 = sub(r21.h, r31.h):sat:<<16
201
202 # Sign extend word to doubleword
203 # CHECK: 10 c0 55 84
204 r17:16 = sxtw(r21)
205
206 # Vector absolute value halfwords
207 # CHECK: 90 c0 54 80
208 r17:16 = vabsh(r21:20)
209 # CHECK: b0 c0 54 80
210 r17:16 = vabsh(r21:20):sat
211
212 # Vector absolute value words
213 # CHECK: d0 c0 54 80
214 r17:16 = vabsw(r21:20)
215 # CHECK: f0 c0 54 80
216 r17:16 = vabsw(r21:20):sat
217
218 # Vector absolute difference halfwords
219 # CHECK: 10 d4 7e e8
220 r17:16 = vabsdiffh(r21:20, r31:30)
221
222 # Vector absolute difference words
223 # CHECK: 10 d4 3e e8
224 r17:16 = vabsdiffw(r21:20, r31:30)
225
226 # Vector add halfwords
227 # CHECK: 50 de 14 d3
228 r17:16 = vaddh(r21:20, r31:30)
229 # CHECK: 70 de 14 d3
230 r17:16 = vaddh(r21:20, r31:30):sat
231 # CHECK: 90 de 14 d3
232 r17:16 = vadduh(r21:20, r31:30):sat
233
234 # Vector add halfwords with saturate and pack to unsigned bytes
235 # CHECK: 31 de 54 c1
236 r17 = vaddhub(r21:20, r31:30):sat
237
238 # Vector reduce add unsigned bytes
239 # CHECK: 30 de 54 e8
240 r17:16 = vraddub(r21:20, r31:30)
241 # CHECK: 30 de 54 ea
242 r17:16 += vraddub(r21:20, r31:30)
243
244 # Vector reduce add halfwords
245 # CHECK: 31 de 14 e9
246 r17 = vradduh(r21:20, r31:30)
247 # CHECK: f1 de 34 e9
248 r17 = vraddh(r21:20, r31:30)
249
250 # Vector add bytes
251 # CHECK: 10 de 14 d3
252 r17:16 = vaddub(r21:20, r31:30)
253 # CHECK: 30 de 14 d3
254 r17:16 = vaddub(r21:20, r31:30):sat
255
256 # Vector add words
257 # CHECK: b0 de 14 d3
258 r17:16 = vaddw(r21:20, r31:30)
259 # CHECK: d0 de 14 d3
260 r17:16 = vaddw(r21:20, r31:30):sat
261
262 # Vector average halfwords
263 # CHECK: 50 de 54 d3
264 r17:16 = vavgh(r21:20, r31:30)
265 # CHECK: 70 de 54 d3
266 r17:16 = vavgh(r21:20, r31:30):rnd
267 # CHECK: 90 de 54 d3
268 r17:16 = vavgh(r21:20, r31:30):crnd
269 # CHECK: b0 de 54 d3
270 r17:16 = vavguh(r21:20, r31:30)
271 # CHECK: d0 de 54 d3
272 r17:16 = vavguh(r21:20, r31:30):rnd
273 # CHECK: 10 d4 9e d3
274 r17:16 = vnavgh(r21:20, r31:30)
275 # CHECK: 30 d4 9e d3
276 r17:16 = vnavgh(r21:20, r31:30):rnd:sat
277 # CHECK: 50 d4 9e d3
278 r17:16 = vnavgh(r21:20, r31:30):crnd:sat
279
280 # Vector average unsigned bytes
281 # CHECK: 10 de 54 d3
282 r17:16 = vavgub(r21:20, r31:30)
283 # CHECK: 30 de 54 d3
284 r17:16 = vavgub(r21:20, r31:30):rnd
285
286 # Vector average words
287 # CHECK: 10 de 74 d3
288 r17:16 = vavgw(r21:20, r31:30)
289 # CHECK: 30 de 74 d3
290 r17:16 = vavgw(r21:20, r31:30):rnd
291 # CHECK: 50 de 74 d3
292 r17:16 = vavgw(r21:20, r31:30):crnd
293 # CHECK: 70 de 74 d3
294 r17:16 = vavguw(r21:20, r31:30)
295 # CHECK: 90 de 74 d3
296 r17:16 = vavguw(r21:20, r31:30):rnd
297 # CHECK: 70 d4 9e d3
298 r17:16 = vnavgw(r21:20, r31:30)
299 # CHECK: 90 d4 9e d3
300 r17:16 = vnavgw(r21:20, r31:30):rnd:sat
301 # CHECK: d0 d4 9e d3
302 r17:16 = vnavgw(r21:20, r31:30):crnd:sat
303
304 # Vector conditional negate
305 # CHECK: 50 df d4 c3
306 r17:16 = vcnegh(r21:20, r31)
307
308 # CHECK: f0 ff 34 cb
309 r17:16 += vrcnegh(r21:20, r31)
310
311 # Vector maximum bytes
312 # CHECK: 10 d4 de d3
313 r17:16 = vmaxub(r21:20, r31:30)
314 # CHECK: d0 d4 de d3
315 r17:16 = vmaxb(r21:20, r31:30)
316
317 # Vector maximum halfwords
318 # CHECK: 30 d4 de d3
319 r17:16 = vmaxh(r21:20, r31:30)
320 # CHECK: 50 d4 de d3
321 r17:16 = vmaxuh(r21:20, r31:30)
322
323 # Vector reduce maximum halfwords
324 # CHECK: 3f d0 34 cb
325 r17:16 = vrmaxh(r21:20, r31)
326 # CHECK: 3f f0 34 cb
327 r17:16 = vrmaxuh(r21:20, r31)
328
329 # Vector reduce maximum words
330 # CHECK: 5f d0 34 cb
331 r17:16 = vrmaxw(r21:20, r31)
332 # CHECK: 5f f0 34 cb
333 r17:16 = vrmaxuw(r21:20, r31)
334
335 # Vector maximum words
336 # CHECK: b0 d4 be d3
337 r17:16 = vmaxuw(r21:20, r31:30)
338 # CHECK: 70 d4 de d3
339 r17:16 = vmaxw(r21:20, r31:30)
340
341 # Vector minimum bytes
342 # CHECK: 10 d4 be d3
343 r17:16 = vminub(r21:20, r31:30)
344 # CHECK: f0 d4 de d3
345 r17:16 = vminb(r21:20, r31:30)
346
347 # Vector minimum halfwords
348 # CHECK: 30 d4 be d3
349 r17:16 = vminh(r21:20, r31:30)
350 # CHECK: 50 d4 be d3
351 r17:16 = vminuh(r21:20, r31:30)
352
353 # Vector reduce minimum halfwords
354 # CHECK: bf d0 34 cb
355 r17:16 = vrminh(r21:20, r31)
356 # CHECK: bf f0 34 cb
357 r17:16 = vrminuh(r21:20, r31)
358
359 # Vector reduce minimum words
360 # CHECK: df d0 34 cb
361 r17:16 = vrminw(r21:20, r31)
362 # CHECK: df f0 34 cb
363 r17:16 = vrminuw(r21:20, r31)
364
365 # Vector minimum words
366 # CHECK: 70 d4 be d3
367 r17:16 = vminw(r21:20, r31:30)
368 # CHECK: 90 d4 be d3
369 r17:16 = vminuw(r21:20, r31:30)
370
371 # Vector sum of absolute differences unsigned bytes
372 # CHECK: 50 de 54 e8
373 r17:16 = vrsadub(r21:20, r31:30)
374 # CHECK: 50 de 54 ea
375 r17:16 += vrsadub(r21:20, r31:30)
376
377 # Vector subtract halfwords
378 # CHECK: 50 d4 3e d3
379 r17:16 = vsubh(r21:20, r31:30)
380 # CHECK: 70 d4 3e d3
381 r17:16 = vsubh(r21:20, r31:30):sat
382 # CHECK: 90 d4 3e d3
383 r17:16 = vsubuh(r21:20, r31:30):sat
384
385 # Vector subtract bytes
386 # CHECK: 10 d4 3e d3
387 r17:16 = vsubub(r21:20, r31:30)
388 # CHECK: 30 d4 3e d3
389 r17:16 = vsubub(r21:20, r31:30):sat
390
391 # Vector subtract words
392 # CHECK: b0 d4 3e d3
393 r17:16 = vsubw(r21:20, r31:30)
394 # CHECK: d0 d4 3e d3
395 r17:16 = vsubw(r21:20, r31:30):sat