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 396