[mips][microMIPS] Implement TEQ, TGE, TGEU, TLT, TLTU and TNE instructions
[oota-llvm.git] / test / MC / Disassembler / Hexagon / xtype_mpy.txt
1 # RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.10.5 XTYPE/MPY
3
4 # Multiply and use lower result
5 0xb1 0xdf 0x35 0xd7
6 # CHECK: r17 = add(#21, mpyi(r21, r31))
7 0xbf 0xd1 0x35 0xd8
8 # CHECK: r17 = add(#21, mpyi(r21, #31))
9 0xb5 0xd1 0x3f 0xdf
10 # CHECK: r17 = add(r21, mpyi(#84, r31))
11 0xf5 0xf1 0xb5 0xdf
12 # CHECK: r17 = add(r21, mpyi(r21, #31))
13 0x15 0xd1 0x1f 0xe3
14 # CHECK: r17 = add(r21, mpyi(r17, r31))
15 0xf1 0xc3 0x15 0xe0
16 # CHECK: r17 =+ mpyi(r21, #31)
17 0xf1 0xc3 0x95 0xe0
18 # CHECK: r17 =- mpyi(r21, #31)
19 0xf1 0xc3 0x15 0xe1
20 # CHECK: r17 += mpyi(r21, #31)
21 0xf1 0xc3 0x95 0xe1
22 # CHECK: r17 -= mpyi(r21, #31)
23 0x11 0xdf 0x15 0xed
24 # CHECK: r17 = mpyi(r21, r31)
25 0x11 0xdf 0x15 0xef
26 # CHECK: r17 += mpyi(r21, r31)
27
28 # Vector multiply word by signed half (32x16)
29 0xb0 0xde 0x14 0xe8
30 # CHECK: r17:16 = vmpyweh(r21:20, r31:30):sat
31 0xb0 0xde 0x94 0xe8
32 # CHECK: r17:16 = vmpyweh(r21:20, r31:30):<<1:sat
33 0xf0 0xde 0x14 0xe8
34 # CHECK: r17:16 = vmpywoh(r21:20, r31:30):sat
35 0xf0 0xde 0x94 0xe8
36 # CHECK: r17:16 = vmpywoh(r21:20, r31:30):<<1:sat
37 0xb0 0xde 0x34 0xe8
38 # CHECK: r17:16 = vmpyweh(r21:20, r31:30):rnd:sat
39 0xb0 0xde 0xb4 0xe8
40 # CHECK: r17:16 = vmpyweh(r21:20, r31:30):<<1:rnd:sat
41 0xf0 0xde 0x34 0xe8
42 # CHECK: r17:16 = vmpywoh(r21:20, r31:30):rnd:sat
43 0xf0 0xde 0xb4 0xe8
44 # CHECK: r17:16 = vmpywoh(r21:20, r31:30):<<1:rnd:sat
45 0xb0 0xde 0x14 0xea
46 # CHECK: r17:16 += vmpyweh(r21:20, r31:30):sat
47 0xb0 0xde 0x94 0xea
48 # CHECK: r17:16 += vmpyweh(r21:20, r31:30):<<1:sat
49 0xf0 0xde 0x14 0xea
50 # CHECK: r17:16 += vmpywoh(r21:20, r31:30):sat
51 0xf0 0xde 0x94 0xea
52 # CHECK: r17:16 += vmpywoh(r21:20, r31:30):<<1:sat
53 0xb0 0xde 0x34 0xea
54 # CHECK: r17:16 += vmpyweh(r21:20, r31:30):rnd:sat
55 0xb0 0xde 0xb4 0xea
56 # CHECK: r17:16 += vmpyweh(r21:20, r31:30):<<1:rnd:sat
57 0xf0 0xde 0x34 0xea
58 # CHECK: r17:16 += vmpywoh(r21:20, r31:30):rnd:sat
59 0xf0 0xde 0xb4 0xea
60 # CHECK: r17:16 += vmpywoh(r21:20, r31:30):<<1:rnd:sat
61
62 # Vector multiply word by unsigned half (32x16)
63 0xb0 0xde 0x54 0xe8
64 # CHECK: r17:16 = vmpyweuh(r21:20, r31:30):sat
65 0xb0 0xde 0xd4 0xe8
66 # CHECK: r17:16 = vmpyweuh(r21:20, r31:30):<<1:sat
67 0xf0 0xde 0x54 0xe8
68 # CHECK: r17:16 = vmpywouh(r21:20, r31:30):sat
69 0xf0 0xde 0xd4 0xe8
70 # CHECK: r17:16 = vmpywouh(r21:20, r31:30):<<1:sat
71 0xb0 0xde 0x74 0xe8
72 # CHECK: r17:16 = vmpyweuh(r21:20, r31:30):rnd:sat
73 0xb0 0xde 0xf4 0xe8
74 # CHECK: r17:16 = vmpyweuh(r21:20, r31:30):<<1:rnd:sat
75 0xf0 0xde 0x74 0xe8
76 # CHECK: r17:16 = vmpywouh(r21:20, r31:30):rnd:sat
77 0xf0 0xde 0xf4 0xe8
78 # CHECK: r17:16 = vmpywouh(r21:20, r31:30):<<1:rnd:sat
79 0xb0 0xde 0x54 0xea
80 # CHECK: r17:16 += vmpyweuh(r21:20, r31:30):sat
81 0xb0 0xde 0xd4 0xea
82 # CHECK: r17:16 += vmpyweuh(r21:20, r31:30):<<1:sat
83 0xf0 0xde 0x54 0xea
84 # CHECK: r17:16 += vmpywouh(r21:20, r31:30):sat
85 0xf0 0xde 0xd4 0xea
86 # CHECK: r17:16 += vmpywouh(r21:20, r31:30):<<1:sat
87 0xb0 0xde 0x74 0xea
88 # CHECK: r17:16 += vmpyweuh(r21:20, r31:30):rnd:sat
89 0xb0 0xde 0xf4 0xea
90 # CHECK: r17:16 += vmpyweuh(r21:20, r31:30):<<1:rnd:sat
91 0xf0 0xde 0x74 0xea
92 # CHECK: r17:16 += vmpywouh(r21:20, r31:30):rnd:sat
93 0xf0 0xde 0xf4 0xea
94 # CHECK: r17:16 += vmpywouh(r21:20, r31:30):<<1:rnd:sat
95
96 # Multiply signed halfwords
97 0x10 0xdf 0x95 0xe4
98 # CHECK: r17:16 = mpy(r21.l, r31.l):<<1
99 0x30 0xdf 0x95 0xe4
100 # CHECK: r17:16 = mpy(r21.l, r31.h):<<1
101 0x50 0xdf 0x95 0xe4
102 # CHECK: r17:16 = mpy(r21.h, r31.l):<<1
103 0x70 0xdf 0x95 0xe4
104 # CHECK: r17:16 = mpy(r21.h, r31.h):<<1
105 0x10 0xdf 0xb5 0xe4
106 # CHECK: r17:16 = mpy(r21.l, r31.l):<<1:rnd
107 0x30 0xdf 0xb5 0xe4
108 # CHECK: r17:16 = mpy(r21.l, r31.h):<<1:rnd
109 0x50 0xdf 0xb5 0xe4
110 # CHECK: r17:16 = mpy(r21.h, r31.l):<<1:rnd
111 0x70 0xdf 0xb5 0xe4
112 # CHECK: r17:16 = mpy(r21.h, r31.h):<<1:rnd
113 0x10 0xdf 0x95 0xe6
114 # CHECK: r17:16 += mpy(r21.l, r31.l):<<1
115 0x30 0xdf 0x95 0xe6
116 # CHECK: r17:16 += mpy(r21.l, r31.h):<<1
117 0x50 0xdf 0x95 0xe6
118 # CHECK: r17:16 += mpy(r21.h, r31.l):<<1
119 0x70 0xdf 0x95 0xe6
120 # CHECK: r17:16 += mpy(r21.h, r31.h):<<1
121 0x10 0xdf 0xb5 0xe6
122 # CHECK: r17:16 -= mpy(r21.l, r31.l):<<1
123 0x30 0xdf 0xb5 0xe6
124 # CHECK: r17:16 -= mpy(r21.l, r31.h):<<1
125 0x50 0xdf 0xb5 0xe6
126 # CHECK: r17:16 -= mpy(r21.h, r31.l):<<1
127 0x70 0xdf 0xb5 0xe6
128 # CHECK: r17:16 -= mpy(r21.h, r31.h):<<1
129 0x11 0xdf 0x95 0xec
130 # CHECK: r17 = mpy(r21.l, r31.l):<<1
131 0x31 0xdf 0x95 0xec
132 # CHECK: r17 = mpy(r21.l, r31.h):<<1
133 0x51 0xdf 0x95 0xec
134 # CHECK: r17 = mpy(r21.h, r31.l):<<1
135 0x71 0xdf 0x95 0xec
136 # CHECK: r17 = mpy(r21.h, r31.h):<<1
137 0x91 0xdf 0x95 0xec
138 # CHECK: r17 = mpy(r21.l, r31.l):<<1:sat
139 0xb1 0xdf 0x95 0xec
140 # CHECK: r17 = mpy(r21.l, r31.h):<<1:sat
141 0xd1 0xdf 0x95 0xec
142 # CHECK: r17 = mpy(r21.h, r31.l):<<1:sat
143 0xf1 0xdf 0x95 0xec
144 # CHECK: r17 = mpy(r21.h, r31.h):<<1:sat
145 0x11 0xdf 0xb5 0xec
146 # CHECK: r17 = mpy(r21.l, r31.l):<<1:rnd
147 0x31 0xdf 0xb5 0xec
148 # CHECK: r17 = mpy(r21.l, r31.h):<<1:rnd
149 0x51 0xdf 0xb5 0xec
150 # CHECK: r17 = mpy(r21.h, r31.l):<<1:rnd
151 0x71 0xdf 0xb5 0xec
152 # CHECK: r17 = mpy(r21.h, r31.h):<<1:rnd
153 0x91 0xdf 0xb5 0xec
154 # CHECK: r17 = mpy(r21.l, r31.l):<<1:rnd:sat
155 0xb1 0xdf 0xb5 0xec
156 # CHECK: r17 = mpy(r21.l, r31.h):<<1:rnd:sat
157 0xd1 0xdf 0xb5 0xec
158 # CHECK: r17 = mpy(r21.h, r31.l):<<1:rnd:sat
159 0xf1 0xdf 0xb5 0xec
160 # CHECK: r17 = mpy(r21.h, r31.h):<<1:rnd:sat
161 0x11 0xdf 0x95 0xee
162 # CHECK: r17 += mpy(r21.l, r31.l):<<1
163 0x31 0xdf 0x95 0xee
164 # CHECK: r17 += mpy(r21.l, r31.h):<<1
165 0x51 0xdf 0x95 0xee
166 # CHECK: r17 += mpy(r21.h, r31.l):<<1
167 0x71 0xdf 0x95 0xee
168 # CHECK: r17 += mpy(r21.h, r31.h):<<1
169 0x91 0xdf 0x95 0xee
170 # CHECK: r17 += mpy(r21.l, r31.l):<<1:sat
171 0xb1 0xdf 0x95 0xee
172 # CHECK: r17 += mpy(r21.l, r31.h):<<1:sat
173 0xd1 0xdf 0x95 0xee
174 # CHECK: r17 += mpy(r21.h, r31.l):<<1:sat
175 0xf1 0xdf 0x95 0xee
176 # CHECK: r17 += mpy(r21.h, r31.h):<<1:sat
177 0x11 0xdf 0xb5 0xee
178 # CHECK: r17 -= mpy(r21.l, r31.l):<<1
179 0x31 0xdf 0xb5 0xee
180 # CHECK: r17 -= mpy(r21.l, r31.h):<<1
181 0x51 0xdf 0xb5 0xee
182 # CHECK: r17 -= mpy(r21.h, r31.l):<<1
183 0x71 0xdf 0xb5 0xee
184 # CHECK: r17 -= mpy(r21.h, r31.h):<<1
185 0x91 0xdf 0xb5 0xee
186 # CHECK: r17 -= mpy(r21.l, r31.l):<<1:sat
187 0xb1 0xdf 0xb5 0xee
188 # CHECK: r17 -= mpy(r21.l, r31.h):<<1:sat
189 0xd1 0xdf 0xb5 0xee
190 # CHECK: r17 -= mpy(r21.h, r31.l):<<1:sat
191 0xf1 0xdf 0xb5 0xee
192 # CHECK: r17 -= mpy(r21.h, r31.h):<<1:sat
193
194 # Multiply unsigned halfwords
195 0x10 0xdf 0xd5 0xe4
196 # CHECK: r17:16 = mpyu(r21.l, r31.l):<<1
197 0x30 0xdf 0xd5 0xe4
198 # CHECK: r17:16 = mpyu(r21.l, r31.h):<<1
199 0x50 0xdf 0xd5 0xe4
200 # CHECK: r17:16 = mpyu(r21.h, r31.l):<<1
201 0x70 0xdf 0xd5 0xe4
202 # CHECK: r17:16 = mpyu(r21.h, r31.h):<<1
203 0x10 0xdf 0xd5 0xe6
204 # CHECK: r17:16 += mpyu(r21.l, r31.l):<<1
205 0x30 0xdf 0xd5 0xe6
206 # CHECK: r17:16 += mpyu(r21.l, r31.h):<<1
207 0x50 0xdf 0xd5 0xe6
208 # CHECK: r17:16 += mpyu(r21.h, r31.l):<<1
209 0x70 0xdf 0xd5 0xe6
210 # CHECK: r17:16 += mpyu(r21.h, r31.h):<<1
211 0x10 0xdf 0xf5 0xe6
212 # CHECK: r17:16 -= mpyu(r21.l, r31.l):<<1
213 0x30 0xdf 0xf5 0xe6
214 # CHECK: r17:16 -= mpyu(r21.l, r31.h):<<1
215 0x50 0xdf 0xf5 0xe6
216 # CHECK: r17:16 -= mpyu(r21.h, r31.l):<<1
217 0x70 0xdf 0xf5 0xe6
218 # CHECK: r17:16 -= mpyu(r21.h, r31.h):<<1
219 0x11 0xdf 0xd5 0xec
220 # CHECK: r17 = mpyu(r21.l, r31.l):<<1
221 0x31 0xdf 0xd5 0xec
222 # CHECK: r17 = mpyu(r21.l, r31.h):<<1
223 0x51 0xdf 0xd5 0xec
224 # CHECK: r17 = mpyu(r21.h, r31.l):<<1
225 0x71 0xdf 0xd5 0xec
226 # CHECK: r17 = mpyu(r21.h, r31.h):<<1
227 0x11 0xdf 0xd5 0xee
228 # CHECK: r17 += mpyu(r21.l, r31.l):<<1
229 0x31 0xdf 0xd5 0xee
230 # CHECK: r17 += mpyu(r21.l, r31.h):<<1
231 0x51 0xdf 0xd5 0xee
232 # CHECK: r17 += mpyu(r21.h, r31.l):<<1
233 0x71 0xdf 0xd5 0xee
234 # CHECK: r17 += mpyu(r21.h, r31.h):<<1
235 0x11 0xdf 0xf5 0xee
236 # CHECK: r17 -= mpyu(r21.l, r31.l):<<1
237 0x31 0xdf 0xf5 0xee
238 # CHECK: r17 -= mpyu(r21.l, r31.h):<<1
239 0x51 0xdf 0xf5 0xee
240 # CHECK: r17 -= mpyu(r21.h, r31.l):<<1
241 0x71 0xdf 0xf5 0xee
242 # CHECK: r17 -= mpyu(r21.h, r31.h):<<1
243
244 # Polynomial multiply words
245 0xf0 0xdf 0x55 0xe5
246 # CHECK: r17:16 = pmpyw(r21, r31)
247 0xf0 0xdf 0x35 0xe7
248 # CHECK: r17:16 ^= pmpyw(r21, r31)
249
250 # Vector reduce multiply word by signed half (32x16)
251 0x50 0xde 0x34 0xe8
252 # CHECK: r17:16 = vrmpywoh(r21:20, r31:30)
253 0x50 0xde 0xb4 0xe8
254 # CHECK: r17:16 = vrmpywoh(r21:20, r31:30):<<1
255 0x90 0xde 0x54 0xe8
256 # CHECK: r17:16 = vrmpyweh(r21:20, r31:30)
257 0x90 0xde 0xd4 0xe8
258 # CHECK: r17:16 = vrmpyweh(r21:20, r31:30):<<1
259 0xd0 0xde 0x74 0xea
260 # CHECK: r17:16 += vrmpywoh(r21:20, r31:30)
261 0xd0 0xde 0xf4 0xea
262 # CHECK: r17:16 += vrmpywoh(r21:20, r31:30):<<1
263 0xd0 0xde 0x34 0xea
264 # CHECK: r17:16 += vrmpyweh(r21:20, r31:30)
265 0xd0 0xde 0xb4 0xea
266 # CHECK: r17:16 += vrmpyweh(r21:20, r31:30):<<1
267
268 # Multiply and use upper result
269 0x31 0xdf 0x15 0xed
270 # CHECK: r17 = mpy(r21, r31)
271 0x31 0xdf 0x35 0xed
272 # CHECK: r17 = mpy(r21, r31):rnd
273 0x31 0xdf 0x55 0xed
274 # CHECK: r17 = mpyu(r21, r31)
275 0x31 0xdf 0x75 0xed
276 # CHECK: r17 = mpysu(r21, r31)
277 0x11 0xdf 0xb5 0xed
278 # CHECK: r17 = mpy(r21, r31.h):<<1:sat
279 0x31 0xdf 0xb5 0xed
280 # CHECK: r17 = mpy(r21, r31.l):<<1:sat
281 0x91 0xdf 0xb5 0xed
282 # CHECK: r17 = mpy(r21, r31.h):<<1:rnd:sat
283 0x11 0xdf 0xf5 0xed
284 # CHECK: r17 = mpy(r21, r31):<<1:sat
285 0x91 0xdf 0xf5 0xed
286 # CHECK: r17 = mpy(r21, r31.l):<<1:rnd:sat
287 0x51 0xdf 0xb5 0xed
288 # CHECK: r17 = mpy(r21, r31):<<1
289 0x11 0xdf 0x75 0xef
290 # CHECK: r17 += mpy(r21, r31):<<1:sat
291 0x31 0xdf 0x75 0xef
292 # CHECK: r17 -= mpy(r21, r31):<<1:sat
293
294 # Multiply and use full result
295 0x10 0xdf 0x15 0xe5
296 # CHECK: r17:16 = mpy(r21, r31)
297 0x10 0xdf 0x55 0xe5
298 # CHECK: r17:16 = mpyu(r21, r31)
299 0x10 0xdf 0x15 0xe7
300 # CHECK: r17:16 += mpy(r21, r31)
301 0x10 0xdf 0x35 0xe7
302 # CHECK: r17:16 -= mpy(r21, r31)
303 0x10 0xdf 0x55 0xe7
304 # CHECK: r17:16 += mpyu(r21, r31)
305 0x10 0xdf 0x75 0xe7
306 # CHECK: r17:16 -= mpyu(r21, r31)
307
308 # Vector dual multiply
309 0x90 0xde 0x14 0xe8
310 # CHECK: r17:16 = vdmpy(r21:20, r31:30):sat
311 0x90 0xde 0x94 0xe8
312 # CHECK: r17:16 = vdmpy(r21:20, r31:30):<<1:sat
313 0x90 0xde 0x14 0xea
314 # CHECK: r17:16 += vdmpy(r21:20, r31:30):sat
315 0x90 0xde 0x94 0xea
316 # CHECK: r17:16 += vdmpy(r21:20, r31:30):<<1:sat
317
318 # Vector dual multiply with round and pack
319 0x11 0xde 0x14 0xe9
320 # CHECK: r17 = vdmpy(r21:20, r31:30):rnd:sat
321 0x11 0xde 0x94 0xe9
322 # CHECK: r17 = vdmpy(r21:20, r31:30):<<1:rnd:sat
323
324 # Vector reduce multiply bytes
325 0x30 0xde 0x94 0xe8
326 # CHECK: r17:16 = vrmpybu(r21:20, r31:30)
327 0x30 0xde 0xd4 0xe8
328 # CHECK: r17:16 = vrmpybsu(r21:20, r31:30)
329 0x30 0xde 0x94 0xea
330 # CHECK: r17:16 += vrmpybu(r21:20, r31:30)
331 0x30 0xde 0xd4 0xea
332 # CHECK: r17:16 += vrmpybsu(r21:20, r31:30)
333
334 # Vector dual multiply signed by unsigned bytes
335 0x30 0xde 0xb4 0xe8
336 # CHECK: r17:16 = vdmpybsu(r21:20, r31:30):sat
337 0x30 0xde 0x34 0xea
338 # CHECK: r17:16 += vdmpybsu(r21:20, r31:30):sat
339
340 # Vector multiply even haldwords
341 0xd0 0xde 0x14 0xe8
342 # CHECK: r17:16 = vmpyeh(r21:20, r31:30):sat
343 0xd0 0xde 0x94 0xe8
344 # CHECK: r17:16 = vmpyeh(r21:20, r31:30):<<1:sat
345 0x50 0xde 0x34 0xea
346 # CHECK: r17:16 += vmpyeh(r21:20, r31:30)
347 0xd0 0xde 0x14 0xea
348 # CHECK: r17:16 += vmpyeh(r21:20, r31:30):sat
349 0xd0 0xde 0x94 0xea
350 # CHECK: r17:16 += vmpyeh(r21:20, r31:30):<<1:sat
351
352 # Vector multiply halfwords
353 0xb0 0xdf 0x15 0xe5
354 # CHECK: r17:16 = vmpyh(r21, r31):sat
355 0xb0 0xdf 0x95 0xe5
356 # CHECK: r17:16 = vmpyh(r21, r31):<<1:sat
357 0x30 0xdf 0x35 0xe7
358 # CHECK: r17:16 += vmpyh(r21, r31)
359 0xb0 0xdf 0x15 0xe7
360 # CHECK: r17:16 += vmpyh(r21, r31):sat
361 0xb0 0xdf 0x95 0xe7
362 # CHECK: r17:16 += vmpyh(r21, r31):<<1:sat
363
364 # Vector multiply halfwords with round and pack
365 0xf1 0xdf 0x35 0xed
366 # CHECK: r17 = vmpyh(r21, r31):rnd:sat
367 0xf1 0xdf 0xb5 0xed
368 # CHECK: r17 = vmpyh(r21, r31):<<1:rnd:sat
369
370 # Vector multiply halfwords signed by unsigned
371 0xf0 0xdf 0x15 0xe5
372 # CHECK: r17:16 = vmpyhsu(r21, r31):sat
373 0xf0 0xdf 0x95 0xe5
374 # CHECK: r17:16 = vmpyhsu(r21, r31):<<1:sat
375 0xb0 0xdf 0x75 0xe7
376 # CHECK: r17:16 += vmpyhsu(r21, r31):sat
377 0xb0 0xdf 0xf5 0xe7
378 # CHECK: r17:16 += vmpyhsu(r21, r31):<<1:sat
379
380 # Vector reduce multiply halfwords
381 0x50 0xde 0x14 0xe8
382 # CHECK: r17:16 = vrmpyh(r21:20, r31:30)
383 0x50 0xde 0x14 0xea
384 # CHECK: r17:16 += vrmpyh(r21:20, r31:30)
385
386 # Vector multiply bytes
387 0x30 0xdf 0x55 0xe5
388 # CHECK: r17:16 = vmpybsu(r21, r31)
389 0x30 0xdf 0x95 0xe5
390 # CHECK: r17:16 = vmpybu(r21, r31)
391 0x30 0xdf 0x95 0xe7
392 # CHECK: r17:16 += vmpybu(r21, r31)
393 0x30 0xdf 0xd5 0xe7
394 # CHECK: r17:16 += vmpybsu(r21, r31)
395
396 # Vector polynomial multiply halfwords
397 0xf0 0xdf 0xd5 0xe5
398 # CHECK: r17:16 = vpmpyh(r21, r31)
399 0xf0 0xdf 0xb5 0xe7
400 # CHECK: r17:16 ^= vpmpyh(r21, r31)