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