Imported Upstream version 6.10.0.49

Former-commit-id: 1d6753294b2993e1fbf92de9366bb9544db4189b
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2020-01-16 16:38:04 +00:00
parent d94e79959b
commit 468663ddbb
48518 changed files with 2789335 additions and 61176 deletions

View File

@@ -0,0 +1,84 @@
# RUN: llvm-mc -triple hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.1.1 ALU32/ALU
# Add
0xf1 0xc3 0x15 0xb0
# CHECK: r17 = add(r21,#31)
0x11 0xdf 0x15 0xf3
# CHECK: r17 = add(r21,r31)
0x11 0xdf 0x55 0xf6
# CHECK: r17 = add(r21,r31):sat
# And
0xf1 0xc3 0x15 0x76
# CHECK: r17 = and(r21,#31)
0xf1 0xc3 0x95 0x76
# CHECK: r17 = or(r21,#31)
0x11 0xdf 0x15 0xf1
# CHECK: r17 = and(r21,r31)
0x11 0xdf 0x35 0xf1
# CHECK: r17 = or(r21,r31)
0x11 0xdf 0x75 0xf1
# CHECK: r17 = xor(r21,r31)
0x11 0xd5 0x9f 0xf1
# CHECK: r17 = and(r21,~r31)
0x11 0xd5 0xbf 0xf1
# CHECK: r17 = or(r21,~r31)
# Nop
0x00 0xc0 0x00 0x7f
# CHECK: nop
# Subtract
0xb1 0xc2 0x5f 0x76
# CHECK: r17 = sub(#21,r31)
0x11 0xdf 0x35 0xf3
# CHECK: r17 = sub(r31,r21)
0x11 0xdf 0xd5 0xf6
# CHECK: r17 = sub(r31,r21):sat
# Sign extend
0x11 0xc0 0xbf 0x70
# CHECK: r17 = sxtb(r31)
# Transfer immediate
0x15 0xc0 0x31 0x72
# CHECK: r17.h = #21
0x15 0xc0 0x31 0x71
# CHECK: r17.l = #21
0xf1 0xff 0x5f 0x78
# CHECK: r17 = #32767
0xf1 0xff 0xdf 0x78
# CHECK: r17 = #-1
# Transfer register
0x11 0xc0 0x75 0x70
# CHECK: r17 = r21
# Vector add halfwords
0x11 0xdf 0x15 0xf6
# CHECK: r17 = vaddh(r21,r31)
0x11 0xdf 0x35 0xf6
# CHECK: r17 = vaddh(r21,r31):sat
0x11 0xdf 0x75 0xf6
# CHECK: r17 = vadduh(r21,r31):sat
# Vector average halfwords
0x11 0xdf 0x15 0xf7
# CHECK: r17 = vavgh(r21,r31)
0x11 0xdf 0x35 0xf7
# CHECK: r17 = vavgh(r21,r31):rnd
0x11 0xdf 0x75 0xf7
# CHECK: r17 = vnavgh(r31,r21)
# Vector subtract halfwords
0x11 0xdf 0x95 0xf6
# CHECK: r17 = vsubh(r31,r21)
0x11 0xdf 0xb5 0xf6
# CHECK: r17 = vsubh(r31,r21):sat
0x11 0xdf 0xf5 0xf6
# CHECK: r17 = vsubuh(r31,r21):sat
# Zero extend
0x11 0xc0 0xd5 0x70
# CHECK: r17 = zxth(r21)

View File

@@ -0,0 +1,40 @@
# RUN: llvm-mc -triple hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.1.2 ALU32/PERM
# Combine words in to doublewords
0x11 0xdf 0x95 0xf3
# CHECK: r17 = combine(r31.h,r21.h)
0x11 0xdf 0xb5 0xf3
# CHECK: r17 = combine(r31.h,r21.l)
0x11 0xdf 0xd5 0xf3
# CHECK: r17 = combine(r31.l,r21.h)
0x11 0xdf 0xf5 0xf3
# CHECK: r17 = combine(r31.l,r21.l)
0xb0 0xe2 0x0f 0x7c
# CHECK: r17:16 = combine(#21,#31)
0xb0 0xe2 0x3f 0x73
# CHECK: r17:16 = combine(#21,r31)
0xf0 0xe3 0x15 0x73
# CHECK: r17:16 = combine(r21,#31)
0x10 0xdf 0x15 0xf5
# CHECK: r17:16 = combine(r21,r31)
# Mux
0xf1 0xc3 0x75 0x73
# CHECK: r17 = mux(p3,r21,#31)
0xb1 0xc2 0xff 0x73
# CHECK: r17 = mux(p3,#21,r31)
0xb1 0xe2 0x8f 0x7b
# CHECK: r17 = mux(p3,#21,#31)
0x71 0xdf 0x15 0xf4
# CHECK: r17 = mux(p3,r21,r31)
# Shift word by 16
0x11 0xc0 0x15 0x70
# CHECK: r17 = aslh(r21)
0x11 0xc0 0x35 0x70
# CHECK: r17 = asrh(r21)
# Pack high and low halfwords
0x10 0xdf 0x95 0xf5
# CHECK: r17:16 = packhl(r21,r31)

View File

