| # RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s |
| # Hexagon Programmer's Reference Manual 11.10.1 XTYPE/ALU |
| |
| # Absolute value doubleword |
| # CHECK: d0 c0 94 80 |
| r17:16 = abs(r21:20) |
| # CHECK: 91 c0 95 8c |
| r17 = abs(r21) |
| # CHECK: b1 c0 95 8c |
| r17 = abs(r21):sat |
| |
| # Add and accumulate |
| # CHECK: ff d1 35 db |
| r17 = add(r21, add(r31, #23)) |
| # CHECK: ff d1 b5 db |
| r17 = add(r21, sub(#23, r31)) |
| # CHECK: f1 c2 15 e2 |
| r17 += add(r21, #23) |
| # CHECK: f1 c2 95 e2 |
| r17 -= add(r21, #23) |
| # CHECK: 31 df 15 ef |
| r17 += add(r21, r31) |
| # CHECK: 31 df 95 ef |
| r17 -= add(r21, r31) |
| |
| # Add doublewords |
| # CHECK: f0 de 14 d3 |
| r17:16 = add(r21:20, r31:30) |
| # CHECK: b0 de 74 d3 |
| r17:16 = add(r21:20, r31:30):sat |
| # CHECK: d0 de 74 d3 |
| r17:16 = add(r21:20, r31:30):raw:lo |
| # CHECK: f0 de 74 d3 |
| r17:16 = add(r21:20, r31:30):raw:hi |
| |
| # Add halfword |
| # CHECK: 11 d5 1f d5 |
| r17 = add(r21.l, r31.l) |
| # CHECK: 51 d5 1f d5 |
| r17 = add(r21.l, r31.h) |
| # CHECK: 91 d5 1f d5 |
| r17 = add(r21.l, r31.l):sat |
| # CHECK: d1 d5 1f d5 |
| r17 = add(r21.l, r31.h):sat |
| # CHECK: 11 d5 5f d5 |
| r17 = add(r21.l, r31.l):<<16 |
| # CHECK: 31 d5 5f d5 |
| r17 = add(r21.l, r31.h):<<16 |
| # CHECK: 51 d5 5f d5 |
| r17 = add(r21.h, r31.l):<<16 |
| # CHECK: 71 d5 5f d5 |
| r17 = add(r21.h, r31.h):<<16 |
| # CHECK: 91 d5 5f d5 |
| r17 = add(r21.l, r31.l):sat:<<16 |
| # CHECK: b1 d5 5f d5 |
| r17 = add(r21.l, r31.h):sat:<<16 |
| # CHECK: d1 d5 5f d5 |
| r17 = add(r21.h, r31.l):sat:<<16 |
| # CHECK: f1 d5 5f d5 |
| r17 = add(r21.h, r31.h):sat:<<16 |
| |
| # Add or subtract doublewords with carry |
| # CHECK: 70 de d4 c2 |
| r17:16 = add(r21:20, r31:30, p3):carry |
| # CHECK: 70 de f4 c2 |
| r17:16 = sub(r21:20, r31:30, p3):carry |
| |
| # Logical doublewords |
| # CHECK: 90 c0 94 80 |
| r17:16 = not(r21:20) |
| # CHECK: 10 de f4 d3 |
| r17:16 = and(r21:20, r31:30) |
| # CHECK: 30 d4 fe d3 |
| r17:16 = and(r21:20, ~r31:30) |
| # CHECK: 50 de f4 d3 |
| r17:16 = or(r21:20, r31:30) |
| # CHECK: 70 d4 fe d3 |
| r17:16 = or(r21:20, ~r31:30) |
| # CHECK: 90 de f4 d3 |
| r17:16 = xor(r21:20, r31:30) |
| |
| # Logical-logical doublewords |
| # CHECK: 10 de 94 ca |
| r17:16 ^= xor(r21:20, r31:30) |
| |
| # Logical-logical words |
| # CHECK: f1 c3 15 da |
| r17 |= and(r21, #31) |
| # CHECK: f5 c3 51 da |
| r17 = or(r21, and(r17, #31)) |
| # CHECK: f1 c3 95 da |
| r17 |= or(r21, #31) |
| # CHECK: 11 df 35 ef |
| r17 |= and(r21, ~r31) |
| # CHECK: 31 df 35 ef |
| r17 &= and(r21, ~r31) |
| # CHECK: 51 df 35 ef |
| r17 ^= and(r21, ~r31) |
| # CHECK: 11 df 55 ef |
| r17 &= and(r21, r31) |
| # CHECK: 31 df 55 ef |
| r17 &= or(r21, r31) |
| # CHECK: 51 df 55 ef |
| r17 &= xor(r21, r31) |
| # CHECK: 71 df 55 ef |
| r17 |= and(r21, r31) |
| # CHECK: 71 df 95 ef |
| r17 ^= xor(r21, r31) |
| # CHECK: 11 df d5 ef |
| r17 |= or(r21, r31) |
| # CHECK: 31 df d5 ef |
| r17 |= xor(r21, r31) |
| # CHECK: 51 df d5 ef |
| r17 ^= and(r21, r31) |
| # CHECK: 71 df d5 ef |
| r17 ^= or(r21, r31) |
| |
| # Maximum words |
| # CHECK: 11 df d5 d5 |
| r17 = max(r21, r31) |
| # CHECK: 91 df d5 d5 |
| r17 = maxu(r21, r31) |
| |
| # Maximum doublewords |
| # CHECK: 90 de d4 d3 |
| r17:16 = max(r21:20, r31:30) |
| # CHECK: b0 de d4 d3 |
| r17:16 = maxu(r21:20, r31:30) |
| |
| # Minimum words |
| # CHECK: 11 d5 bf d5 |
| r17 = min(r21, r31) |
| # CHECK: 91 d5 bf d5 |
| r17 = minu(r21, r31) |
| |
| # Minimum doublewords |
| # CHECK: d0 d4 be d3 |
| r17:16 = min(r21:20, r31:30) |
| # CHECK: f0 d4 be d3 |
| r17:16 = minu(r21:20, r31:30) |
| |
| # Module wrap |
| # CHECK: f1 df f5 d3 |
| r17 = modwrap(r21, r31) |
| |
| # Negate |
| # CHECK: b0 c0 94 80 |
| r17:16 = neg(r21:20) |
| # CHECK: d1 c0 95 8c |
| r17 = neg(r21):sat |
| |
| # Round |
| # CHECK: 31 c0 d4 88 |
| r17 = round(r21:20):sat |
| # CHECK: 11 df f5 8c |
| r17 = cround(r21, #31) |
| # CHECK: 91 df f5 8c |
| r17 = round(r21, #31) |
| # CHECK: d1 df f5 8c |
| r17 = round(r21, #31):sat |
| # CHECK: 11 df d5 c6 |
| r17 = cround(r21, r31) |
| # CHECK: 91 df d5 c6 |
| r17 = round(r21, r31) |
| # CHECK: d1 df d5 c6 |
| r17 = round(r21, r31):sat |
| |
| # Subtract doublewords |
| # CHECK: f0 d4 3e d3 |
| r17:16 = sub(r21:20, r31:30) |
| |
| # Subtract and accumulate words |
| # CHECK: 71 d5 1f ef |
| r17 += sub(r21, r31) |
| |
| # Subtract halfword |
| # CHECK: 11 d5 3f d5 |
| r17 = sub(r21.l, r31.l) |
| # CHECK: 51 d5 3f d5 |
| r17 = sub(r21.l, r31.h) |
| # CHECK: 91 d5 3f d5 |
| r17 = sub(r21.l, r31.l):sat |
| # CHECK: d1 d5 3f d5 |
| r17 = sub(r21.l, r31.h):sat |
| # CHECK: 11 d5 7f d5 |
| r17 = sub(r21.l, r31.l):<<16 |
| # CHECK: 31 d5 7f d5 |
| r17 = sub(r21.l, r31.h):<<16 |
| # CHECK: 51 d5 7f d5 |
| r17 = sub(r21.h, r31.l):<<16 |
| # CHECK: 71 d5 7f d5 |
| r17 = sub(r21.h, r31.h):<<16 |
| # CHECK: 91 d5 7f d5 |
| r17 = sub(r21.l, r31.l):sat:<<16 |
| # CHECK: b1 d5 7f d5 |
| r17 = sub(r21.l, r31.h):sat:<<16 |
| # CHECK: d1 d5 7f d5 |
| r17 = sub(r21.h, r31.l):sat:<<16 |
| # CHECK: f1 d5 7f d5 |
| r17 = sub(r21.h, r31.h):sat:<<16 |
| |
| # Sign extend word to doubleword |
| # CHECK: 10 c0 55 84 |
| r17:16 = sxtw(r21) |
| |
| # Vector absolute value halfwords |
| # CHECK: 90 c0 54 80 |
| r17:16 = vabsh(r21:20) |
| # CHECK: b0 c0 54 80 |
| r17:16 = vabsh(r21:20):sat |
| |
| # Vector absolute value words |
| # CHECK: d0 c0 54 80 |
| r17:16 = vabsw(r21:20) |
| # CHECK: f0 c0 54 80 |
| r17:16 = vabsw(r21:20):sat |
| |
| # Vector absolute difference halfwords |
| # CHECK: 10 d4 7e e8 |
| r17:16 = vabsdiffh(r21:20, r31:30) |
| |
| # Vector absolute difference words |
| # CHECK: 10 d4 3e e8 |
| r17:16 = vabsdiffw(r21:20, r31:30) |
| |
| # Vector add halfwords |
| # CHECK: 50 de 14 d3 |
| r17:16 = vaddh(r21:20, r31:30) |
| # CHECK: 70 de 14 d3 |
| r17:16 = vaddh(r21:20, r31:30):sat |
| # CHECK: 90 de 14 d3 |
| r17:16 = vadduh(r21:20, r31:30):sat |
| |
| # Vector add halfwords with saturate and pack to unsigned bytes |
| # CHECK: 31 de 54 c1 |
| r17 = vaddhub(r21:20, r31:30):sat |
| |
| # Vector reduce add unsigned bytes |
| # CHECK: 30 de 54 e8 |
| r17:16 = vraddub(r21:20, r31:30) |
| # CHECK: 30 de 54 ea |
| r17:16 += vraddub(r21:20, r31:30) |
| |
| # Vector reduce add halfwords |
| # CHECK: 31 de 14 e9 |
| r17 = vradduh(r21:20, r31:30) |
| # CHECK: f1 de 34 e9 |
| r17 = vraddh(r21:20, r31:30) |
| |
| # Vector add bytes |
| # CHECK: 10 de 14 d3 |
| r17:16 = vaddub(r21:20, r31:30) |
| # CHECK: 30 de 14 d3 |
| r17:16 = vaddub(r21:20, r31:30):sat |
| |
| # Vector add words |
| # CHECK: b0 de 14 d3 |
| r17:16 = vaddw(r21:20, r31:30) |
| # CHECK: d0 de 14 d3 |
| r17:16 = vaddw(r21:20, r31:30):sat |
| |
| # Vector average halfwords |
| # CHECK: 50 de 54 d3 |
| r17:16 = vavgh(r21:20, r31:30) |
| # CHECK: 70 de 54 d3 |
| r17:16 = vavgh(r21:20, r31:30):rnd |
| # CHECK: 90 de 54 d3 |
| r17:16 = vavgh(r21:20, r31:30):crnd |
| # CHECK: b0 de 54 d3 |
| r17:16 = vavguh(r21:20, r31:30) |
| # CHECK: d0 de 54 d3 |
| r17:16 = vavguh(r21:20, r31:30):rnd |
| # CHECK: 10 d4 9e d3 |
| r17:16 = vnavgh(r21:20, r31:30) |
| # CHECK: 30 d4 9e d3 |
| r17:16 = vnavgh(r21:20, r31:30):rnd:sat |
| # CHECK: 50 d4 9e d3 |
| r17:16 = vnavgh(r21:20, r31:30):crnd:sat |
| |
| # Vector average unsigned bytes |
| # CHECK: 10 de 54 d3 |
| r17:16 = vavgub(r21:20, r31:30) |
| # CHECK: 30 de 54 d3 |
| r17:16 = vavgub(r21:20, r31:30):rnd |
| |
| # Vector average words |
| # CHECK: 10 de 74 d3 |
| r17:16 = vavgw(r21:20, r31:30) |
| # CHECK: 30 de 74 d3 |
| r17:16 = vavgw(r21:20, r31:30):rnd |
| # CHECK: 50 de 74 d3 |
| r17:16 = vavgw(r21:20, r31:30):crnd |
| # CHECK: 70 de 74 d3 |
| r17:16 = vavguw(r21:20, r31:30) |
| # CHECK: 90 de 74 d3 |
| r17:16 = vavguw(r21:20, r31:30):rnd |
| # CHECK: 70 d4 9e d3 |
| r17:16 = vnavgw(r21:20, r31:30) |
| # CHECK: 90 d4 9e d3 |
| r17:16 = vnavgw(r21:20, r31:30):rnd:sat |
| # CHECK: d0 d4 9e d3 |
| r17:16 = vnavgw(r21:20, r31:30):crnd:sat |
| |
| # Vector conditional negate |
| # CHECK: 50 df d4 c3 |
| r17:16 = vcnegh(r21:20, r31) |
| |
| # CHECK: f0 ff 34 cb |
| r17:16 += vrcnegh(r21:20, r31) |
| |
| # Vector maximum bytes |
| # CHECK: 10 d4 de d3 |
| r17:16 = vmaxub(r21:20, r31:30) |
| # CHECK: d0 d4 de d3 |
| r17:16 = vmaxb(r21:20, r31:30) |
| |
| # Vector maximum halfwords |
| # CHECK: 30 d4 de d3 |
| r17:16 = vmaxh(r21:20, r31:30) |
| # CHECK: 50 d4 de d3 |
| r17:16 = vmaxuh(r21:20, r31:30) |
| |
| # Vector reduce maximum halfwords |
| # CHECK: 3f d0 34 cb |
| r17:16 = vrmaxh(r21:20, r31) |
| # CHECK: 3f f0 34 cb |
| r17:16 = vrmaxuh(r21:20, r31) |
| |
| # Vector reduce maximum words |
| # CHECK: 5f d0 34 cb |
| r17:16 = vrmaxw(r21:20, r31) |
| # CHECK: 5f f0 34 cb |
| r17:16 = vrmaxuw(r21:20, r31) |
| |
| # Vector maximum words |
| # CHECK: b0 d4 be d3 |
| r17:16 = vmaxuw(r21:20, r31:30) |
| # CHECK: 70 d4 de d3 |
| r17:16 = vmaxw(r21:20, r31:30) |
| |
| # Vector minimum bytes |
| # CHECK: 10 d4 be d3 |
| r17:16 = vminub(r21:20, r31:30) |
| # CHECK: f0 d4 de d3 |
| r17:16 = vminb(r21:20, r31:30) |
| |
| # Vector minimum halfwords |
| # CHECK: 30 d4 be d3 |
| r17:16 = vminh(r21:20, r31:30) |
| # CHECK: 50 d4 be d3 |
| r17:16 = vminuh(r21:20, r31:30) |
| |
| # Vector reduce minimum halfwords |
| # CHECK: bf d0 34 cb |
| r17:16 = vrminh(r21:20, r31) |
| # CHECK: bf f0 34 cb |
| r17:16 = vrminuh(r21:20, r31) |
| |
| # Vector reduce minimum words |
| # CHECK: df d0 34 cb |
| r17:16 = vrminw(r21:20, r31) |
| # CHECK: df f0 34 cb |
| r17:16 = vrminuw(r21:20, r31) |
| |
| # Vector minimum words |
| # CHECK: 70 d4 be d3 |
| r17:16 = vminw(r21:20, r31:30) |
| # CHECK: 90 d4 be d3 |
| r17:16 = vminuw(r21:20, r31:30) |
| |
| # Vector sum of absolute differences unsigned bytes |
| # CHECK: 50 de 54 e8 |
| r17:16 = vrsadub(r21:20, r31:30) |
| # CHECK: 50 de 54 ea |
| r17:16 += vrsadub(r21:20, r31:30) |
| |
| # Vector subtract halfwords |
| # CHECK: 50 d4 3e d3 |
| r17:16 = vsubh(r21:20, r31:30) |
| # CHECK: 70 d4 3e d3 |
| r17:16 = vsubh(r21:20, r31:30):sat |
| # CHECK: 90 d4 3e d3 |
| r17:16 = vsubuh(r21:20, r31:30):sat |
| |
| # Vector subtract bytes |
| # CHECK: 10 d4 3e d3 |
| r17:16 = vsubub(r21:20, r31:30) |
| # CHECK: 30 d4 3e d3 |
| r17:16 = vsubub(r21:20, r31:30):sat |
| |
| # Vector subtract words |
| # CHECK: b0 d4 3e d3 |
| r17:16 = vsubw(r21:20, r31:30) |
| # CHECK: d0 d4 3e d3 |
| r17:16 = vsubw(r21:20, r31:30):sat |