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
4 # Absolute value doubleword
14 r17 = add(r21, add(r31, #23))
16 r17 = add(r21, sub(#23, r31))
28 r17:16 = add(r21:20, r31:30)
30 r17:16 = add(r21:20, r31:30):sat
32 r17:16 = add(r21:20, r31:30):raw:lo
34 r17:16 = add(r21:20, r31:30):raw:hi
38 r17 = add(r21.l, r31.l)
40 r17 = add(r21.l, r31.h)
42 r17 = add(r21.l, r31.l):sat
44 r17 = add(r21.l, r31.h):sat
46 r17 = add(r21.l, r31.l):<<16
48 r17 = add(r21.l, r31.h):<<16
50 r17 = add(r21.h, r31.l):<<16
52 r17 = add(r21.h, r31.h):<<16
54 r17 = add(r21.l, r31.l):sat:<<16
56 r17 = add(r21.l, r31.h):sat:<<16
58 r17 = add(r21.h, r31.l):sat:<<16
60 r17 = add(r21.h, r31.h):sat:<<16
62 # Add or subtract doublewords with carry
64 r17:16 = add(r21:20, r31:30, p3):carry
66 r17:16 = sub(r21:20, r31:30, p3):carry
72 r17:16 = and(r21:20, r31:30)
74 r17:16 = and(r21:20, ~r31:30)
76 r17:16 = or(r21:20, r31:30)
78 r17:16 = or(r21:20, ~r31:30)
80 r17:16 = xor(r21:20, r31:30)
82 # Logical-logical doublewords
84 r17:16 ^= xor(r21:20, r31:30)
86 # Logical-logical words
90 r17 = or(r21, and(r17, #31))
124 # Maximum doublewords
126 r17:16 = max(r21:20, r31:30)
128 r17:16 = maxu(r21:20, r31:30)
136 # Minimum doublewords
138 r17:16 = min(r21:20, r31:30)
140 r17:16 = minu(r21:20, r31:30)
144 r17 = modwrap(r21, r31)
154 r17 = round(r21:20):sat
156 r17 = cround(r21, #31)
158 r17 = round(r21, #31)
160 r17 = round(r21, #31):sat
162 r17 = cround(r21, r31)
164 r17 = round(r21, r31)
166 r17 = round(r21, r31):sat
168 # Subtract doublewords
170 r17:16 = sub(r21:20, r31:30)
172 # Subtract and accumulate words
178 r17 = sub(r21.l, r31.l)
180 r17 = sub(r21.l, r31.h)
182 r17 = sub(r21.l, r31.l):sat
184 r17 = sub(r21.l, r31.h):sat
186 r17 = sub(r21.l, r31.l):<<16
188 r17 = sub(r21.l, r31.h):<<16
190 r17 = sub(r21.h, r31.l):<<16
192 r17 = sub(r21.h, r31.h):<<16
194 r17 = sub(r21.l, r31.l):sat:<<16
196 r17 = sub(r21.l, r31.h):sat:<<16
198 r17 = sub(r21.h, r31.l):sat:<<16
200 r17 = sub(r21.h, r31.h):sat:<<16
202 # Sign extend word to doubleword
206 # Vector absolute value halfwords
208 r17:16 = vabsh(r21:20)
210 r17:16 = vabsh(r21:20):sat
212 # Vector absolute value words
214 r17:16 = vabsw(r21:20)
216 r17:16 = vabsw(r21:20):sat
218 # Vector absolute difference halfwords
220 r17:16 = vabsdiffh(r21:20, r31:30)
222 # Vector absolute difference words
224 r17:16 = vabsdiffw(r21:20, r31:30)
226 # Vector add halfwords
228 r17:16 = vaddh(r21:20, r31:30)
230 r17:16 = vaddh(r21:20, r31:30):sat
232 r17:16 = vadduh(r21:20, r31:30):sat
234 # Vector add halfwords with saturate and pack to unsigned bytes
236 r17 = vaddhub(r21:20, r31:30):sat
238 # Vector reduce add unsigned bytes
240 r17:16 = vraddub(r21:20, r31:30)
242 r17:16 += vraddub(r21:20, r31:30)
244 # Vector reduce add halfwords
246 r17 = vradduh(r21:20, r31:30)
248 r17 = vraddh(r21:20, r31:30)
252 r17:16 = vaddub(r21:20, r31:30)
254 r17:16 = vaddub(r21:20, r31:30):sat
258 r17:16 = vaddw(r21:20, r31:30)
260 r17:16 = vaddw(r21:20, r31:30):sat
262 # Vector average halfwords
264 r17:16 = vavgh(r21:20, r31:30)
266 r17:16 = vavgh(r21:20, r31:30):rnd
268 r17:16 = vavgh(r21:20, r31:30):crnd
270 r17:16 = vavguh(r21:20, r31:30)
272 r17:16 = vavguh(r21:20, r31:30):rnd
274 r17:16 = vnavgh(r21:20, r31:30)
276 r17:16 = vnavgh(r21:20, r31:30):rnd:sat
278 r17:16 = vnavgh(r21:20, r31:30):crnd:sat
280 # Vector average unsigned bytes
282 r17:16 = vavgub(r21:20, r31:30)
284 r17:16 = vavgub(r21:20, r31:30):rnd
286 # Vector average words
288 r17:16 = vavgw(r21:20, r31:30)
290 r17:16 = vavgw(r21:20, r31:30):rnd
292 r17:16 = vavgw(r21:20, r31:30):crnd
294 r17:16 = vavguw(r21:20, r31:30)
296 r17:16 = vavguw(r21:20, r31:30):rnd
298 r17:16 = vnavgw(r21:20, r31:30)
300 r17:16 = vnavgw(r21:20, r31:30):rnd:sat
302 r17:16 = vnavgw(r21:20, r31:30):crnd:sat
304 # Vector conditional negate
306 r17:16 = vcnegh(r21:20, r31)
309 r17:16 += vrcnegh(r21:20, r31)
311 # Vector maximum bytes
313 r17:16 = vmaxub(r21:20, r31:30)
315 r17:16 = vmaxb(r21:20, r31:30)
317 # Vector maximum halfwords
319 r17:16 = vmaxh(r21:20, r31:30)
321 r17:16 = vmaxuh(r21:20, r31:30)
323 # Vector reduce maximum halfwords
325 r17:16 = vrmaxh(r21:20, r31)
327 r17:16 = vrmaxuh(r21:20, r31)
329 # Vector reduce maximum words
331 r17:16 = vrmaxw(r21:20, r31)
333 r17:16 = vrmaxuw(r21:20, r31)
335 # Vector maximum words
337 r17:16 = vmaxuw(r21:20, r31:30)
339 r17:16 = vmaxw(r21:20, r31:30)
341 # Vector minimum bytes
343 r17:16 = vminub(r21:20, r31:30)
345 r17:16 = vminb(r21:20, r31:30)
347 # Vector minimum halfwords
349 r17:16 = vminh(r21:20, r31:30)
351 r17:16 = vminuh(r21:20, r31:30)
353 # Vector reduce minimum halfwords
355 r17:16 = vrminh(r21:20, r31)
357 r17:16 = vrminuh(r21:20, r31)
359 # Vector reduce minimum words
361 r17:16 = vrminw(r21:20, r31)
363 r17:16 = vrminuw(r21:20, r31)
365 # Vector minimum words
367 r17:16 = vminw(r21:20, r31:30)
369 r17:16 = vminuw(r21:20, r31:30)
371 # Vector sum of absolute differences unsigned bytes
373 r17:16 = vrsadub(r21:20, r31:30)
375 r17:16 += vrsadub(r21:20, r31:30)
377 # Vector subtract halfwords
379 r17:16 = vsubh(r21:20, r31:30)
381 r17:16 = vsubh(r21:20, r31:30):sat
383 r17:16 = vsubuh(r21:20, r31:30):sat
385 # Vector subtract bytes
387 r17:16 = vsubub(r21:20, r31:30)
389 r17:16 = vsubub(r21:20, r31:30):sat
391 # Vector subtract words
393 r17:16 = vsubw(r21:20, r31:30)
395 r17:16 = vsubw(r21:20, r31:30):sat