@@ -0,0 +1,194 @@
# RUN: llvm-mc -triple hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.1.3 ALU32/PRED
# Conditional add
0xf1 0xc3 0x75 0x74
# CHECK: if (p3) r17 = add(r21,#31)
0x03 0x40 0x45 0x85 0xf1 0xe3 0x75 0x74
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = add(r21,#31)
0xf1 0xc3 0xf5 0x74
# CHECK: if (!p3) r17 = add(r21,#31)
0x03 0x40 0x45 0x85 0xf1 0xe3 0xf5 0x74
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = add(r21,#31)
0x71 0xdf 0x15 0xfb
# CHECK: if (p3) r17 = add(r21,r31)
0x03 0x40 0x45 0x85 0x71 0xff 0x15 0xfb
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = add(r21,r31)
0xf1 0xdf 0x15 0xfb
# CHECK: if (!p3) r17 = add(r21,r31)
0x03 0x40 0x45 0x85 0xf1 0xff 0x15 0xfb
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = add(r21,r31)
# Conditional shift halfword
0x11 0xe3 0x15 0x70
# CHECK: if (p3) r17 = aslh(r21)
0x03 0x40 0x45 0x85 0x11 0xe7 0x15 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = aslh(r21)
0x11 0xeb 0x15 0x70
# CHECK: if (!p3) r17 = aslh(r21)
0x03 0x40 0x45 0x85 0x11 0xef 0x15 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = aslh(r21)
0x11 0xe3 0x35 0x70
# CHECK: if (p3) r17 = asrh(r21)
0x03 0x40 0x45 0x85 0x11 0xe7 0x35 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = asrh(r21)
0x11 0xeb 0x35 0x70
# CHECK: if (!p3) r17 = asrh(r21)
0x03 0x40 0x45 0x85 0x11 0xef 0x35 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = asrh(r21)
# Conditional combine
0x70 0xdf 0x15 0xfd
# CHECK: if (p3) r17:16 = combine(r21,r31)
0xf0 0xdf 0x15 0xfd
# CHECK: if (!p3) r17:16 = combine(r21,r31)
0x03 0x40 0x45 0x85 0x70 0xff 0x15 0xfd
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17:16 = combine(r21,r31)
0x03 0x40 0x45 0x85 0xf0 0xff 0x15 0xfd
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17:16 = combine(r21,r31)
# Conditional logical operations
0x71 0xdf 0x15 0xf9
# CHECK: if (p3) r17 = and(r21,r31)
0xf1 0xdf 0x15 0xf9
# CHECK: if (!p3) r17 = and(r21,r31)
0x03 0x40 0x45 0x85 0x71 0xff 0x15 0xf9
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = and(r21,r31)
0x03 0x40 0x45 0x85 0xf1 0xff 0x15 0xf9
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = and(r21,r31)
0x71 0xdf 0x35 0xf9
# CHECK: if (p3) r17 = or(r21,r31)
0xf1 0xdf 0x35 0xf9
# CHECK: if (!p3) r17 = or(r21,r31)
0x03 0x40 0x45 0x85 0x71 0xff 0x35 0xf9
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = or(r21,r31)
0x03 0x40 0x45 0x85 0xf1 0xff 0x35 0xf9
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = or(r21,r31)
0x71 0xdf 0x75 0xf9
# CHECK: if (p3) r17 = xor(r21,r31)
0xf1 0xdf 0x75 0xf9
# CHECK: if (!p3) r17 = xor(r21,r31)
0x03 0x40 0x45 0x85 0x71 0xff 0x75 0xf9
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = xor(r21,r31)
0x03 0x40 0x45 0x85 0xf1 0xff 0x75 0xf9
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = xor(r21,r31)
# Conditional subtract
0x71 0xdf 0x35 0xfb
# CHECK: if (p3) r17 = sub(r31,r21)
0xf1 0xdf 0x35 0xfb
# CHECK: if (!p3) r17 = sub(r31,r21)
0x03 0x40 0x45 0x85 0x71 0xff 0x35 0xfb
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = sub(r31,r21)
0x03 0x40 0x45 0x85 0xf1 0xff 0x35 0xfb
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = sub(r31,r21)
# Conditional sign extend
0x11 0xe3 0xb5 0x70
# CHECK: if (p3) r17 = sxtb(r21)
0x11 0xeb 0xb5 0x70
# CHECK: if (!p3) r17 = sxtb(r21)
0x03 0x40 0x45 0x85 0x11 0xe7 0xb5 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = sxtb(r21)
0x03 0x40 0x45 0x85 0x11 0xef 0xb5 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = sxtb(r21)
0x11 0xe3 0xf5 0x70
# CHECK: if (p3) r17 = sxth(r21)
0x11 0xeb 0xf5 0x70
# CHECK: if (!p3) r17 = sxth(r21)
0x03 0x40 0x45 0x85 0x11 0xe7 0xf5 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = sxth(r21)
0x03 0x40 0x45 0x85 0x11 0xef 0xf5 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = sxth(r21)
# Conditional transfer
0xb1 0xc2 0x60 0x7e
# CHECK: if (p3) r17 = #21
0xb1 0xc2 0xe0 0x7e
# CHECK: if (!p3) r17 = #21
0x03 0x40 0x45 0x85 0xb1 0xe2 0x60 0x7e
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = #21
0x03 0x40 0x45 0x85 0xb1 0xe2 0xe0 0x7e
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = #21
# Conditional zero extend
0x11 0xe3 0x95 0x70
# CHECK: if (p3) r17 = zxtb(r21)
0x11 0xeb 0x95 0x70
# CHECK: if (!p3) r17 = zxtb(r21)
0x03 0x40 0x45 0x85 0x11 0xe7 0x95 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = zxtb(r21)
0x03 0x40 0x45 0x85 0x11 0xef 0x95 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = zxtb(r21)
0x11 0xe3 0xd5 0x70
# CHECK: if (p3) r17 = zxth(r21)
0x11 0xeb 0xd5 0x70
# CHECK: if (!p3) r17 = zxth(r21)
0x03 0x40 0x45 0x85 0x11 0xe7 0xd5 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = zxth(r21)
0x03 0x40 0x45 0x85 0x11 0xef 0xd5 0x70
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = zxth(r21)
# Compare
0xe3 0xc3 0x15 0x75
# CHECK: p3 = cmp.eq(r21,#31)
0xf3 0xc3 0x15 0x75
# CHECK: p3 = !cmp.eq(r21,#31)
0xe3 0xc3 0x55 0x75
# CHECK: p3 = cmp.gt(r21,#31)
0xf3 0xc3 0x55 0x75
# CHECK: p3 = !cmp.gt(r21,#31)
0xe3 0xc3 0x95 0x75
# CHECK: p3 = cmp.gtu(r21,#31)
0xf3 0xc3 0x95 0x75
# CHECK: p3 = !cmp.gtu(r21,#31)
0x03 0xdf 0x15 0xf2
# CHECK: p3 = cmp.eq(r21,r31)
0x13 0xdf 0x15 0xf2
# CHECK: p3 = !cmp.eq(r21,r31)
0x03 0xdf 0x55 0xf2
# CHECK: p3 = cmp.gt(r21,r31)
0x13 0xdf 0x55 0xf2
# CHECK: p3 = !cmp.gt(r21,r31)
0x03 0xdf 0x75 0xf2
# CHECK: p3 = cmp.gtu(r21,r31)
0x13 0xdf 0x75 0xf2
# CHECK: p3 = !cmp.gtu(r21,r31)
# Compare to general register
0xf1 0xe3 0x55 0x73
# CHECK: r17 = cmp.eq(r21,#31)
0xf1 0xe3 0x75 0x73
# CHECK: r17 = !cmp.eq(r21,#31)
0x11 0xdf 0x55 0xf3
# CHECK: r17 = cmp.eq(r21,r31)
0x11 0xdf 0x75 0xf3
# CHECK: r17 = !cmp.eq(r21,r31)

View File

@@ -0,0 +1,78 @@
# RUN: llvm-mc --triple hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.2 CR
# Corner detection acceleration
0x93 0xe1 0x12 0x6b
# CHECK: p3 = !fastcorner9(p2,p1)
0x91 0xe3 0x02 0x6b
# CHECK: p1 = fastcorner9(p2,p3)
# Logical reductions on predicates
0x01 0xc0 0x82 0x6b
# CHECK: p1 = any8(p2)
0x01 0xc0 0xa2 0x6b
# CHECK: p1 = all8(p2)
# Looping instructions
0x08 0xc4 0x15 0x60
# CHECK: loop0
0x08 0xc4 0x35 0x60
# CHECK: loop1
0x68 0xc4 0x00 0x69
# CHECK: loop0
0x68 0xc4 0x20 0x69
# CHECK: loop1
# Add to PC
0x91 0xca 0x49 0x6a
# CHECK: r17 = add(pc,#21)
# Pipelined loop instructions
0x08 0xc4 0xb5 0x60
# CHECK: p3 = sp1loop0
0x08 0xc4 0xd5 0x60
# CHECK: p3 = sp2loop0
0x08 0xc4 0xf5 0x60
# CHECK: p3 = sp3loop0
0xa9 0xc4 0xa0 0x69
# CHECK: p3 = sp1loop0
0xa9 0xc4 0xc0 0x69
# CHECK: p3 = sp2loop0
0xa9 0xc4 0xe0 0x69
# CHECK: p3 = sp3loop0
# Logical operations on predicates
0x01 0xc3 0x02 0x6b
# CHECK: p1 = and(p3,p2)
0xc1 0xc3 0x12 0x6b
# CHECK: p1 = and(p2,and(p3,p3))
0x01 0xc3 0x22 0x6b
# CHECK: p1 = or(p3,p2)
0xc1 0xc3 0x32 0x6b
# CHECK: p1 = and(p2,or(p3,p3))
0x01 0xc3 0x42 0x6b
# CHECK: p1 = xor(p2,p3)
0xc1 0xc3 0x52 0x6b
# CHECK: p1 = or(p2,and(p3,p3))
0x01 0xc2 0x63 0x6b
# CHECK: p1 = and(p2,!p3)
0xc1 0xc3 0x72 0x6b
# CHECK: p1 = or(p2,or(p3,p3))
0xc1 0xc3 0x92 0x6b
# CHECK: p1 = and(p2,and(p3,!p3))
0xc1 0xc3 0xb2 0x6b
# CHECK: p1 = and(p2,or(p3,!p3))
0x01 0xc0 0xc2 0x6b
# CHECK: p1 = not(p2)
0xc1 0xc3 0xd2 0x6b
# CHECK: p1 = or(p2,and(p3,!p3))
0x01 0xc2 0xe3 0x6b
# CHECK: p1 = or(p2,!p3)
0xc1 0xc3 0xf2 0x6b
# CHECK: p1 = or(p2,or(p3,!p3))
# User control register transfer
0x0d 0xc0 0x35 0x62
# CHECK: cs1 = r21
0x11 0xc0 0x0d 0x6a
# CHECK: r17 = cs1

View File

@@ -0,0 +1,4 @@
# RUN: llvm-mc -triple=hexagon -disassemble < %s 2>&1 | FileCheck %s
#CHECK: warning: invalid instruction encoding
0x00 0x40 0x20 0x6c 0x00 0xc0 0x00 0x7f

View File

@@ -0,0 +1,202 @@
# RUN: llvm-mc -triple hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.4 J
# Call subroutine
0x22 0xc0 0x00 0x5a
# CHECK: call
0x22 0xc3 0x00 0x5d
# CHECK: if (p3) call
0x22 0xc3 0x20 0x5d
# CHECK: if (!p3) call
# Compare and jump
0x00 0xc0 0x89 0x11
# CHECK: p0 = cmp.eq(r17,#-1); if (p0.new) jump:nt
0x00 0xc1 0x89 0x11
# CHECK: p0 = cmp.gt(r17,#-1); if (p0.new) jump:nt
0x00 0xc3 0x89 0x11
# CHECK: p0 = tstbit(r17,#0); if (p0.new) jump:nt
0x00 0xe0 0x89 0x11
# CHECK: p0 = cmp.eq(r17,#-1); if (p0.new) jump:t
0x00 0xe1 0x89 0x11
# CHECK: p0 = cmp.gt(r17,#-1); if (p0.new) jump:t
0x00 0xe3 0x89 0x11
# CHECK: p0 = tstbit(r17,#0); if (p0.new) jump:t
0x00 0xc0 0xc9 0x11
# CHECK: p0 = cmp.eq(r17,#-1); if (!p0.new) jump:nt
0x00 0xc1 0xc9 0x11
# CHECK: p0 = cmp.gt(r17,#-1); if (!p0.new) jump:nt
0x00 0xc3 0xc9 0x11
# CHECK: p0 = tstbit(r17,#0); if (!p0.new) jump:nt
0x00 0xe0 0xc9 0x11
# CHECK: p0 = cmp.eq(r17,#-1); if (!p0.new) jump:t
0x00 0xe1 0xc9 0x11
# CHECK: p0 = cmp.gt(r17,#-1); if (!p0.new) jump:t
0x00 0xe3 0xc9 0x11
# CHECK: p0 = tstbit(r17,#0); if (!p0.new) jump:t
0x00 0xd5 0x09 0x10
# CHECK: p0 = cmp.eq(r17,#21); if (p0.new) jump:nt
0x00 0xf5 0x09 0x10
# CHECK: p0 = cmp.eq(r17,#21); if (p0.new) jump:t
0x00 0xd5 0x49 0x10
# CHECK: p0 = cmp.eq(r17,#21); if (!p0.new) jump:nt
0x00 0xf5 0x49 0x10
# CHECK: p0 = cmp.eq(r17,#21); if (!p0.new) jump:t
0x00 0xd5 0x89 0x10
# CHECK: p0 = cmp.gt(r17,#21); if (p0.new) jump:nt
0x00 0xf5 0x89 0x10
# CHECK: p0 = cmp.gt(r17,#21); if (p0.new) jump:t
0x00 0xd5 0xc9 0x10
# CHECK: p0 = cmp.gt(r17,#21); if (!p0.new) jump:nt
0x00 0xf5 0xc9 0x10
# CHECK: p0 = cmp.gt(r17,#21); if (!p0.new) jump:t
0x00 0xd5 0x09 0x11
# CHECK: p0 = cmp.gtu(r17,#21); if (p0.new) jump:nt
0x00 0xf5 0x09 0x11
# CHECK: p0 = cmp.gtu(r17,#21); if (p0.new) jump:t
0x00 0xd5 0x49 0x11
# CHECK: p0 = cmp.gtu(r17,#21); if (!p0.new) jump:nt
0x00 0xf5 0x49 0x11
# CHECK: p0 = cmp.gtu(r17,#21); if (!p0.new) jump:t
0x00 0xc0 0x89 0x13
# CHECK: p1 = cmp.eq(r17,#-1); if (p1.new) jump:nt
0x00 0xc1 0x89 0x13
# CHECK: p1 = cmp.gt(r17,#-1); if (p1.new) jump:nt
0x00 0xc3 0x89 0x13
# CHECK: p1 = tstbit(r17,#0); if (p1.new) jump:nt
0x00 0xe0 0x89 0x13
# CHECK: p1 = cmp.eq(r17,#-1); if (p1.new) jump:t
0x00 0xe1 0x89 0x13
# CHECK: p1 = cmp.gt(r17,#-1); if (p1.new) jump:t
0x00 0xe3 0x89 0x13
# CHECK: p1 = tstbit(r17,#0); if (p1.new) jump:t
0x00 0xc0 0xc9 0x13
# CHECK: p1 = cmp.eq(r17,#-1); if (!p1.new) jump:nt
0x00 0xc1 0xc9 0x13
# CHECK: p1 = cmp.gt(r17,#-1); if (!p1.new) jump:nt
0x00 0xc3 0xc9 0x13
# CHECK: p1 = tstbit(r17,#0); if (!p1.new) jump:nt
0x00 0xe0 0xc9 0x13
# CHECK: p1 = cmp.eq(r17,#-1); if (!p1.new) jump:t
0x00 0xe1 0xc9 0x13
# CHECK: p1 = cmp.gt(r17,#-1); if (!p1.new) jump:t
0x00 0xe3 0xc9 0x13
# CHECK: p1 = tstbit(r17,#0); if (!p1.new) jump:t
0x00 0xd5 0x09 0x12
# CHECK: p1 = cmp.eq(r17,#21); if (p1.new) jump:nt
0x00 0xf5 0x09 0x12
# CHECK: p1 = cmp.eq(r17,#21); if (p1.new) jump:t
0x00 0xd5 0x49 0x12
# CHECK: p1 = cmp.eq(r17,#21); if (!p1.new) jump:nt
0x00 0xf5 0x49 0x12
# CHECK: p1 = cmp.eq(r17,#21); if (!p1.new) jump:t
0x00 0xd5 0x89 0x12
# CHECK: p1 = cmp.gt(r17,#21); if (p1.new) jump:nt
0x00 0xf5 0x89 0x12
# CHECK: p1 = cmp.gt(r17,#21); if (p1.new) jump:t
0x00 0xd5 0xc9 0x12
# CHECK: p1 = cmp.gt(r17,#21); if (!p1.new) jump:nt
0x00 0xf5 0xc9 0x12
# CHECK: p1 = cmp.gt(r17,#21); if (!p1.new) jump:t
0x00 0xd5 0x09 0x13
# CHECK: p1 = cmp.gtu(r17,#21); if (p1.new) jump:nt
0x00 0xf5 0x09 0x13
# CHECK: p1 = cmp.gtu(r17,#21); if (p1.new) jump:t
0x00 0xd5 0x49 0x13
# CHECK: p1 = cmp.gtu(r17,#21); if (!p1.new) jump:nt
0x00 0xf5 0x49 0x13
# CHECK: p1 = cmp.gtu(r17,#21); if (!p1.new) jump:t
0x00 0xcd 0x09 0x14
# CHECK: p0 = cmp.eq(r17,r21); if (p0.new) jump:nt
0x00 0xdd 0x09 0x14
# CHECK: p1 = cmp.eq(r17,r21); if (p1.new) jump:nt
0x00 0xed 0x09 0x14
# CHECK: p0 = cmp.eq(r17,r21); if (p0.new) jump:t
0x00 0xfd 0x09 0x14
# CHECK: p1 = cmp.eq(r17,r21); if (p1.new) jump:t
0x00 0xcd 0x49 0x14
# CHECK: p0 = cmp.eq(r17,r21); if (!p0.new) jump:nt
0x00 0xdd 0x49 0x14
# CHECK: p1 = cmp.eq(r17,r21); if (!p1.new) jump:nt
0x00 0xed 0x49 0x14
# CHECK: p0 = cmp.eq(r17,r21); if (!p0.new) jump:t
0x00 0xfd 0x49 0x14
# CHECK: p1 = cmp.eq(r17,r21); if (!p1.new) jump:t
0x00 0xcd 0x89 0x14
# CHECK: p0 = cmp.gt(r17,r21); if (p0.new) jump:nt
0x00 0xdd 0x89 0x14
# CHECK: p1 = cmp.gt(r17,r21); if (p1.new) jump:nt
0x00 0xed 0x89 0x14
# CHECK: p0 = cmp.gt(r17,r21); if (p0.new) jump:t
0x00 0xfd 0x89 0x14
# CHECK: p1 = cmp.gt(r17,r21); if (p1.new) jump:t
0x00 0xcd 0xc9 0x14
# CHECK: p0 = cmp.gt(r17,r21); if (!p0.new) jump:nt
0x00 0xdd 0xc9 0x14
# CHECK: p1 = cmp.gt(r17,r21); if (!p1.new) jump:nt
0x00 0xed 0xc9 0x14
# CHECK: p0 = cmp.gt(r17,r21); if (!p0.new) jump:t
0x00 0xfd 0xc9 0x14
# CHECK: p1 = cmp.gt(r17,r21); if (!p1.new) jump:t
0x00 0xcd 0x09 0x15
# CHECK: p0 = cmp.gtu(r17,r21); if (p0.new) jump:nt
0x00 0xdd 0x09 0x15
# CHECK: p1 = cmp.gtu(r17,r21); if (p1.new) jump:nt
0x00 0xed 0x09 0x15
# CHECK: p0 = cmp.gtu(r17,r21); if (p0.new) jump:t
0x00 0xfd 0x09 0x15
# CHECK: p1 = cmp.gtu(r17,r21); if (p1.new) jump:t
0x00 0xcd 0x49 0x15
# CHECK: p0 = cmp.gtu(r17,r21); if (!p0.new) jump:nt
0x00 0xdd 0x49 0x15
# CHECK: p1 = cmp.gtu(r17,r21); if (!p1.new) jump:nt
0x00 0xed 0x49 0x15
# CHECK: p0 = cmp.gtu(r17,r21); if (!p0.new) jump:t
0x00 0xfd 0x49 0x15
# CHECK: p1 = cmp.gtu(r17,r21); if (!p1.new) jump:t
# Jump to address
0x22 0xc0 0x00 0x58
# CHECK: jump
0x22 0xc3 0x00 0x5c
# CHECK: if (p3) jump
0x22 0xc3 0x20 0x5c
# CHECK: if (!p3) jump
# Jump to address conditioned on new predicate
0x03 0x40 0x45 0x85 0x00 0xcb 0x00 0x5c
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) jump:nt
0x03 0x40 0x45 0x85 0x00 0xdb 0x00 0x5c
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) jump:t
0x03 0x40 0x45 0x85 0x00 0xcb 0x20 0x5c
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) jump:nt
0x03 0x40 0x45 0x85 0x00 0xdb 0x20 0x5c
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) jump:t
# Jump to address conditioned on register value
0x00 0xc0 0x11 0x61
# CHECK: if (r17!=#0) jump:nt
0x00 0xd0 0x11 0x61
# CHECK: if (r17!=#0) jump:t
0x00 0xc0 0x51 0x61
# CHECK: if (r17>=#0) jump:nt
0x00 0xd0 0x51 0x61
# CHECK: if (r17>=#0) jump:t
0x00 0xc0 0x91 0x61
# CHECK: if (r17==#0) jump:nt
0x00 0xd0 0x91 0x61
# CHECK: if (r17==#0) jump:t
0x00 0xc0 0xd1 0x61
# CHECK: if (r17<=#0) jump:nt
0x00 0xd0 0xd1 0x61
# CHECK: if (r17<=#0) jump:t
# Transfer and jump
0x00 0xd5 0x09 0x16
# CHECK: r17 = #21 ; jump
0x00 0xc9 0x0d 0x17
# CHECK: r17 = r21 ; jump

