Home | History | Annotate | Download | only in instructions
      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