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