View File

@@ -0,0 +1,34 @@
# RUN: llvm-mc -triple hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.3 JR
# Call subroutine from register
0x00 0xc0 0xb5 0x50
# CHECK: callr r21
0x00 0xc1 0x15 0x51
# CHECK: if (p1) callr r21
0x00 0xc3 0x35 0x51
# CHECK: if (!p3) callr r21
# Hint an indirect jump address
0x00 0xc0 0xb5 0x52
# CHECK: hintjr(r21)
# Jump to address from register
0x00 0xc0 0x95 0x52
# CHECK: jumpr r21
0x00 0xc1 0x55 0x53
# CHECK: if (p1) jumpr:nt r21
0x03 0x40 0x45 0x85 0x00 0xcb 0x55 0x53
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) jumpr:nt r21
0x03 0x40 0x45 0x85 0x00 0xdb 0x55 0x53
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) jumpr:t r21
0x00 0xc3 0x75 0x53
# CHECK: if (!p3) jumpr:nt r21
0x03 0x40 0x45 0x85 0x00 0xcb 0x75 0x53
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) jumpr:nt r21
0x03 0x40 0x45 0x85 0x00 0xdb 0x75 0x53
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) jumpr:t r21

View File

@@ -0,0 +1,438 @@
# RUN: llvm-mc -triple hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.5 LD
# Load doubleword
0x90 0xff 0xd5 0x3a
# CHECK: r17:16 = memd(r21+r31<<#3)
0xb0 0xc2 0xc0 0x49
# CHECK: r17:16 = memd(gp+#168)
0x02 0x40 0x00 0x00 0x10 0xc5 0xc0 0x49
# CHECK: r17:16 = memd(##168)
0xd0 0xc0 0xd5 0x91
# CHECK: r17:16 = memd(r21+#48)
0xb0 0xe0 0xd5 0x99
# CHECK: r17:16 = memd(r21++#40:circ(m1))
0x10 0xe2 0xd5 0x99
# CHECK: r17:16 = memd(r21++I:circ(m1))
0x00 0x40 0x00 0x00 0x70 0xd7 0xd5 0x9b
# CHECK: r17:16 = memd(r21=##31)
0xb0 0xc0 0xd5 0x9b
# CHECK: r17:16 = memd(r21++#40)
0x10 0xe0 0xd5 0x9d
# CHECK: r17:16 = memd(r21++m1)
0x10 0xe0 0xd5 0x9f
# CHECK: r17:16 = memd(r21++m1:brev)
# Load doubleword conditionally
0xf0 0xff 0xd5 0x30
# CHECK: if (p3) r17:16 = memd(r21+r31<<#3)
0xf0 0xff 0xd5 0x31
# CHECK: if (!p3) r17:16 = memd(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf0 0xff 0xd5 0x32
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17:16 = memd(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf0 0xff 0xd5 0x33
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17:16 = memd(r21+r31<<#3)
0x70 0xd8 0xd5 0x41
# CHECK: if (p3) r17:16 = memd(r21+#24)
0x03 0x40 0x45 0x85 0x70 0xd8 0xd5 0x43
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17:16 = memd(r21+#24)
0x70 0xd8 0xd5 0x45
# CHECK: if (!p3) r17:16 = memd(r21+#24)
0x03 0x40 0x45 0x85 0x70 0xd8 0xd5 0x47
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17:16 = memd(r21+#24)
0xb0 0xe6 0xd5 0x9b
# CHECK: if (p3) r17:16 = memd(r21++#40)
0xb0 0xee 0xd5 0x9b
# CHECK: if (!p3) r17:16 = memd(r21++#40)
0x03 0x40 0x45 0x85 0xb0 0xf6 0xd5 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17:16 = memd(r21++#40)
0x03 0x40 0x45 0x85 0xb0 0xfe 0xd5 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17:16 = memd(r21++#40)
# Load byte
0x91 0xff 0x15 0x3a
# CHECK: r17 = memb(r21+r31<<#3)
0xb1 0xc2 0x00 0x49
# CHECK: r17 = memb(gp+#21)
0x00 0x40 0x00 0x00 0xb1 0xc2 0x00 0x49
# CHECK: r17 = memb(##21)
0xf1 0xc3 0x15 0x91
# CHECK: r17 = memb(r21+#31)
0xb1 0xe0 0x15 0x99
# CHECK: r17 = memb(r21++#5:circ(m1))
0x11 0xe2 0x15 0x99
# CHECK: r17 = memb(r21++I:circ(m1))
0x00 0x40 0x00 0x00 0x71 0xd7 0x15 0x9b
# CHECK: r17 = memb(r21=##31)
0xb1 0xc0 0x15 0x9b
# CHECK: r17 = memb(r21++#5)
0x11 0xe0 0x15 0x9d
# CHECK: r17 = memb(r21++m1)
0x11 0xe0 0x15 0x9f
# CHECK: r17 = memb(r21++m1:brev)
# Load byte conditionally
0xf1 0xff 0x15 0x30
# CHECK: if (p3) r17 = memb(r21+r31<<#3)
0xf1 0xff 0x15 0x31
# CHECK: if (!p3) r17 = memb(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf1 0xff 0x15 0x32
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memb(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf1 0xff 0x15 0x33
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memb(r21+r31<<#3)
0x91 0xdd 0x15 0x41
# CHECK: if (p3) r17 = memb(r21+#44)
0x03 0x40 0x45 0x85 0x91 0xdd 0x15 0x43
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memb(r21+#44)
0x91 0xdd 0x15 0x45
# CHECK: if (!p3) r17 = memb(r21+#44)
0x03 0x40 0x45 0x85 0x91 0xdd 0x15 0x47
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memb(r21+#44)
0xb1 0xe6 0x15 0x9b
# CHECK: if (p3) r17 = memb(r21++#5)
0xb1 0xee 0x15 0x9b
# CHECK: if (!p3) r17 = memb(r21++#5)
0x03 0x40 0x45 0x85 0xb1 0xf6 0x15 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memb(r21++#5)
0x03 0x40 0x45 0x85 0xb1 0xfe 0x15 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memb(r21++#5)
# Load byte into shifted vector
0xf0 0xc3 0x95 0x90
# CHECK: r17:16 = memb_fifo(r21+#31)
0xb0 0xe0 0x95 0x98
# CHECK: r17:16 = memb_fifo(r21++#5:circ(m1))
0x10 0xe2 0x95 0x98
# CHECK: r17:16 = memb_fifo(r21++I:circ(m1))
# Load half into shifted vector
0xf0 0xc3 0x55 0x90
# CHECK: r17:16 = memh_fifo(r21+#62)
0xb0 0xe0 0x55 0x98
# CHECK: r17:16 = memh_fifo(r21++#10:circ(m1))
0x10 0xe2 0x55 0x98
# CHECK: r17:16 = memh_fifo(r21++I:circ(m1))
# Load halfword
0x91 0xff 0x55 0x3a
# CHECK: r17 = memh(r21+r31<<#3)
0xb1 0xc2 0x40 0x49
# CHECK: r17 = memh(gp+#42)
0x00 0x40 0x00 0x00 0x51 0xc5 0x40 0x49
# CHECK: r17 = memh(##42)
0xf1 0xc3 0x55 0x91
# CHECK: r17 = memh(r21+#62)
0xb1 0xe0 0x55 0x99
# CHECK: r17 = memh(r21++#10:circ(m1))
0x11 0xe2 0x55 0x99
# CHECK: r17 = memh(r21++I:circ(m1))
0x00 0x40 0x00 0x00 0x71 0xd7 0x55 0x9b
# CHECK: r17 = memh(r21=##31)
0xb1 0xc0 0x55 0x9b
# CHECK: r17 = memh(r21++#10)
0x11 0xe0 0x55 0x9d
# CHECK: r17 = memh(r21++m1)
0x11 0xe0 0x55 0x9f
# CHECK: r17 = memh(r21++m1:brev)
# Load halfword conditionally
0xf1 0xff 0x55 0x30
# CHECK: if (p3) r17 = memh(r21+r31<<#3)
0xf1 0xff 0x55 0x31
# CHECK: if (!p3) r17 = memh(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf1 0xff 0x55 0x32
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memh(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf1 0xff 0x55 0x33
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memh(r21+r31<<#3)
0xb1 0xe6 0x55 0x9b
# CHECK: if (p3) r17 = memh(r21++#10)
0xb1 0xee 0x55 0x9b
# CHECK: if (!p3) r17 = memh(r21++#10)
0x03 0x40 0x45 0x85 0xb1 0xf6 0x55 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memh(r21++#10)
0x03 0x40 0x45 0x85 0xb1 0xfe 0x55 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memh(r21++#10)
0xf1 0xdb 0x55 0x41
# CHECK: if (p3) r17 = memh(r21+#62)
0xf1 0xdb 0x55 0x45
# CHECK: if (!p3) r17 = memh(r21+#62)
0x03 0x40 0x45 0x85 0xf1 0xdb 0x55 0x43
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memh(r21+#62)
0x03 0x40 0x45 0x85 0xf1 0xdb 0x55 0x47
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memh(r21+#62)
# Load unsigned byte
0x91 0xff 0x35 0x3a
# CHECK: r17 = memub(r21+r31<<#3)
0xb1 0xc2 0x20 0x49
# CHECK: r17 = memub(gp+#21)
0x00 0x40 0x00 0x00 0xb1 0xc2 0x20 0x49
# CHECK: r17 = memub(##21)
0xf1 0xc3 0x35 0x91
# CHECK: r17 = memub(r21+#31)
0xb1 0xe0 0x35 0x99
# CHECK: r17 = memub(r21++#5:circ(m1))
0x11 0xe2 0x35 0x99
# CHECK: r17 = memub(r21++I:circ(m1))
0x00 0x40 0x00 0x00 0x71 0xd7 0x35 0x9b
# CHECK: r17 = memub(r21=##31)
0xb1 0xc0 0x35 0x9b
# CHECK: r17 = memub(r21++#5)
0x11 0xe0 0x35 0x9d
# CHECK: r17 = memub(r21++m1)
0x11 0xe0 0x35 0x9f
# CHECK: r17 = memub(r21++m1:brev)
# Load unsigned byte conditionally
0xf1 0xff 0x35 0x30
# CHECK: if (p3) r17 = memub(r21+r31<<#3)
0xf1 0xff 0x35 0x31
# CHECK: if (!p3) r17 = memub(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf1 0xff 0x35 0x32
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memub(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf1 0xff 0x35 0x33
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memub(r21+r31<<#3)
0xf1 0xdb 0x35 0x41
# CHECK: if (p3) r17 = memub(r21+#31)
0x03 0x40 0x45 0x85 0xf1 0xdb 0x35 0x43
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memub(r21+#31)
0xf1 0xdb 0x35 0x45
# CHECK: if (!p3) r17 = memub(r21+#31)
0x03 0x40 0x45 0x85 0xf1 0xdb 0x35 0x47
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memub(r21+#31)
0xb1 0xe6 0x35 0x9b
# CHECK: if (p3) r17 = memub(r21++#5)
0xb1 0xee 0x35 0x9b
# CHECK: if (!p3) r17 = memub(r21++#5)
0x03 0x40 0x45 0x85 0xb1 0xf6 0x35 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memub(r21++#5)
0x03 0x40 0x45 0x85 0xb1 0xfe 0x35 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memub(r21++#5)
# Load unsigned halfword
0x91 0xff 0x75 0x3a
# CHECK: r17 = memuh(r21+r31<<#3)
0xb1 0xc2 0x60 0x49
# CHECK: r17 = memuh(gp+#42)
0x00 0x40 0x00 0x00 0x51 0xc5 0x60 0x49
# CHECK: r17 = memuh(##42)
0xb1 0xc2 0x75 0x91
# CHECK: r17 = memuh(r21+#42)
0xb1 0xe0 0x75 0x99
# CHECK: r17 = memuh(r21++#10:circ(m1))
0x11 0xe2 0x75 0x99
# CHECK: r17 = memuh(r21++I:circ(m1))
0x00 0x40 0x00 0x00 0x71 0xd7 0x75 0x9b
# CHECK: r17 = memuh(r21=##31)
0xb1 0xc0 0x75 0x9b
# CHECK: r17 = memuh(r21++#10)
0x11 0xe0 0x75 0x9d
# CHECK: r17 = memuh(r21++m1)
0x11 0xe0 0x75 0x9f
# CHECK: r17 = memuh(r21++m1:brev)
# Load unsigned halfword conditionally
0xf1 0xff 0x75 0x30
# CHECK: if (p3) r17 = memuh(r21+r31<<#3)
0xf1 0xff 0x75 0x31
# CHECK: if (!p3) r17 = memuh(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf1 0xff 0x75 0x32
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memuh(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf1 0xff 0x75 0x33
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memuh(r21+r31<<#3)
0xb1 0xda 0x75 0x41
# CHECK: if (p3) r17 = memuh(r21+#42)
0xb1 0xda 0x75 0x45
# CHECK: if (!p3) r17 = memuh(r21+#42)
0x03 0x40 0x45 0x85 0xb1 0xda 0x75 0x43
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memuh(r21+#42)
0x03 0x40 0x45 0x85 0xb1 0xda 0x75 0x47
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memuh(r21+#42)
0xb1 0xe6 0x75 0x9b
# CHECK: if (p3) r17 = memuh(r21++#10)
0xb1 0xee 0x75 0x9b
# CHECK: if (!p3) r17 = memuh(r21++#10)
0x03 0x40 0x45 0x85 0xb1 0xf6 0x75 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memuh(r21++#10)
0x03 0x40 0x45 0x85 0xb1 0xfe 0x75 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memuh(r21++#10)
# Load word
0x91 0xff 0x95 0x3a
# CHECK: r17 = memw(r21+r31<<#3)
0xb1 0xc2 0x80 0x49
# CHECK: r17 = memw(gp+#84)
0x01 0x40 0x00 0x00 0x91 0xc2 0x80 0x49
# CHECK: r17 = memw(##84)
0xb1 0xc2 0x95 0x91
# CHECK: r17 = memw(r21+#84)
0xb1 0xe0 0x95 0x99
# CHECK: r17 = memw(r21++#20:circ(m1))
0x11 0xe2 0x95 0x99
# CHECK: r17 = memw(r21++I:circ(m1))
0x00 0x40 0x00 0x00 0x71 0xd7 0x95 0x9b
# CHECK: r17 = memw(r21=##31)
0xb1 0xc0 0x95 0x9b
# CHECK: r17 = memw(r21++#20)
0x11 0xe0 0x95 0x9d
# CHECK: r17 = memw(r21++m1)
0x11 0xe0 0x95 0x9f
# CHECK: r17 = memw(r21++m1:brev)
# Load word conditionally
0xf1 0xff 0x95 0x30
# CHECK: if (p3) r17 = memw(r21+r31<<#3)
0xf1 0xff 0x95 0x31
# CHECK: if (!p3) r17 = memw(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf1 0xff 0x95 0x32
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memw(r21+r31<<#3)
0x03 0x40 0x45 0x85 0xf1 0xff 0x95 0x33
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memw(r21+r31<<#3)
0xb1 0xda 0x95 0x41
# CHECK: if (p3) r17 = memw(r21+#84)
0xb1 0xda 0x95 0x45
# CHECK: if (!p3) r17 = memw(r21+#84)
0x03 0x40 0x45 0x85 0xb1 0xda 0x95 0x43
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memw(r21+#84)
0x03 0x40 0x45 0x85 0xb1 0xda 0x95 0x47
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memw(r21+#84)
0xb1 0xe6 0x95 0x9b
# CHECK: if (p3) r17 = memw(r21++#20)
0xb1 0xee 0x95 0x9b
# CHECK: if (!p3) r17 = memw(r21++#20)
0x03 0x40 0x45 0x85 0xb1 0xf6 0x95 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) r17 = memw(r21++#20)
0x03 0x40 0x45 0x85 0xb1 0xfe 0x95 0x9b
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) r17 = memw(r21++#20)
# Deallocate stack frame
0x1e 0xc0 0x1e 0x90
# CHECK: deallocframe
# Deallocate stack frame and return
0x1e 0xc0 0x1e 0x96
# CHECK: dealloc_return
0x03 0x40 0x45 0x85 0x1e 0xcb 0x1e 0x96
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) dealloc_return:nt
0x1e 0xd3 0x1e 0x96
# CHECK: if (p3) dealloc_return
0x03 0x40 0x45 0x85 0x1e 0xdb 0x1e 0x96
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) dealloc_return:t
0x03 0x40 0x45 0x85 0x1e 0xeb 0x1e 0x96
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) dealloc_return:nt
0x1e 0xf3 0x1e 0x96
# CHECK: if (!p3) dealloc_return
0x03 0x40 0x45 0x85 0x1e 0xfb 0x1e 0x96
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) dealloc_return:t
# Load and unpack bytes to halfwords
0xf1 0xc3 0x35 0x90
# CHECK: r17 = membh(r21+#62)
0xf1 0xc3 0x75 0x90
# CHECK: r17 = memubh(r21+#62)
0xf0 0xc3 0xb5 0x90
# CHECK: r17:16 = memubh(r21+#124)
0xf0 0xc3 0xf5 0x90
# CHECK: r17:16 = membh(r21+#124)
0xb1 0xe0 0x35 0x98
# CHECK: r17 = membh(r21++#10:circ(m1))
0x11 0xe2 0x35 0x98
# CHECK: r17 = membh(r21++I:circ(m1))
0xb1 0xe0 0x75 0x98
# CHECK: r17 = memubh(r21++#10:circ(m1))
0x11 0xe2 0x75 0x98
# CHECK: r17 = memubh(r21++I:circ(m1))
0xb0 0xe0 0xf5 0x98
# CHECK: r17:16 = membh(r21++#20:circ(m1))
0x10 0xe2 0xf5 0x98
# CHECK: r17:16 = membh(r21++I:circ(m1))
0xb0 0xe0 0xb5 0x98
# CHECK: r17:16 = memubh(r21++#20:circ(m1))
0x10 0xe2 0xb5 0x98
# CHECK: r17:16 = memubh(r21++I:circ(m1))
0x00 0x40 0x00 0x00 0x71 0xd7 0x35 0x9a
# CHECK: r17 = membh(r21=##31)
0xb1 0xc0 0x35 0x9a
# CHECK: r17 = membh(r21++#10)
0x00 0x40 0x00 0x00 0x71 0xd7 0x75 0x9a
# CHECK: r17 = memubh(r21=##31)
0xb1 0xc0 0x75 0x9a
# CHECK: r17 = memubh(r21++#10)
0x00 0x40 0x00 0x00 0x70 0xd7 0xb5 0x9a
# CHECK: r17:16 = memubh(r21=##31)
0xb0 0xc0 0xb5 0x9a
# CHECK: r17:16 = memubh(r21++#20)
0x00 0x40 0x00 0x00 0x70 0xd7 0xf5 0x9a
# CHECK: r17:16 = membh(r21=##31)
0xb0 0xc0 0xf5 0x9a
# CHECK: r17:16 = membh(r21++#20)
0x00 0x40 0x00 0x00 0xf1 0xf7 0x35 0x9c
# CHECK: r17 = membh(r21<<#3+##31)
0x11 0xe0 0x35 0x9c
# CHECK: r17 = membh(r21++m1)
0x00 0x40 0x00 0x00 0xf1 0xf7 0x75 0x9c
# CHECK: r17 = memubh(r21<<#3+##31)
0x11 0xe0 0x75 0x9c
# CHECK: r17 = memubh(r21++m1)
0x00 0x40 0x00 0x00 0xf0 0xf7 0xf5 0x9c
# CHECK: r17:16 = membh(r21<<#3+##31)
0x10 0xe0 0xf5 0x9c
# CHECK: r17:16 = membh(r21++m1)
0x00 0x40 0x00 0x00 0xf0 0xf7 0xb5 0x9c
# CHECK: r17:16 = memubh(r21<<#3+##31)
0x11 0xe0 0x35 0x9c
# CHECK: r17 = membh(r21++m1)
0x11 0xe0 0x75 0x9c
# CHECK: r17 = memubh(r21++m1)
0x10 0xe0 0xf5 0x9c
# CHECK: r17:16 = membh(r21++m1)
0x10 0xe0 0xb5 0x9c
# CHECK: r17:16 = memubh(r21++m1)
0x11 0xe0 0x35 0x9e
# CHECK: r17 = membh(r21++m1:brev)
0x11 0xe0 0x75 0x9e
# CHECK: r17 = memubh(r21++m1:brev)
0x10 0xe0 0xb5 0x9e
# CHECK: r17:16 = memubh(r21++m1:brev)
0x10 0xe0 0xf5 0x9e
# CHECK: r17:16 = membh(r21++m1:brev)

View File

@@ -0,0 +1,3 @@
if not 'Hexagon' in config.root.targets:
config.unsupported = True

View File

@@ -0,0 +1,56 @@
# RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.6 MEMOP
# Operation on memory byte
0x95 0xd9 0x11 0x3e
# CHECK: memb(r17+#51) += r21
0xb5 0xd9 0x11 0x3e
# CHECK: memb(r17+#51) -= r21
0xd5 0xd9 0x11 0x3e
# CHECK: memb(r17+#51) &= r21
0xf5 0xd9 0x11 0x3e
# CHECK: memb(r17+#51) |= r21
0x95 0xd9 0x11 0x3f
# CHECK: memb(r17+#51) += #21
0xb5 0xd9 0x11 0x3f
# CHECK: memb(r17+#51) -= #21
0xd5 0xd9 0x11 0x3f
# CHECK: memb(r17+#51) = clrbit(#21)
0xf5 0xd9 0x11 0x3f
# CHECK: memb(r17+#51) = setbit(#21)
# Operation on memory halfword
0x95 0xd9 0x31 0x3e
# CHECK: memh(r17+#102) += r21
0xb5 0xd9 0x31 0x3e
# CHECK: memh(r17+#102) -= r21
0xd5 0xd9 0x31 0x3e
# CHECK: memh(r17+#102) &= r21
0xf5 0xd9 0x31 0x3e
# CHECK: memh(r17+#102) |= r21
0x95 0xd9 0x31 0x3f
# CHECK: memh(r17+#102) += #21
0xb5 0xd9 0x31 0x3f
# CHECK: memh(r17+#102) -= #21
0xd5 0xd9 0x31 0x3f
# CHECK: memh(r17+#102) = clrbit(#21)
0xf5 0xd9 0x31 0x3f
# CHECK: memh(r17+#102) = setbit(#21)
# Operation on memory word
0x95 0xd9 0x51 0x3e
# CHECK: memw(r17+#204) += r21
0xb5 0xd9 0x51 0x3e
# CHECK: memw(r17+#204) -= r21
0xd5 0xd9 0x51 0x3e
# CHECK: memw(r17+#204) &= r21
0xf5 0xd9 0x51 0x3e
# CHECK: memw(r17+#204) |= r21
0x95 0xd9 0x51 0x3f
# CHECK: memw(r17+#204) += #21
0xb5 0xd9 0x51 0x3f
# CHECK: memw(r17+#204) -= #21
0xd5 0xd9 0x51 0x3f
# CHECK: memw(r17+#204) = clrbit(#21)
0xf5 0xd9 0x51 0x3f
# CHECK: memw(r17+#204) = setbit(#21)

View File

@@ -0,0 +1,136 @@
# RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.7.1 NV/J
# Jump to address conditioned on new register value
0x11 0x40 0x71 0x70 0x92 0xd5 0x02 0x20
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.eq(r17.new,r21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x02 0x20
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.eq(r17.new,r21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x42 0x20
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.eq(r17.new,r21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x42 0x20
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.eq(r17.new,r21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x82 0x20
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gt(r17.new,r21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x82 0x20
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gt(r17.new,r21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0xc2 0x20
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gt(r17.new,r21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0xc2 0x20
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gt(r17.new,r21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x02 0x21
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gtu(r17.new,r21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x02 0x21
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gtu(r17.new,r21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x42 0x21
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gtu(r17.new,r21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x42 0x21
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gtu(r17.new,r21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x82 0x21
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gt(r21,r17.new)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x82 0x21
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gt(r21,r17.new)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0xc2 0x21
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gt(r21,r17.new)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0xc2 0x21
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gt(r21,r17.new)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x02 0x22
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gtu(r21,r17.new)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x02 0x22
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gtu(r21,r17.new)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x42 0x22
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gtu(r21,r17.new)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x42 0x22
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gtu(r21,r17.new)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x02 0x24
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.eq(r17.new,#21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x02 0x24
# CHECK: r17 = r17
# CHECK-NETX: if (cmp.eq(r17.new,#21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x42 0x24
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.eq(r17.new,#21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x42 0x24
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.eq(r17.new,#21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x82 0x24
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gt(r17.new,#21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x82 0x24
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gt(r17.new,#21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0xc2 0x24
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gt(r17.new,#21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0xc2 0x24
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gt(r17.new,#21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x02 0x25
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gtu(r17.new,#21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x02 0x25
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gtu(r17.new,#21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xd5 0x42 0x25
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gtu(r17.new,#21)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xf5 0x42 0x25
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gtu(r17.new,#21)) jump:t
0x11 0x40 0x71 0x70 0x92 0xc0 0x82 0x25
# CHECK: r17 = r17
# CHECK-NEXT: if (tstbit(r17.new,#0)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xe0 0x82 0x25
# CHECK: r17 = r17
# CHECK-NEXT: if (tstbit(r17.new,#0)) jump:t
0x11 0x40 0x71 0x70 0x92 0xc0 0xc2 0x25
# CHECK: r17 = r17
# CHECK-NEXT: if (!tstbit(r17.new,#0)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xe0 0xc2 0x25
# CHECK: r17 = r17
# CHECK-NEXT: if (!tstbit(r17.new,#0)) jump:t
0x11 0x40 0x71 0x70 0x92 0xc0 0x02 0x26
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.eq(r17.new,#-1)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xe0 0x02 0x26
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.eq(r17.new,#-1)) jump:t
0x11 0x40 0x71 0x70 0x92 0xc0 0x42 0x26
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.eq(r17.new,#-1)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xe0 0x42 0x26
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.eq(r17.new,#-1)) jump:t
0x11 0x40 0x71 0x70 0x92 0xc0 0x82 0x26
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gt(r17.new,#-1)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xe0 0x82 0x26
# CHECK: r17 = r17
# CHECK-NEXT: if (cmp.gt(r17.new,#-1)) jump:t
0x11 0x40 0x71 0x70 0x92 0xc0 0xc2 0x26
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gt(r17.new,#-1)) jump:nt
0x11 0x40 0x71 0x70 0x92 0xe0 0xc2 0x26
# CHECK: r17 = r17
# CHECK-NEXT: if (!cmp.gt(r17.new,#-1)) jump:t

View File

@@ -0,0 +1,212 @@
# RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.7.2 NV/ST
# Store new-value byte
0x1f 0x40 0x7f 0x70 0x82 0xf5 0xb1 0x3b
# CHECK: r31 = r31
# CHECK-NEXT: memb(r17+r21<<#3) = r31.new
0x1f 0x40 0x7f 0x70 0x11 0xc2 0xa0 0x48
# CHECK: r31 = r31
# CHECK-NEXT: memb(gp+#17) = r31.new
0x1f 0x40 0x7f 0x70 0x15 0xc2 0xb1 0xa1
# CHECK: r31 = r31
# CHECK-NEXT: memb(r17+#21) = r31.new
0x1f 0x40 0x7f 0x70 0x02 0xe2 0xb1 0xa9
# CHECK: r31 = r31
# CHECK-NEXT: memb(r17++I:circ(m1)) = r31.new
0x1f 0x40 0x7f 0x70 0x28 0xe2 0xb1 0xa9
# CHECK: r31 = r31
# CHECK-NEXT: memb(r17++#5:circ(m1)) = r31.new
0x1f 0x40 0x7f 0x70 0x28 0xc2 0xb1 0xab
# CHECK: r31 = r31
# CHECK-NEXT: memb(r17++#5) = r31.new
0x1f 0x40 0x7f 0x70 0x00 0xe2 0xb1 0xad
# CHECK: r31 = r31
# CHECK-NEXT: memb(r17++m1) = r31.new
0x1f 0x40 0x7f 0x70 0x00 0xe2 0xb1 0xaf
# CHECK: r31 = r31
# CHECK-NEXT: memb(r17++m1:brev) = r31.new
# Store new-value byte conditionally
0x1f 0x40 0x7f 0x70 0xe2 0xf5 0xb1 0x34
# CHECK: r31 = r31
# CHECK-NEXT: if (p3) memb(r17+r21<<#3) = r31.new
0x1f 0x40 0x7f 0x70 0xe2 0xf5 0xb1 0x35
# CHECK: r31 = r31
# CHECK-NEXT: if (!p3) memb(r17+r21<<#3) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xe2 0xf5 0xb1 0x36
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (p3.new) memb(r17+r21<<#3) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xe2 0xf5 0xb1 0x37
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (!p3.new) memb(r17+r21<<#3) = r31.new
0x1f 0x40 0x7f 0x70 0xab 0xc2 0xb1 0x40
# CHECK: r31 = r31
# CHECK-NEXT: if (p3) memb(r17+#21) = r31.new
0x1f 0x40 0x7f 0x70 0xab 0xc2 0xb1 0x44
# CHECK: r31 = r31
# CHECK-NEXT: if (!p3) memb(r17+#21) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xab 0xc2 0xb1 0x42
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (p3.new) memb(r17+#21) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xab 0xc2 0xb1 0x46
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (!p3.new) memb(r17+#21) = r31.new
0x1f 0x40 0x7f 0x70 0x2b 0xe2 0xb1 0xab
# CHECK: r31 = r31
# CHECK-NEXT: if (p3) memb(r17++#5) = r31.new
0x1f 0x40 0x7f 0x70 0x2f 0xe2 0xb1 0xab
# CHECK: r31 = r31
# CHECK-NEXT: if (!p3) memb(r17++#5) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xab 0xe2 0xb1 0xab
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (p3.new) memb(r17++#5) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xaf 0xe2 0xb1 0xab
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (!p3.new) memb(r17++#5) = r31.new
# Store new-value halfword
0x1f 0x40 0x7f 0x70 0x8a 0xf5 0xb1 0x3b
# CHECK: r31 = r31
# CHECK-NEXT: memh(r17+r21<<#3) = r31.new
0x1f 0x40 0x7f 0x70 0x15 0xca 0xa0 0x48
# CHECK: r31 = r31
# CHECK-NEXT: memh(gp+#42) = r31.new
0x1f 0x40 0x7f 0x70 0x15 0xca 0xb1 0xa1
# CHECK: r31 = r31
# CHECK-NEXT: memh(r17+#42) = r31.new
0x1f 0x40 0x7f 0x70 0x02 0xea 0xb1 0xa9
# CHECK: r31 = r31
# CHECK-NEXT: memh(r17++I:circ(m1)) = r31.new
0x1f 0x40 0x7f 0x70 0x28 0xea 0xb1 0xa9
# CHECK: r31 = r31
# CHECK-NEXT: memh(r17++#10:circ(m1)) = r31.new
0x1f 0x40 0x7f 0x70 0x28 0xca 0xb1 0xab
# CHECK: r31 = r31
# CHECK-NEXT: memh(r17++#10) = r31.new
0x1f 0x40 0x7f 0x70 0x00 0xea 0xb1 0xad
# CHECK: r31 = r31
# CHECK-NEXT: memh(r17++m1) = r31.new
0x1f 0x40 0x7f 0x70 0x00 0xea 0xb1 0xaf
# CHECK: r31 = r31
# CHECK-NEXT: memh(r17++m1:brev) = r31.new
# Store new-value halfword conditionally
0x1f 0x40 0x7f 0x70 0xea 0xf5 0xb1 0x34
# CHECK: r31 = r31
# CHECK-NEXT: if (p3) memh(r17+r21<<#3) = r31.new
0x1f 0x40 0x7f 0x70 0xea 0xf5 0xb1 0x35
# CHECK: r31 = r31
# CHECK-NEXT: if (!p3) memh(r17+r21<<#3) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xea 0xf5 0xb1 0x36
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (p3.new) memh(r17+r21<<#3) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xea 0xf5 0xb1 0x37
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (!p3.new) memh(r17+r21<<#3) = r31.new
0x1f 0x40 0x7f 0x70 0xab 0xca 0xb1 0x40
# CHECK: r31 = r31
# CHECK-NEXT: if (p3) memh(r17+#42) = r31.new
0x1f 0x40 0x7f 0x70 0xab 0xca 0xb1 0x44
# CHECK: r31 = r31
# CHECK-NEXT: if (!p3) memh(r17+#42) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xab 0xca 0xb1 0x42
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (p3.new) memh(r17+#42) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xab 0xca 0xb1 0x46
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (!p3.new) memh(r17+#42) = r31.new
0x1f 0x40 0x7f 0x70 0x2b 0xea 0xb1 0xab
# CHECK: r31 = r31
# CHECK-NEXT: if (p3) memh(r17++#10) = r31.new
0x1f 0x40 0x7f 0x70 0x2f 0xea 0xb1 0xab
# CHECK: r31 = r31
# CHECK-NEXT: if (!p3) memh(r17++#10) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xab 0xea 0xb1 0xab
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (p3.new) memh(r17++#10) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xaf 0xea 0xb1 0xab
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (!p3.new) memh(r17++#10) = r31.new
# Store new-value word
0x1f 0x40 0x7f 0x70 0x92 0xf5 0xb1 0x3b
# CHECK: r31 = r31
# CHECK-NEXT: memw(r17+r21<<#3) = r31.new
0x1f 0x40 0x7f 0x70 0x15 0xd2 0xa0 0x48
# CHECK: r31 = r31
# CHECK-NEXT: memw(gp+#84) = r31.new
0x1f 0x40 0x7f 0x70 0x15 0xd2 0xb1 0xa1
# CHECK: r31 = r31
# CHECK-NEXT: memw(r17+#84) = r31.new
0x1f 0x40 0x7f 0x70 0x02 0xf2 0xb1 0xa9
# CHECK: r31 = r31
# CHECK-NEXT: memw(r17++I:circ(m1)) = r31.new
0x1f 0x40 0x7f 0x70 0x28 0xf2 0xb1 0xa9
# CHECK: r31 = r31
# CHECK-NEXT: memw(r17++#20:circ(m1)) = r31.new
0x1f 0x40 0x7f 0x70 0x28 0xd2 0xb1 0xab
# CHECK: r31 = r31
# CHECK-NEXT: memw(r17++#20) = r31.new
0x1f 0x40 0x7f 0x70 0x00 0xf2 0xb1 0xad
# CHECK: r31 = r31
# CHECK-NEXT: memw(r17++m1) = r31.new
0x1f 0x40 0x7f 0x70 0x00 0xf2 0xb1 0xaf
# CHECK: r31 = r31
# CHECK-NEXT: memw(r17++m1:brev) = r31.new
# Store new-value word conditionally
0x1f 0x40 0x7f 0x70 0xf2 0xf5 0xb1 0x34
# CHECK: r31 = r31
# CHECK-NEXT: if (p3) memw(r17+r21<<#3) = r31.new
0x1f 0x40 0x7f 0x70 0xf2 0xf5 0xb1 0x35
# CHECK: r31 = r31
# CHECK-NEXT: if (!p3) memw(r17+r21<<#3) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xf2 0xf5 0xb1 0x36
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (p3.new) memw(r17+r21<<#3) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xf2 0xf5 0xb1 0x37
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (!p3.new) memw(r17+r21<<#3) = r31.new
0x1f 0x40 0x7f 0x70 0xab 0xd2 0xb1 0x40
# CHECK: r31 = r31
# CHECK-NEXT: if (p3) memw(r17+#84) = r31.new
0x1f 0x40 0x7f 0x70 0xab 0xd2 0xb1 0x44
# CHECK: r31 = r31
# CHECK-NEXT: if (!p3) memw(r17+#84) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xab 0xd2 0xb1 0x42
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (p3.new) memw(r17+#84) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xab 0xd2 0xb1 0x46
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (!p3.new) memw(r17+#84) = r31.new
0x1f 0x40 0x7f 0x70 0x2b 0xf2 0xb1 0xab
# CHECK: r31 = r31
# CHECK-NEXT: if (p3) memw(r17++#20) = r31.new
0x1f 0x40 0x7f 0x70 0x2f 0xf2 0xb1 0xab
# CHECK: r31 = r31
# CHECK-NEXT: if (!p3) memw(r17++#20) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xab 0xf2 0xb1 0xab
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (p3.new) memw(r17++#20) = r31.new
0x03 0x40 0x45 0x85 0x1f 0x40 0x7f 0x70 0xaf 0xf2 0xb1 0xab
# CHECK: p3 = r5
# CHECK-NEXT: r31 = r31
# CHECK-NEXT: if (!p3.new) memw(r17++#20) = r31.new

View File

@@ -0,0 +1,360 @@
# RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.8 ST
# Store doubleword
0x9e 0xf5 0xd1 0x3b
# CHECK: memd(r17+r21<<#3) = r31:30
0x28 0xd4 0xc0 0x48
# CHECK: memd(gp+#320) = r21:20
0x02 0x40 0x00 0x00 0x28 0xd4 0xc0 0x48
# CHECK: memd(##168) = r21:20
0x15 0xd4 0xd1 0xa1
# CHECK: memd(r17+#168) = r21:20
0x02 0xf4 0xd1 0xa9
# CHECK: memd(r17++I:circ(m1)) = r21:20
0x28 0xf4 0xd1 0xa9
# CHECK: memd(r17++#40:circ(m1)) = r21:20
0x28 0xd4 0xd1 0xab
# CHECK: memd(r17++#40) = r21:20
0x00 0x40 0x00 0x00 0xd5 0xfe 0xd1 0xad
# CHECK: memd(r17<<#3+##21) = r31:30
0x00 0xf4 0xd1 0xad
# CHECK: memd(r17++m1) = r21:20
0x00 0xf4 0xd1 0xaf
# CHECK: memd(r17++m1:brev) = r21:20
# Store doubleword conditionally
0xfe 0xf5 0xd1 0x34
# CHECK: if (p3) memd(r17+r21<<#3) = r31:30
0xfe 0xf5 0xd1 0x35
# CHECK: if (!p3) memd(r17+r21<<#3) = r31:30
0x03 0x40 0x45 0x85 0xfe 0xf5 0xd1 0x36
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memd(r17+r21<<#3) = r31:30
0x03 0x40 0x45 0x85 0xfe 0xf5 0xd1 0x37
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memd(r17+r21<<#3) = r31:30
0xab 0xde 0xd1 0x40
# CHECK: if (p3) memd(r17+#168) = r31:30
0xab 0xde 0xd1 0x44
# CHECK: if (!p3) memd(r17+#168) = r31:30
0x03 0x40 0x45 0x85 0xab 0xde 0xd1 0x42
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memd(r17+#168) = r31:30
0x03 0x40 0x45 0x85 0xab 0xde 0xd1 0x46
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memd(r17+#168) = r31:30
0x2b 0xf4 0xd1 0xab
# CHECK: if (p3) memd(r17++#40) = r21:20
0x2f 0xf4 0xd1 0xab
# CHECK: if (!p3) memd(r17++#40) = r21:20
0x03 0x40 0x45 0x85 0xab 0xf4 0xd1 0xab
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memd(r17++#40) = r21:20
0x03 0x40 0x45 0x85 0xaf 0xf4 0xd1 0xab
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memd(r17++#40) = r21:20
0x02 0x40 0x00 0x00 0xc3 0xd4 0xc2 0xaf
# CHECK: if (p3) memd(##168) = r21:20
0x02 0x40 0x00 0x00 0xc7 0xd4 0xc2 0xaf
# CHECK: if (!p3) memd(##168) = r21:20
0x03 0x40 0x45 0x85 0x02 0x40 0x00 0x00 0xc3 0xf4 0xc2 0xaf
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memd(##168) = r21:20
0x03 0x40 0x45 0x85 0x02 0x40 0x00 0x00 0xc7 0xf4 0xc2 0xaf
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memd(##168) = r21:20
# Store byte
0x9f 0xf5 0x11 0x3b
# CHECK: memb(r17+r21<<#3) = r31
0x9f 0xca 0x11 0x3c
# CHECK: memb(r17+#21) = #31
0x15 0xd5 0x00 0x48
# CHECK: memb(gp+#21) = r21
0x00 0x40 0x00 0x00 0x15 0xd5 0x00 0x48
# CHECK: memb(##21) = r21
0x15 0xd5 0x11 0xa1
# CHECK: memb(r17+#21) = r21
0x02 0xf5 0x11 0xa9
# CHECK: memb(r17++I:circ(m1)) = r21
0x28 0xf5 0x11 0xa9
# CHECK: memb(r17++#5:circ(m1)) = r21
0x28 0xd5 0x11 0xab
# CHECK: memb(r17++#5) = r21
0x00 0x40 0x00 0x00 0xd5 0xff 0x11 0xad
# CHECK: memb(r17<<#3+##21) = r31
0x00 0xf5 0x11 0xad
# CHECK: memb(r17++m1) = r21
0x00 0xf5 0x11 0xaf
# CHECK: memb(r17++m1:brev) = r21
# Store byte conditionally
0xff 0xf5 0x11 0x34
# CHECK: if (p3) memb(r17+r21<<#3) = r31
0xff 0xf5 0x11 0x35
# CHECK: if (!p3) memb(r17+r21<<#3) = r31
0x03 0x40 0x45 0x85 0xff 0xf5 0x11 0x36
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memb(r17+r21<<#3) = r31
0x03 0x40 0x45 0x85 0xff 0xf5 0x11 0x37
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memb(r17+r21<<#3) = r31
0xff 0xca 0x11 0x38
# CHECK: if (p3) memb(r17+#21) = #31
0xff 0xca 0x91 0x38
# CHECK: if (!p3) memb(r17+#21) = #31
0x03 0x40 0x45 0x85 0xff 0xca 0x11 0x39
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memb(r17+#21) = #31
0x03 0x40 0x45 0x85 0xff 0xca 0x91 0x39
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memb(r17+#21) = #31
0xab 0xdf 0x11 0x40
# CHECK: if (p3) memb(r17+#21) = r31
0xab 0xdf 0x11 0x44
# CHECK: if (!p3) memb(r17+#21) = r31
0x03 0x40 0x45 0x85 0xab 0xdf 0x11 0x42
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memb(r17+#21) = r31
0x03 0x40 0x45 0x85 0xab 0xdf 0x11 0x46
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memb(r17+#21) = r31
0x2b 0xf5 0x11 0xab
# CHECK: if (p3) memb(r17++#5) = r21
0x2f 0xf5 0x11 0xab
# CHECK: if (!p3) memb(r17++#5) = r21
0x03 0x40 0x45 0x85 0xab 0xf5 0x11 0xab
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memb(r17++#5) = r21
0x03 0x40 0x45 0x85 0xaf 0xf5 0x11 0xab
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memb(r17++#5) = r21
0x00 0x40 0x00 0x00 0xab 0xd5 0x01 0xaf
# CHECK: if (p3) memb(##21) = r21
0x00 0x40 0x00 0x00 0xaf 0xd5 0x01 0xaf
# CHECK: if (!p3) memb(##21) = r21
0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xab 0xf5 0x01 0xaf
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memb(##21) = r21
0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xaf 0xf5 0x01 0xaf
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memb(##21) = r21
# Store halfword
0x9f 0xf5 0x51 0x3b
# CHECK: memh(r17+r21<<#3) = r31
0x9f 0xf5 0x71 0x3b
# CHECK: memh(r17+r21<<#3) = r31.h
0x95 0xcf 0x31 0x3c
# CHECK: memh(r17+#62) = #21
0x00 0x40 0x00 0x00 0x2a 0xd5 0x40 0x48
# CHECK: memh(##42) = r21
0x00 0x40 0x00 0x00 0x2a 0xd5 0x60 0x48
# CHECK: memh(##42) = r21.h
0x2a 0xd5 0x40 0x48
# CHECK: memh(gp+#84) = r21
0x2a 0xd5 0x60 0x48
# CHECK: memh(gp+#84) = r21.h
0x15 0xdf 0x51 0xa1
# CHECK: memh(r17+#42) = r31
0x15 0xdf 0x71 0xa1
# CHECK: memh(r17+#42) = r31.h
0x02 0xf5 0x51 0xa9
# CHECK: memh(r17++I:circ(m1)) = r21
0x28 0xf5 0x51 0xa9
# CHECK: memh(r17++#10:circ(m1)) = r21
0x02 0xf5 0x71 0xa9
# CHECK: memh(r17++I:circ(m1)) = r21.h
0x28 0xf5 0x71 0xa9
# CHECK: memh(r17++#10:circ(m1)) = r21.h
0x28 0xd5 0x51 0xab
# CHECK: memh(r17++#10) = r21
0x00 0x40 0x00 0x00 0xd5 0xff 0x51 0xad
# CHECK: memh(r17<<#3+##21) = r31
0x28 0xd5 0x71 0xab
# CHECK: memh(r17++#10) = r21.h
0x00 0x40 0x00 0x00 0xd5 0xff 0x71 0xad
# CHECK: memh(r17<<#3+##21) = r31.h
0x00 0xf5 0x51 0xad
# CHECK: memh(r17++m1) = r21
0x00 0xf5 0x71 0xad
# CHECK: memh(r17++m1) = r21.h
0x00 0xf5 0x51 0xaf
# CHECK: memh(r17++m1:brev) = r21
0x00 0xf5 0x71 0xaf
# CHECK: memh(r17++m1:brev) = r21.h
# Store halfword conditionally
0xff 0xf5 0x51 0x34
# CHECK: if (p3) memh(r17+r21<<#3) = r31
0xff 0xf5 0x71 0x34
# CHECK: if (p3) memh(r17+r21<<#3) = r31.h
0xff 0xf5 0x51 0x35
# CHECK: if (!p3) memh(r17+r21<<#3) = r31
0xff 0xf5 0x71 0x35
# CHECK: if (!p3) memh(r17+r21<<#3) = r31.h
0x03 0x40 0x45 0x85 0xff 0xf5 0x51 0x36
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memh(r17+r21<<#3) = r31
0x03 0x40 0x45 0x85 0xff 0xf5 0x71 0x36
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memh(r17+r21<<#3) = r31.h
0x03 0x40 0x45 0x85 0xff 0xf5 0x51 0x37
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memh(r17+r21<<#3) = r31
0x03 0x40 0x45 0x85 0xff 0xf5 0x71 0x37
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memh(r17+r21<<#3) = r31.h
0xf5 0xcf 0x31 0x38
# CHECK: if (p3) memh(r17+#62) = #21
0xf5 0xcf 0xb1 0x38
# CHECK: if (!p3) memh(r17+#62) = #21
0x03 0x40 0x45 0x85 0xf5 0xcf 0x31 0x39
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memh(r17+#62) = #21
0x03 0x40 0x45 0x85 0xf5 0xcf 0xb1 0x39
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memh(r17+#62) = #21
0xfb 0xd5 0x51 0x40
# CHECK: if (p3) memh(r17+#62) = r21
0xfb 0xd5 0x71 0x40
# CHECK: if (p3) memh(r17+#62) = r21.h
0xfb 0xd5 0x51 0x44
# CHECK: if (!p3) memh(r17+#62) = r21
0xfb 0xd5 0x71 0x44
# CHECK: if (!p3) memh(r17+#62) = r21.h
0x03 0x40 0x45 0x85 0xfb 0xd5 0x51 0x42
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memh(r17+#62) = r21
0x03 0x40 0x45 0x85 0xfb 0xd5 0x71 0x42
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memh(r17+#62) = r21.h
0x03 0x40 0x45 0x85 0xfb 0xd5 0x51 0x46
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memh(r17+#62) = r21
0x03 0x40 0x45 0x85 0xfb 0xd5 0x71 0x46
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memh(r17+#62) = r21.h
0x2b 0xf5 0x51 0xab
# CHECK: if (p3) memh(r17++#10) = r21
0x2f 0xf5 0x51 0xab
# CHECK: if (!p3) memh(r17++#10) = r21
0x03 0x40 0x45 0x85 0xab 0xf5 0x51 0xab
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memh(r17++#10) = r21
0x03 0x40 0x45 0x85 0xaf 0xf5 0x51 0xab
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memh(r17++#10) = r21
0x2b 0xf5 0x71 0xab
# CHECK: if (p3) memh(r17++#10) = r21.h
0x2f 0xf5 0x71 0xab
# CHECK: if (!p3) memh(r17++#10) = r21.h
0x03 0x40 0x45 0x85 0xab 0xf5 0x71 0xab
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memh(r17++#10) = r21.h
0x03 0x40 0x45 0x85 0xaf 0xf5 0x71 0xab
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memh(r17++#10) = r21.h
0x00 0x40 0x00 0x00 0xd3 0xd5 0x42 0xaf
# CHECK: if (p3) memh(##42) = r21
0x00 0x40 0x00 0x00 0xd3 0xd5 0x62 0xaf
# CHECK: if (p3) memh(##42) = r21.h
0x00 0x40 0x00 0x00 0xd7 0xd5 0x42 0xaf
# CHECK: if (!p3) memh(##42) = r21
0x00 0x40 0x00 0x00 0xd7 0xd5 0x62 0xaf
# CHECK: if (!p3) memh(##42) = r21.h
0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xd3 0xf5 0x42 0xaf
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memh(##42) = r21
0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xd3 0xf5 0x62 0xaf
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memh(##42) = r21.h
0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xd7 0xf5 0x42 0xaf
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memh(##42) = r21
0x03 0x40 0x45 0x85 0x00 0x40 0x00 0x00 0xd7 0xf5 0x62 0xaf
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memh(##42) = r21.h
# Store word
0x9f 0xf5 0x91 0x3b
# CHECK: memw(r17+r21<<#3) = r31
0x9f 0xca 0x51 0x3c
# CHECK: memw(r17+#84) = #31
0x15 0xdf 0x80 0x48
# CHECK: memw(gp+#84) = r31
0x01 0x40 0x00 0x00 0x14 0xd5 0x80 0x48
# CHECK: memw(##84) = r21
0x9f 0xca 0x51 0x3c
# CHECK: memw(r17+#84) = #31
0x15 0xdf 0x91 0xa1
# CHECK: memw(r17+#84) = r31
0x02 0xf5 0x91 0xa9
# CHECK: memw(r17++I:circ(m1)) = r21
0x28 0xf5 0x91 0xa9
# CHECK: memw(r17++#20:circ(m1)) = r21
0x28 0xd5 0x91 0xab
# CHECK: memw(r17++#20) = r21
0x00 0x40 0x00 0x00 0xd5 0xff 0x91 0xad
# CHECK: memw(r17<<#3+##21) = r31
0x00 0xf5 0x91 0xad
# CHECK: memw(r17++m1) = r21
0x00 0xf5 0x91 0xaf
# CHECK: memw(r17++m1:brev) = r21
# Store word conditionally
0xff 0xf5 0x91 0x34
# CHECK: if (p3) memw(r17+r21<<#3) = r31
0xff 0xf5 0x91 0x35
# CHECK: if (!p3) memw(r17+r21<<#3) = r31
0x03 0x40 0x45 0x85 0xff 0xf5 0x91 0x36
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memw(r17+r21<<#3) = r31
0x03 0x40 0x45 0x85 0xff 0xf5 0x91 0x37
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memw(r17+r21<<#3) = r31
0xff 0xca 0x51 0x38
# CHECK: if (p3) memw(r17+#84) = #31
0xff 0xca 0xd1 0x38
# CHECK: if (!p3) memw(r17+#84) = #31
0x03 0x40 0x45 0x85 0xff 0xca 0x51 0x39
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memw(r17+#84) = #31
0x03 0x40 0x45 0x85 0xff 0xca 0xd1 0x39
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memw(r17+#84) = #31
0xab 0xdf 0x91 0x40
# CHECK: if (p3) memw(r17+#84) = r31
0xab 0xdf 0x91 0x44
# CHECK: if (!p3) memw(r17+#84) = r31
0x03 0x40 0x45 0x85 0xab 0xdf 0x91 0x42
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memw(r17+#84) = r31
0x03 0x40 0x45 0x85 0xab 0xdf 0x91 0x46
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memw(r17+#84) = r31
0x2b 0xf5 0x91 0xab
# CHECK: if (p3) memw(r17++#20) = r21
0x2f 0xf5 0x91 0xab
# CHECK: if (!p3) memw(r17++#20) = r21
0x03 0x40 0x45 0x85 0xaf 0xf5 0x91 0xab
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memw(r17++#20) = r21
0x03 0x40 0x45 0x85 0xab 0xf5 0x91 0xab
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memw(r17++#20) = r21
0x01 0x40 0x00 0x00 0xa3 0xd5 0x81 0xaf
# CHECK: if (p3) memw(##84) = r21
0x01 0x40 0x00 0x00 0xa7 0xd5 0x81 0xaf
# CHECK: if (!p3) memw(##84) = r21
0x03 0x40 0x45 0x85 0x01 0x40 0x00 0x00 0xa3 0xf5 0x81 0xaf
# CHECK: p3 = r5
# CHECK-NEXT: if (p3.new) memw(##84) = r21
0x03 0x40 0x45 0x85 0x01 0x40 0x00 0x00 0xa7 0xf5 0x81 0xaf
# CHECK: p3 = r5
# CHECK-NEXT: if (!p3.new) memw(##84) = r21
# Allocate stack frame
0x1f 0xc0 0x9d 0xa0
# CHECK: allocframe(#248)

View File

@@ -0,0 +1,26 @@
# RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.9.1 SYSTEM/USER
# Load locked
0x11 0xc0 0x15 0x92
# CHECK: r17 = memw_locked(r21)
0x10 0xd0 0x15 0x92
# CHECK: r17:16 = memd_locked(r21)
# Store conditional
0x03 0xd5 0xb1 0xa0
# CHECK: memw_locked(r17,p3) = r21
0x03 0xd4 0xf1 0xa0
# CHECK: memd_locked(r17,p3) = r21:20
# Memory barrier
0x00 0xc0 0x00 0xa8
# CHECK: barrier
# Data cache prefetch
0x15 0xc0 0x11 0x94
# CHECK: dcfetch(r17+#168)
# Send value to ETM trace
0x00 0xc0 0x51 0x62
# CHECK: trace(r17)

View File

@@ -0,0 +1,4 @@
# RUN: llvm-mc -triple=hexagon -disassemble < %s 2>&1 | FileCheck %s
#CHECK: warning: invalid instruction encoding
0x00 0x40 0x00 0x7f 0x00 0x40 0x00 0x7f 0x00 0x40 0x00 0x7f 0x00 0x40 0x00 0x7f 0x00 0xc0 0x00 0x7f

View File

@@ -0,0 +1,4 @@
# RUN: llvm-mc -triple=hexagon -disassemble < %s 2>&1 | FileCheck %s
#CHECK: warning: invalid instruction encoding
0x00 0x80 0x00 0x7f 0x00 0x80 0x00 0x7f 0x00 0x80 0x00 0x7f 0x00 0xc0 0x00 0x7f

View File

@@ -0,0 +1,9 @@
# RUN: llvm-mc -triple=hexagon -disassemble < %s 2>&1 | FileCheck %s
#Invalid immediate extend duplex load/load
#CHECK: warning: invalid instruction encoding
0xfe 0x40 0x00 0x00 0x11 0x00 0x00 0x00
#Invalid immediate extend barrier
#CHECK: warning: invalid instruction encoding
0xfe 0x40 0x00 0x00 0x00 0xc0 0x00 0xa8

View File

@@ -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

View File

@@ -0,0 +1,118 @@
# RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.10.2 XTYPE/BIT
# Count leading
0x11 0xc0 0x54 0x88
# CHECK: r17 = clb(r21:20)
0x51 0xc0 0x54 0x88
# CHECK: r17 = cl0(r21:20)
0x91 0xc0 0x54 0x88
# CHECK: r17 = cl1(r21:20)
0x11 0xc0 0x74 0x88
# CHECK: r17 = normamt(r21:20)
0x51 0xd7 0x74 0x88
# CHECK: r17 = add(clb(r21:20),#23)
0x11 0xd7 0x35 0x8c
# CHECK: r17 = add(clb(r21),#23)
0x91 0xc0 0x15 0x8c
# CHECK: r17 = clb(r21)
0xb1 0xc0 0x15 0x8c
# CHECK: r17 = cl0(r21)
0xd1 0xc0 0x15 0x8c
# CHECK: r17 = cl1(r21)
0xf1 0xc0 0x15 0x8c
# CHECK: r17 = normamt(r21)
# Count population
0x71 0xc0 0x74 0x88
# CHECK: r17 = popcount(r21:20)
# Count trailing
0x51 0xc0 0xf4 0x88
# CHECK: r17 = ct0(r21:20)
0x91 0xc0 0xf4 0x88
# CHECK: r17 = ct1(r21:20)
0x91 0xc0 0x55 0x8c
# CHECK: r17 = ct0(r21)
0xb1 0xc0 0x55 0x8c
# CHECK: r17 = ct1(r21)
# Extract bitfield
0xf0 0xdf 0x54 0x81
# CHECK: r17:16 = extractu(r21:20,#31,#23)
0xf0 0xdf 0x54 0x8a
# CHECK: r17:16 = extract(r21:20,#31,#23)
0xf1 0xdf 0x55 0x8d
# CHECK: r17 = extractu(r21,#31,#23)
0xf1 0xdf 0xd5 0x8d
# CHECK: r17 = extract(r21,#31,#23)
0x10 0xde 0x14 0xc1
# CHECK: r17:16 = extractu(r21:20,r31:30)
0x90 0xde 0xd4 0xc1
# CHECK: r17:16 = extract(r21:20,r31:30)
0x11 0xde 0x15 0xc9
# CHECK: r17 = extractu(r21,r31:30)
0x51 0xde 0x15 0xc9
# CHECK: r17 = extract(r21,r31:30)
# Insert bitfield
0xf0 0xdf 0x54 0x83
# CHECK: r17:16 = insert(r21:20,#31,#23)
0xf1 0xdf 0x55 0x8f
# CHECK: r17 = insert(r21,#31,#23)
0x11 0xde 0x15 0xc8
# CHECK: r17 = insert(r21,r31:30)
0x10 0xde 0x14 0xca
# CHECK: r17:16 = insert(r21:20,r31:30)
# Interleave/deinterleave
0x90 0xc0 0xd4 0x80
# CHECK: r17:16 = deinterleave(r21:20)
0xb0 0xc0 0xd4 0x80
# CHECK: r17:16 = interleave(r21:20)
# Linear feedback-shift iteration
0xd0 0xde 0x94 0xc1
# CHECK: r17:16 = lfs(r21:20,r31:30)
# Masked parity
0x11 0xde 0x14 0xd0
# CHECK: r17 = parity(r21:20,r31:30)
0x11 0xdf 0xf5 0xd5
# CHECK: r17 = parity(r21,r31)
# Bit reverse
0xd0 0xc0 0xd4 0x80
# CHECK: r17:16 = brev(r21:20)
0xd1 0xc0 0x55 0x8c
# CHECK: r17 = brev(r21)
# Set/clear/toggle bit
0x11 0xdf 0xd5 0x8c
# CHECK: r17 = setbit(r21,#31)
0x31 0xdf 0xd5 0x8c
# CHECK: r17 = clrbit(r21,#31)
0x51 0xdf 0xd5 0x8c
# CHECK: r17 = togglebit(r21,#31)
0x11 0xdf 0x95 0xc6
# CHECK: r17 = setbit(r21,r31)
0x51 0xdf 0x95 0xc6
# CHECK: r17 = clrbit(r21,r31)
0x91 0xdf 0x95 0xc6
# CHECK: r17 = togglebit(r21,r31)
# Split bitfield
0x90 0xdf 0xd5 0x88
# CHECK: r17:16 = bitsplit(r21,#31)
0x10 0xdf 0x35 0xd4
# CHECK: r17:16 = bitsplit(r21,r31)
# Table index
0xf1 0xcd 0x15 0x87
# CHECK: r17 = tableidxb(r21,#7,#13):raw
0xf1 0xcd 0x55 0x87
# CHECK: r17 = tableidxh(r21,#7,#13):raw
0xf1 0xcd 0x95 0x87
# CHECK: r17 = tableidxw(r21,#7,#13):raw
0xf1 0xcd 0xd5 0x87
# CHECK: r17 = tableidxd(r21,#7,#13):raw

View File

@@ -0,0 +1,128 @@
# RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
# Hexagon Programmer's Reference Manual 11.10.3 XTYPE/COMPLEX
# Complex add/sub halfwords
0x90 0xde 0x54 0xc1
# CHECK: r17:16 = vxaddsubh(r21:20,r31:30):sat
0xd0 0xde 0x54 0xc1
# CHECK: r17:16 = vxsubaddh(r21:20,r31:30):sat
0x10 0xde 0xd4 0xc1
# CHECK: r17:16 = vxaddsubh(r21:20,r31:30):rnd:>>1:sat
0x50 0xde 0xd4 0xc1
# CHECK: r17:16 = vxsubaddh(r21:20,r31:30):rnd:>>1:sat
# Complex add/sub words
0x10 0xde 0x54 0xc1
# CHECK: r17:16 = vxaddsubw(r21:20,r31:30):sat
0x50 0xde 0x54 0xc1
# CHECK: r17:16 = vxsubaddw(r21:20,r31:30):sat
# Complex multiply
0xd0 0xdf 0x15 0xe5
# CHECK: r17:16 = cmpy(r21,r31):sat
0xd0 0xdf 0x95 0xe5
# CHECK: r17:16 = cmpy(r21,r31):<<1:sat
0xd0 0xdf 0x55 0xe5
# CHECK: r17:16 = cmpy(r21,r31*):sat
0xd0 0xdf 0xd5 0xe5
# CHECK: r17:16 = cmpy(r21,r31*):<<1:sat
0xd0 0xdf 0x15 0xe7
# CHECK: r17:16 += cmpy(r21,r31):sat
0xd0 0xdf 0x95 0xe7
# CHECK: r17:16 += cmpy(r21,r31):<<1:sat
0xf0 0xdf 0x15 0xe7
# CHECK: r17:16 -= cmpy(r21,r31):sat
0xf0 0xdf 0x95 0xe7
# CHECK: r17:16 -= cmpy(r21,r31):<<1:sat
0xd0 0xdf 0x55 0xe7
# CHECK: r17:16 += cmpy(r21,r31*):sat
0xd0 0xdf 0xd5 0xe7
# CHECK: r17:16 += cmpy(r21,r31*):<<1:sat
0xf0 0xdf 0x55 0xe7
# CHECK: r17:16 -= cmpy(r21,r31*):sat
0xf0 0xdf 0xd5 0xe7
# CHECK: r17:16 -= cmpy(r21,r31*):<<1:sat
# Complex multiply real or imaginary
0x30 0xdf 0x15 0xe5
# CHECK: r17:16 = cmpyi(r21,r31)
0x50 0xdf 0x15 0xe5
# CHECK: r17:16 = cmpyr(r21,r31)
0x30 0xdf 0x15 0xe7
# CHECK: r17:16 += cmpyi(r21,r31)
0x50 0xdf 0x15 0xe7
# CHECK: r17:16 += cmpyr(r21,r31)
# Complex multiply with round and pack
0xd1 0xdf 0x35 0xed
# CHECK: r17 = cmpy(r21,r31):rnd:sat
0xd1 0xdf 0xb5 0xed
# CHECK: r17 = cmpy(r21,r31):<<1:rnd:sat
0xd1 0xdf 0x75 0xed
# CHECK: r17 = cmpy(r21,r31*):rnd:sat
0xd1 0xdf 0xf5 0xed
# CHECK: r17 = cmpy(r21,r31*):<<1:rnd:sat
# Complex multiply 32x16
0x91 0xdf 0x14 0xc5
# CHECK: r17 = cmpyiwh(r21:20,r31):<<1:rnd:sat
0xb1 0xdf 0x14 0xc5
# CHECK: r17 = cmpyiwh(r21:20,r31*):<<1:rnd:sat
0xd1 0xdf 0x14 0xc5
# CHECK: r17 = cmpyrwh(r21:20,r31):<<1:rnd:sat
0xf1 0xdf 0x14 0xc5
# CHECK: r17 = cmpyrwh(r21:20,r31*):<<1:rnd:sat
# Vector complex multiply real or imaginary
0xd0 0xde 0x34 0xe8
# CHECK: r17:16 = vcmpyr(r21:20,r31:30):sat
0xd0 0xde 0xb4 0xe8
# CHECK: r17:16 = vcmpyr(r21:20,r31:30):<<1:sat
0xd0 0xde 0x54 0xe8
# CHECK: r17:16 = vcmpyi(r21:20,r31:30):sat
0xd0 0xde 0xd4 0xe8
# CHECK: r17:16 = vcmpyi(r21:20,r31:30):<<1:sat
0x90 0xde 0x34 0xea
# CHECK: r17:16 += vcmpyr(r21:20,r31:30):sat
0x90 0xde 0x54 0xea
# CHECK: r17:16 += vcmpyi(r21:20,r31:30):sat
# Vector complex conjugate
0xf0 0xc0 0x94 0x80
# CHECK: r17:16 = vconj(r21:20):sat
# Vector complex rotate
0x10 0xdf 0xd4 0xc3
# CHECK: r17:16 = vcrotate(r21:20,r31)
# Vector reduce complex multiply real or imaginary
0x10 0xde 0x14 0xe8
# CHECK: r17:16 = vrcmpyi(r21:20,r31:30)
0x30 0xde 0x14 0xe8
# CHECK: r17:16 = vrcmpyr(r21:20,r31:30)
0x10 0xde 0x54 0xe8
# CHECK: r17:16 = vrcmpyi(r21:20,r31:30*)
0x30 0xde 0x74 0xe8
# CHECK: r17:16 = vrcmpyr(r21:20,r31:30*)
# Vector reduce complex multiply by scalar
0x90 0xde 0xb4 0xe8
# CHECK: r17:16 = vrcmpys(r21:20,r31:30):<<1:sat:raw:hi
0x90 0xde 0xf4 0xe8
# CHECK: r17:16 = vrcmpys(r21:20,r31:30):<<1:sat:raw:lo
0x90 0xde 0xb4 0xea
# CHECK: r17:16 += vrcmpys(r21:20,r31:30):<<1:sat:raw:hi
0x90 0xde 0xf4 0xea
# CHECK: r17:16 += vrcmpys(r21:20,r31:30):<<1:sat:raw:lo
# Vector reduce complex multiply by scalar with round and pack
0xd1 0xde 0xb4 0xe9
# CHECK: r17 = vrcmpys(r21:20,r31:30):<<1:rnd:sat:raw:hi
0xf1 0xde 0xb4 0xe9
# CHECK: r17 = vrcmpys(r21:20,r31:30):<<1:rnd:sat:raw:lo
# Vector reduce complex rotate
0xf0 0xff 0xd4 0xc3
# CHECK: r17:16 = vrcrotate(r21:20,r31,#3)
0x30 0xff 0xb4 0xcb
# CHECK: r17:16 += vrcrotate(r21:20,r31,#3)

Some files were not shown because too many files have changed in this diff Show More