diff options
Diffstat (limited to 'test/MC/Disassembler/Hexagon/xtype_alu.txt')
-rw-r--r-- | test/MC/Disassembler/Hexagon/xtype_alu.txt | 395 |
1 files changed, 395 insertions, 0 deletions
diff --git a/test/MC/Disassembler/Hexagon/xtype_alu.txt b/test/MC/Disassembler/Hexagon/xtype_alu.txt new file mode 100644 index 0000000..03d0f05 --- /dev/null +++ b/test/MC/Disassembler/Hexagon/xtype_alu.txt @@ -0,0 +1,395 @@ +# RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s +# Hexagon Programmer's Reference Manual 11.10.1 XTYPE/ALU + +# Absolute value doubleword +0xd0 0xc0 0x94 0x80 +# CHECK: r17:16 = abs(r21:20) +0x91 0xc0 0x95 0x8c +# CHECK: r17 = abs(r21) +0xb1 0xc0 0x95 0x8c +# CHECK: r17 = abs(r21):sat + +# Add and accumulate +0xff 0xd1 0x35 0xdb +# CHECK: r17 = add(r21, add(r31, #23)) +0xff 0xd1 0xb5 0xdb +# CHECK: r17 = add(r21, sub(#23, r31)) +0xf1 0xc2 0x15 0xe2 +# CHECK: r17 += add(r21, #23) +0xf1 0xc2 0x95 0xe2 +# CHECK: r17 -= add(r21, #23) +0x31 0xdf 0x15 0xef +# CHECK: r17 += add(r21, r31) +0x31 0xdf 0x95 0xef +# CHECK: r17 -= add(r21, r31) + +# Add doublewords +0xf0 0xde 0x14 0xd3 +# CHECK: r17:16 = add(r21:20, r31:30) +0xb0 0xde 0x74 0xd3 +# CHECK: r17:16 = add(r21:20, r31:30):sat +0xd0 0xde 0x74 0xd3 +# CHECK: r17:16 = add(r21:20, r31:30):raw:lo +0xf0 0xde 0x74 0xd3 +# CHECK: r17:16 = add(r21:20, r31:30):raw:hi + +# Add halfword +0x11 0xd5 0x1f 0xd5 +# CHECK: r17 = add(r21.l, r31.l) +0x51 0xd5 0x1f 0xd5 +# CHECK: r17 = add(r21.l, r31.h) +0x91 0xd5 0x1f 0xd5 +# CHECK: r17 = add(r21.l, r31.l):sat +0xd1 0xd5 0x1f 0xd5 +# CHECK: r17 = add(r21.l, r31.h):sat +0x11 0xd5 0x5f 0xd5 +# CHECK: r17 = add(r21.l, r31.l):<<16 +0x31 0xd5 0x5f 0xd5 +# CHECK: r17 = add(r21.l, r31.h):<<16 +0x51 0xd5 0x5f 0xd5 +# CHECK: r17 = add(r21.h, r31.l):<<16 +0x71 0xd5 0x5f 0xd5 +# CHECK: r17 = add(r21.h, r31.h):<<16 +0x91 0xd5 0x5f 0xd5 +# CHECK: r17 = add(r21.l, r31.l):sat:<<16 +0xb1 0xd5 0x5f 0xd5 +# CHECK: r17 = add(r21.l, r31.h):sat:<<16 +0xd1 0xd5 0x5f 0xd5 +# CHECK: r17 = add(r21.h, r31.l):sat:<<16 +0xf1 0xd5 0x5f 0xd5 +# CHECK: r17 = add(r21.h, r31.h):sat:<<16 + +# Add or subtract doublewords with carry +0x70 0xde 0xd4 0xc2 +# CHECK: r17:16 = add(r21:20, r31:30, p3):carry +0x70 0xde 0xf4 0xc2 +# CHECK: r17:16 = sub(r21:20, r31:30, p3):carry + +# Logical doublewords +0x90 0xc0 0x94 0x80 +# CHECK: r17:16 = not(r21:20) +0x10 0xde 0xf4 0xd3 +# CHECK: r17:16 = and(r21:20, r31:30) +0x30 0xd4 0xfe 0xd3 +# CHECK: r17:16 = and(r21:20, ~r31:30) +0x50 0xde 0xf4 0xd3 +# CHECK: r17:16 = or(r21:20, r31:30) +0x70 0xd4 0xfe 0xd3 +# CHECK: r17:16 = or(r21:20, ~r31:30) +0x90 0xde 0xf4 0xd3 +# CHECK: r17:16 = xor(r21:20, r31:30) + +# Logical-logical doublewords +0x10 0xde 0x94 0xca +# CHECK: r17:16 ^= xor(r21:20, r31:30) + +# Logical-logical words +0xf1 0xc3 0x15 0xda +# CHECK: r17 |= and(r21, #31) +0xf5 0xc3 0x51 0xda +# CHECK: r17 = or(r21, and(r17, #31)) +0xf1 0xc3 0x95 0xda +# CHECK: r17 |= or(r21, #31) +0x11 0xdf 0x35 0xef +# CHECK: r17 |= and(r21, ~r31) +0x31 0xdf 0x35 0xef +# CHECK: r17 &= and(r21, ~r31) +0x51 0xdf 0x35 0xef +# CHECK: r17 ^= and(r21, ~r31) +0x11 0xdf 0x55 0xef +# CHECK: r17 &= and(r21, r31) +0x31 0xdf 0x55 0xef +# CHECK: r17 &= or(r21, r31) +0x51 0xdf 0x55 0xef +# CHECK: r17 &= xor(r21, r31) +0x71 0xdf 0x55 0xef +# CHECK: r17 |= and(r21, r31) +0x71 0xdf 0x95 0xef +# CHECK: r17 ^= xor(r21, r31) +0x11 0xdf 0xd5 0xef +# CHECK: r17 |= or(r21, r31) +0x31 0xdf 0xd5 0xef +# CHECK: r17 |= xor(r21, r31) +0x51 0xdf 0xd5 0xef +# CHECK: r17 ^= and(r21, r31) +0x71 0xdf 0xd5 0xef +# CHECK: r17 ^= or(r21, r31) + +# Maximum words +0x11 0xdf 0xd5 0xd5 +# CHECK: r17 = max(r21, r31) +0x91 0xdf 0xd5 0xd5 +# CHECK: r17 = maxu(r21, r31) + +# Maximum doublewords +0x90 0xde 0xd4 0xd3 +# CHECK: r17:16 = max(r21:20, r31:30) +0xb0 0xde 0xd4 0xd3 +# CHECK: r17:16 = maxu(r21:20, r31:30) + +# Minimum words +0x11 0xd5 0xbf 0xd5 +# CHECK: r17 = min(r21, r31) +0x91 0xd5 0xbf 0xd5 +# CHECK: r17 = minu(r21, r31) + +# Minimum doublewords +0xd0 0xd4 0xbe 0xd3 +# CHECK: r17:16 = min(r21:20, r31:30) +0xf0 0xd4 0xbe 0xd3 +# CHECK: r17:16 = minu(r21:20, r31:30) + +# Module wrap +0xf1 0xdf 0xf5 0xd3 +# CHECK: r17 = modwrap(r21, r31) + +# Negate +0xb0 0xc0 0x94 0x80 +# CHECK: r17:16 = neg(r21:20) +0xd1 0xc0 0x95 0x8c +# CHECK: r17 = neg(r21):sat + +# Round +0x31 0xc0 0xd4 0x88 +# CHECK: r17 = round(r21:20):sat +0x11 0xdf 0xf5 0x8c +# CHECK: r17 = cround(r21, #31) +0x91 0xdf 0xf5 0x8c +# CHECK: r17 = round(r21, #31) +0xd1 0xdf 0xf5 0x8c +# CHECK: r17 = round(r21, #31):sat +0x11 0xdf 0xd5 0xc6 +# CHECK: r17 = cround(r21, r31) +0x91 0xdf 0xd5 0xc6 +# CHECK: r17 = round(r21, r31) +0xd1 0xdf 0xd5 0xc6 +# CHECK: r17 = round(r21, r31):sat + +# Subtract doublewords +0xf0 0xd4 0x3e 0xd3 +# CHECK: r17:16 = sub(r21:20, r31:30) + +# Subtract and accumulate words +0x71 0xd5 0x1f 0xef +# CHECK: r17 += sub(r21, r31) + +# Subtract halfword +0x11 0xd5 0x3f 0xd5 +# CHECK: r17 = sub(r21.l, r31.l) +0x51 0xd5 0x3f 0xd5 +# CHECK: r17 = sub(r21.l, r31.h) +0x91 0xd5 0x3f 0xd5 +# CHECK: r17 = sub(r21.l, r31.l):sat +0xd1 0xd5 0x3f 0xd5 +# CHECK: r17 = sub(r21.l, r31.h):sat +0x11 0xd5 0x7f 0xd5 +# CHECK: r17 = sub(r21.l, r31.l):<<16 +0x31 0xd5 0x7f 0xd5 +# CHECK: r17 = sub(r21.l, r31.h):<<16 +0x51 0xd5 0x7f 0xd5 +# CHECK: r17 = sub(r21.h, r31.l):<<16 +0x71 0xd5 0x7f 0xd5 +# CHECK: r17 = sub(r21.h, r31.h):<<16 +0x91 0xd5 0x7f 0xd5 +# CHECK: r17 = sub(r21.l, r31.l):sat:<<16 +0xb1 0xd5 0x7f 0xd5 +# CHECK: r17 = sub(r21.l, r31.h):sat:<<16 +0xd1 0xd5 0x7f 0xd5 +# CHECK: r17 = sub(r21.h, r31.l):sat:<<16 +0xf1 0xd5 0x7f 0xd5 +# CHECK: r17 = sub(r21.h, r31.h):sat:<<16 + +# Sign extend word to doubleword +0x10 0xc0 0x55 0x84 +# CHECK: r17:16 = sxtw(r21) + +# Vector absolute value halfwords +0x90 0xc0 0x54 0x80 +# CHECK: r17:16 = vabsh(r21:20) +0xb0 0xc0 0x54 0x80 +# CHECK: r17:16 = vabsh(r21:20):sat + +# Vector absolute value words +0xd0 0xc0 0x54 0x80 +# CHECK: r17:16 = vabsw(r21:20) +0xf0 0xc0 0x54 0x80 +# CHECK: r17:16 = vabsw(r21:20):sat + +# Vector absolute difference halfwords +0x10 0xd4 0x7e 0xe8 +# CHECK: r17:16 = vabsdiffh(r21:20, r31:30) + +# Vector absolute difference words +0x10 0xd4 0x3e 0xe8 +# CHECK: r17:16 = vabsdiffw(r21:20, r31:30) + +# Vector add halfwords +0x50 0xde 0x14 0xd3 +# CHECK: r17:16 = vaddh(r21:20, r31:30) +0x70 0xde 0x14 0xd3 +# CHECK: r17:16 = vaddh(r21:20, r31:30):sat +0x90 0xde 0x14 0xd3 +# CHECK: r17:16 = vadduh(r21:20, r31:30):sat + +# Vector add halfwords with saturate and pack to unsigned bytes +0x31 0xde 0x54 0xc1 +# CHECK: r17 = vaddhub(r21:20, r31:30):sat + +# Vector reduce add unsigned bytes +0x30 0xde 0x54 0xe8 +# CHECK: r17:16 = vraddub(r21:20, r31:30) +0x30 0xde 0x54 0xea +# CHECK: r17:16 += vraddub(r21:20, r31:30) + +# Vector reduce add halfwords +0x31 0xde 0x14 0xe9 +# CHECK: r17 = vradduh(r21:20, r31:30) +0xf1 0xde 0x34 0xe9 +# CHECK: r17 = vraddh(r21:20, r31:30) + +# Vector add bytes +0x10 0xde 0x14 0xd3 +# CHECK: r17:16 = vaddub(r21:20, r31:30) +0x30 0xde 0x14 0xd3 +# CHECK: r17:16 = vaddub(r21:20, r31:30):sat + +# Vector add words +0xb0 0xde 0x14 0xd3 +# CHECK: r17:16 = vaddw(r21:20, r31:30) +0xd0 0xde 0x14 0xd3 +# CHECK: r17:16 = vaddw(r21:20, r31:30):sat + +# Vector average halfwords +0x50 0xde 0x54 0xd3 +# CHECK: r17:16 = vavgh(r21:20, r31:30) +0x70 0xde 0x54 0xd3 +# CHECK: r17:16 = vavgh(r21:20, r31:30):rnd +0x90 0xde 0x54 0xd3 +# CHECK: r17:16 = vavgh(r21:20, r31:30):crnd +0xb0 0xde 0x54 0xd3 +# CHECK: r17:16 = vavguh(r21:20, r31:30) +0xd0 0xde 0x54 0xd3 +# CHECK: r17:16 = vavguh(r21:20, r31:30):rnd +0x10 0xd4 0x9e 0xd3 +# CHECK: r17:16 = vnavgh(r21:20, r31:30) +0x30 0xd4 0x9e 0xd3 +# CHECK: r17:16 = vnavgh(r21:20, r31:30):rnd:sat +0x50 0xd4 0x9e 0xd3 +# CHECK: r17:16 = vnavgh(r21:20, r31:30):crnd:sat + +# Vector average unsigned bytes +0x10 0xde 0x54 0xd3 +# CHECK: r17:16 = vavgub(r21:20, r31:30) +0x30 0xde 0x54 0xd3 +# CHECK: r17:16 = vavgub(r21:20, r31:30):rnd + +# Vector average words +0x10 0xde 0x74 0xd3 +# CHECK: r17:16 = vavgw(r21:20, r31:30) +0x30 0xde 0x74 0xd3 +# CHECK: r17:16 = vavgw(r21:20, r31:30):rnd +0x50 0xde 0x74 0xd3 +# CHECK: r17:16 = vavgw(r21:20, r31:30):crnd +0x70 0xde 0x74 0xd3 +# CHECK: r17:16 = vavguw(r21:20, r31:30) +0x90 0xde 0x74 0xd3 +# CHECK: r17:16 = vavguw(r21:20, r31:30):rnd +0x70 0xd4 0x9e 0xd3 +# CHECK: r17:16 = vnavgw(r21:20, r31:30) +0x90 0xd4 0x9e 0xd3 +# CHECK: r17:16 = vnavgw(r21:20, r31:30):rnd:sat +0xd0 0xd4 0x9e 0xd3 +# CHECK: r17:16 = vnavgw(r21:20, r31:30):crnd:sat + +# Vector conditional negate +0x50 0xdf 0xd4 0xc3 +# CHECK: r17:16 = vcnegh(r21:20, r31) + +0xf0 0xff 0x34 0xcb +# CHECK: r17:16 += vrcnegh(r21:20, r31) + +# Vector maximum bytes +0x10 0xd4 0xde 0xd3 +# CHECK: r17:16 = vmaxub(r21:20, r31:30) +0xd0 0xd4 0xde 0xd3 +# CHECK: r17:16 = vmaxb(r21:20, r31:30) + +# Vector maximum halfwords +0x30 0xd4 0xde 0xd3 +# CHECK: r17:16 = vmaxh(r21:20, r31:30) +0x50 0xd4 0xde 0xd3 +# CHECK: r17:16 = vmaxuh(r21:20, r31:30) + +# Vector reduce maximum halfwords +0x3f 0xd0 0x34 0xcb +# CHECK: r17:16 = vrmaxh(r21:20, r31) +0x3f 0xf0 0x34 0xcb +# CHECK: r17:16 = vrmaxuh(r21:20, r31) + +# Vector reduce maximum words +0x5f 0xd0 0x34 0xcb +# CHECK: r17:16 = vrmaxw(r21:20, r31) +0x5f 0xf0 0x34 0xcb +# CHECK: r17:16 = vrmaxuw(r21:20, r31) + +# Vector maximum words +0xb0 0xd4 0xbe 0xd3 +# CHECK: r17:16 = vmaxuw(r21:20, r31:30) +0x70 0xd4 0xde 0xd3 +# CHECK: r17:16 = vmaxw(r21:20, r31:30) + +# Vector minimum bytes +0x10 0xd4 0xbe 0xd3 +# CHECK: r17:16 = vminub(r21:20, r31:30) +0xf0 0xd4 0xde 0xd3 +# CHECK: r17:16 = vminb(r21:20, r31:30) + +# Vector minimum halfwords +0x30 0xd4 0xbe 0xd3 +# CHECK: r17:16 = vminh(r21:20, r31:30) +0x50 0xd4 0xbe 0xd3 +# CHECK: r17:16 = vminuh(r21:20, r31:30) + +# Vector reduce minimum halfwords +0xbf 0xd0 0x34 0xcb +# CHECK: r17:16 = vrminh(r21:20, r31) +0xbf 0xf0 0x34 0xcb +# CHECK: r17:16 = vrminuh(r21:20, r31) + +# Vector reduce minimum words +0xdf 0xd0 0x34 0xcb +# CHECK: r17:16 = vrminw(r21:20, r31) +0xdf 0xf0 0x34 0xcb +# CHECK: r17:16 = vrminuw(r21:20, r31) + +# Vector minimum words +0x70 0xd4 0xbe 0xd3 +# CHECK: r17:16 = vminw(r21:20, r31:30) +0x90 0xd4 0xbe 0xd3 +# CHECK: r17:16 = vminuw(r21:20, r31:30) + +# Vector sum of absolute differences unsigned bytes +0x50 0xde 0x54 0xe8 +# CHECK: r17:16 = vrsadub(r21:20, r31:30) +0x50 0xde 0x54 0xea +# CHECK: r17:16 += vrsadub(r21:20, r31:30) + +# Vector subtract halfwords +0x50 0xd4 0x3e 0xd3 +# CHECK: r17:16 = vsubh(r21:20, r31:30) +0x70 0xd4 0x3e 0xd3 +# CHECK: r17:16 = vsubh(r21:20, r31:30):sat +0x90 0xd4 0x3e 0xd3 +# CHECK: r17:16 = vsubuh(r21:20, r31:30):sat + +# Vector subtract bytes +0x10 0xd4 0x3e 0xd3 +# CHECK: r17:16 = vsubub(r21:20, r31:30) +0x30 0xd4 0x3e 0xd3 +# CHECK: r17:16 = vsubub(r21:20, r31:30):sat + +# Vector subtract words +0xb0 0xd4 0x3e 0xd3 +# CHECK: r17:16 = vsubw(r21:20, r31:30) +0xd0 0xd4 0x3e 0xd3 +# CHECK: r17:16 = vsubw(r21:20, r31:30):sat |