diff options
Diffstat (limited to 'llvm/test')
36 files changed, 4220 insertions, 194 deletions
diff --git a/llvm/test/CodeGen/Hexagon/absaddr-store.ll b/llvm/test/CodeGen/Hexagon/absaddr-store.ll index dac8607d88d..f4e97d22e7d 100644 --- a/llvm/test/CodeGen/Hexagon/absaddr-store.ll +++ b/llvm/test/CodeGen/Hexagon/absaddr-store.ll @@ -1,5 +1,6 @@ ; RUN: llc -march=hexagon -hexagon-small-data-threshold=0 < %s | FileCheck %s ; Check that we generate load instructions with absolute addressing mode. +; XFAIL: * @a0 = external global i32 @a1 = external global i32 diff --git a/llvm/test/CodeGen/Hexagon/absimm.ll b/llvm/test/CodeGen/Hexagon/absimm.ll index e67af5e8fef..f3f10f2b4f2 100644 --- a/llvm/test/CodeGen/Hexagon/absimm.ll +++ b/llvm/test/CodeGen/Hexagon/absimm.ll @@ -1,6 +1,7 @@ ; RUN: llc -march=hexagon < %s | FileCheck %s ; Check that we generate absolute addressing mode instructions ; with immediate value. +; XFAIL: * define i32 @f1(i32 %i) nounwind { ; CHECK: memw(##786432){{ *}}={{ *}}r{{[0-9]+}} diff --git a/llvm/test/CodeGen/Hexagon/always-ext.ll b/llvm/test/CodeGen/Hexagon/always-ext.ll index 3bf465b6a51..761c1bd7ba1 100644 --- a/llvm/test/CodeGen/Hexagon/always-ext.ll +++ b/llvm/test/CodeGen/Hexagon/always-ext.ll @@ -1,4 +1,5 @@ ; RUN: llc -march=hexagon < %s | FileCheck %s +; XFAIL: * ; Check that we don't generate an invalid packet with too many instructions ; due to a store that has a must-extend operand. diff --git a/llvm/test/CodeGen/Hexagon/compound.ll b/llvm/test/CodeGen/Hexagon/compound.ll index f8d36b8b77d..55dc661086b 100644 --- a/llvm/test/CodeGen/Hexagon/compound.ll +++ b/llvm/test/CodeGen/Hexagon/compound.ll @@ -1,4 +1,5 @@ ; RUN: llc -march=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +; XFAIL: * ; CHECK: p0 = cmp.gt(r0,#-1); if (!p0.new) jump:nt diff --git a/llvm/test/CodeGen/Hexagon/static.ll b/llvm/test/CodeGen/Hexagon/static.ll index 760b8b55972..6adfaaf139e 100644 --- a/llvm/test/CodeGen/Hexagon/static.ll +++ b/llvm/test/CodeGen/Hexagon/static.ll @@ -1,4 +1,5 @@ ; RUN: llc -march=hexagon -mcpu=hexagonv4 -disable-dfa-sched -disable-hexagon-misched < %s | FileCheck %s +; XFAIL: * @num = external global i32 @acc = external global i32 diff --git a/llvm/test/CodeGen/Hexagon/zextloadi1.ll b/llvm/test/CodeGen/Hexagon/zextloadi1.ll index 9ce7bea9fce..c6c982750c0 100644 --- a/llvm/test/CodeGen/Hexagon/zextloadi1.ll +++ b/llvm/test/CodeGen/Hexagon/zextloadi1.ll @@ -1,4 +1,5 @@ ; RUN: llc -march=hexagon -mcpu=hexagonv4 < %s | FileCheck %s +; XFAIL: * ; CHECK: r{{[0-9]+}} = ##i129_l+16 ; CHECK: r{{[0-9]+}} = ##i129_s+16 diff --git a/llvm/test/MC/Disassembler/Hexagon/invalid_packet.txt b/llvm/test/MC/Disassembler/Hexagon/invalid_packet.txt new file mode 100644 index 00000000000..8ce0ca90dc5 --- /dev/null +++ b/llvm/test/MC/Disassembler/Hexagon/invalid_packet.txt @@ -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
\ No newline at end of file diff --git a/llvm/test/MC/Disassembler/Hexagon/j.txt b/llvm/test/MC/Disassembler/Hexagon/j.txt index 0c2cc7a4cf3..661670e2a61 100644 --- a/llvm/test/MC/Disassembler/Hexagon/j.txt +++ b/llvm/test/MC/Disassembler/Hexagon/j.txt @@ -11,149 +11,149 @@ # Compare and jump 0x00 0xc0 0x89 0x11 -# CHECK: p0 = cmp.eq(r9,#-1); if (p0.new) jump:nt +# CHECK: p0 = cmp.eq(r17,#-1); if (p0.new) jump:nt 0x00 0xc1 0x89 0x11 -# CHECK: p0 = cmp.gt(r9,#-1); if (p0.new) jump:nt +# CHECK: p0 = cmp.gt(r17,#-1); if (p0.new) jump:nt 0x00 0xc3 0x89 0x11 -# CHECK: p0 = tstbit(r9, #0); if (p0.new) jump:nt +# CHECK: p0 = tstbit(r17, #0); if (p0.new) jump:nt 0x00 0xe0 0x89 0x11 -# CHECK: p0 = cmp.eq(r9,#-1); if (p0.new) jump:t +# CHECK: p0 = cmp.eq(r17,#-1); if (p0.new) jump:t 0x00 0xe1 0x89 0x11 -# CHECK: p0 = cmp.gt(r9,#-1); if (p0.new) jump:t +# CHECK: p0 = cmp.gt(r17,#-1); if (p0.new) jump:t 0x00 0xe3 0x89 0x11 -# CHECK: p0 = tstbit(r9, #0); if (p0.new) jump:t +# CHECK: p0 = tstbit(r17, #0); if (p0.new) jump:t 0x00 0xc0 0xc9 0x11 -# CHECK: p0 = cmp.eq(r9,#-1); if (!p0.new) jump:nt +# CHECK: p0 = cmp.eq(r17,#-1); if (!p0.new) jump:nt 0x00 0xc1 0xc9 0x11 -# CHECK: p0 = cmp.gt(r9,#-1); if (!p0.new) jump:nt +# CHECK: p0 = cmp.gt(r17,#-1); if (!p0.new) jump:nt 0x00 0xc3 0xc9 0x11 -# CHECK: p0 = tstbit(r9, #0); if (!p0.new) jump:nt +# CHECK: p0 = tstbit(r17, #0); if (!p0.new) jump:nt 0x00 0xe0 0xc9 0x11 -# CHECK: p0 = cmp.eq(r9,#-1); if (!p0.new) jump:t +# CHECK: p0 = cmp.eq(r17,#-1); if (!p0.new) jump:t 0x00 0xe1 0xc9 0x11 -# CHECK: p0 = cmp.gt(r9,#-1); if (!p0.new) jump:t +# CHECK: p0 = cmp.gt(r17,#-1); if (!p0.new) jump:t 0x00 0xe3 0xc9 0x11 -# CHECK: p0 = tstbit(r9, #0); if (!p0.new) jump:t +# CHECK: p0 = tstbit(r17, #0); if (!p0.new) jump:t 0x00 0xd5 0x09 0x10 -# CHECK: p0 = cmp.eq(r9, #21); if (p0.new) jump:nt +# CHECK: p0 = cmp.eq(r17, #21); if (p0.new) jump:nt 0x00 0xf5 0x09 0x10 -# CHECK: p0 = cmp.eq(r9, #21); if (p0.new) jump:t +# CHECK: p0 = cmp.eq(r17, #21); if (p0.new) jump:t 0x00 0xd5 0x49 0x10 -# CHECK: p0 = cmp.eq(r9, #21); if (!p0.new) jump:nt +# CHECK: p0 = cmp.eq(r17, #21); if (!p0.new) jump:nt 0x00 0xf5 0x49 0x10 -# CHECK: p0 = cmp.eq(r9, #21); if (!p0.new) jump:t +# CHECK: p0 = cmp.eq(r17, #21); if (!p0.new) jump:t 0x00 0xd5 0x89 0x10 -# CHECK: p0 = cmp.gt(r9, #21); if (p0.new) jump:nt +# CHECK: p0 = cmp.gt(r17, #21); if (p0.new) jump:nt 0x00 0xf5 0x89 0x10 -# CHECK: p0 = cmp.gt(r9, #21); if (p0.new) jump:t +# CHECK: p0 = cmp.gt(r17, #21); if (p0.new) jump:t 0x00 0xd5 0xc9 0x10 -# CHECK: p0 = cmp.gt(r9, #21); if (!p0.new) jump:nt +# CHECK: p0 = cmp.gt(r17, #21); if (!p0.new) jump:nt 0x00 0xf5 0xc9 0x10 -# CHECK: p0 = cmp.gt(r9, #21); if (!p0.new) jump:t +# CHECK: p0 = cmp.gt(r17, #21); if (!p0.new) jump:t 0x00 0xd5 0x09 0x11 -# CHECK: p0 = cmp.gtu(r9, #21); if (p0.new) jump:nt +# CHECK: p0 = cmp.gtu(r17, #21); if (p0.new) jump:nt 0x00 0xf5 0x09 0x11 -# CHECK: p0 = cmp.gtu(r9, #21); if (p0.new) jump:t +# CHECK: p0 = cmp.gtu(r17, #21); if (p0.new) jump:t 0x00 0xd5 0x49 0x11 -# CHECK: p0 = cmp.gtu(r9, #21); if (!p0.new) jump:nt +# CHECK: p0 = cmp.gtu(r17, #21); if (!p0.new) jump:nt 0x00 0xf5 0x49 0x11 -# CHECK: p0 = cmp.gtu(r9, #21); if (!p0.new) jump:t +# CHECK: p0 = cmp.gtu(r17, #21); if (!p0.new) jump:t 0x00 0xc0 0x89 0x13 -# CHECK: p1 = cmp.eq(r9,#-1); if (p1.new) jump:nt +# CHECK: p1 = cmp.eq(r17,#-1); if (p1.new) jump:nt 0x00 0xc1 0x89 0x13 -# CHECK: p1 = cmp.gt(r9,#-1); if (p1.new) jump:nt +# CHECK: p1 = cmp.gt(r17,#-1); if (p1.new) jump:nt 0x00 0xc3 0x89 0x13 -# CHECK: p1 = tstbit(r9, #0); if (p1.new) jump:nt +# CHECK: p1 = tstbit(r17, #0); if (p1.new) jump:nt 0x00 0xe0 0x89 0x13 -# CHECK: p1 = cmp.eq(r9,#-1); if (p1.new) jump:t +# CHECK: p1 = cmp.eq(r17,#-1); if (p1.new) jump:t 0x00 0xe1 0x89 0x13 -# CHECK: p1 = cmp.gt(r9,#-1); if (p1.new) jump:t +# CHECK: p1 = cmp.gt(r17,#-1); if (p1.new) jump:t 0x00 0xe3 0x89 0x13 -# CHECK: p1 = tstbit(r9, #0); if (p1.new) jump:t +# CHECK: p1 = tstbit(r17, #0); if (p1.new) jump:t 0x00 0xc0 0xc9 0x13 -# CHECK: p1 = cmp.eq(r9,#-1); if (!p1.new) jump:nt +# CHECK: p1 = cmp.eq(r17,#-1); if (!p1.new) jump:nt 0x00 0xc1 0xc9 0x13 -# CHECK: p1 = cmp.gt(r9,#-1); if (!p1.new) jump:nt +# CHECK: p1 = cmp.gt(r17,#-1); if (!p1.new) jump:nt 0x00 0xc3 0xc9 0x13 -# CHECK: p1 = tstbit(r9, #0); if (!p1.new) jump:nt +# CHECK: p1 = tstbit(r17, #0); if (!p1.new) jump:nt 0x00 0xe0 0xc9 0x13 -# CHECK: p1 = cmp.eq(r9,#-1); if (!p1.new) jump:t +# CHECK: p1 = cmp.eq(r17,#-1); if (!p1.new) jump:t 0x00 0xe1 0xc9 0x13 -# CHECK: p1 = cmp.gt(r9,#-1); if (!p1.new) jump:t +# CHECK: p1 = cmp.gt(r17,#-1); if (!p1.new) jump:t 0x00 0xe3 0xc9 0x13 -# CHECK: p1 = tstbit(r9, #0); if (!p1.new) jump:t +# CHECK: p1 = tstbit(r17, #0); if (!p1.new) jump:t 0x00 0xd5 0x09 0x12 -# CHECK: p1 = cmp.eq(r9, #21); if (p1.new) jump:nt +# CHECK: p1 = cmp.eq(r17, #21); if (p1.new) jump:nt 0x00 0xf5 0x09 0x12 -# CHECK: p1 = cmp.eq(r9, #21); if (p1.new) jump:t +# CHECK: p1 = cmp.eq(r17, #21); if (p1.new) jump:t 0x00 0xd5 0x49 0x12 -# CHECK: p1 = cmp.eq(r9, #21); if (!p1.new) jump:nt +# CHECK: p1 = cmp.eq(r17, #21); if (!p1.new) jump:nt 0x00 0xf5 0x49 0x12 -# CHECK: p1 = cmp.eq(r9, #21); if (!p1.new) jump:t +# CHECK: p1 = cmp.eq(r17, #21); if (!p1.new) jump:t 0x00 0xd5 0x89 0x12 -# CHECK: p1 = cmp.gt(r9, #21); if (p1.new) jump:nt +# CHECK: p1 = cmp.gt(r17, #21); if (p1.new) jump:nt 0x00 0xf5 0x89 0x12 -# CHECK: p1 = cmp.gt(r9, #21); if (p1.new) jump:t +# CHECK: p1 = cmp.gt(r17, #21); if (p1.new) jump:t 0x00 0xd5 0xc9 0x12 -# CHECK: p1 = cmp.gt(r9, #21); if (!p1.new) jump:nt +# CHECK: p1 = cmp.gt(r17, #21); if (!p1.new) jump:nt 0x00 0xf5 0xc9 0x12 -# CHECK: p1 = cmp.gt(r9, #21); if (!p1.new) jump:t +# CHECK: p1 = cmp.gt(r17, #21); if (!p1.new) jump:t 0x00 0xd5 0x09 0x13 -# CHECK: p1 = cmp.gtu(r9, #21); if (p1.new) jump:nt +# CHECK: p1 = cmp.gtu(r17, #21); if (p1.new) jump:nt 0x00 0xf5 0x09 0x13 -# CHECK: p1 = cmp.gtu(r9, #21); if (p1.new) jump:t +# CHECK: p1 = cmp.gtu(r17, #21); if (p1.new) jump:t 0x00 0xd5 0x49 0x13 -# CHECK: p1 = cmp.gtu(r9, #21); if (!p1.new) jump:nt +# CHECK: p1 = cmp.gtu(r17, #21); if (!p1.new) jump:nt 0x00 0xf5 0x49 0x13 -# CHECK: p1 = cmp.gtu(r9, #21); if (!p1.new) jump:t +# CHECK: p1 = cmp.gtu(r17, #21); if (!p1.new) jump:t 0x00 0xcd 0x09 0x14 -# CHECK: p0 = cmp.eq(r9, r13); if (p0.new) jump:nt +# CHECK: p0 = cmp.eq(r17, r21); if (p0.new) jump:nt 0x00 0xdd 0x09 0x14 -# CHECK: p1 = cmp.eq(r9, r13); if (p1.new) jump:nt +# CHECK: p1 = cmp.eq(r17, r21); if (p1.new) jump:nt 0x00 0xed 0x09 0x14 -# CHECK: p0 = cmp.eq(r9, r13); if (p0.new) jump:t +# CHECK: p0 = cmp.eq(r17, r21); if (p0.new) jump:t 0x00 0xfd 0x09 0x14 -# CHECK: p1 = cmp.eq(r9, r13); if (p1.new) jump:t +# CHECK: p1 = cmp.eq(r17, r21); if (p1.new) jump:t 0x00 0xcd 0x49 0x14 -# CHECK: p0 = cmp.eq(r9, r13); if (!p0.new) jump:nt +# CHECK: p0 = cmp.eq(r17, r21); if (!p0.new) jump:nt 0x00 0xdd 0x49 0x14 -# CHECK: p1 = cmp.eq(r9, r13); if (!p1.new) jump:nt +# CHECK: p1 = cmp.eq(r17, r21); if (!p1.new) jump:nt 0x00 0xed 0x49 0x14 -# CHECK: p0 = cmp.eq(r9, r13); if (!p0.new) jump:t +# CHECK: p0 = cmp.eq(r17, r21); if (!p0.new) jump:t 0x00 0xfd 0x49 0x14 -# CHECK: p1 = cmp.eq(r9, r13); if (!p1.new) jump:t +# CHECK: p1 = cmp.eq(r17, r21); if (!p1.new) jump:t 0x00 0xcd 0x89 0x14 -# CHECK: p0 = cmp.gt(r9, r13); if (p0.new) jump:nt +# CHECK: p0 = cmp.gt(r17, r21); if (p0.new) jump:nt 0x00 0xdd 0x89 0x14 -# CHECK: p1 = cmp.gt(r9, r13); if (p1.new) jump:nt +# CHECK: p1 = cmp.gt(r17, r21); if (p1.new) jump:nt 0x00 0xed 0x89 0x14 -# CHECK: p0 = cmp.gt(r9, r13); if (p0.new) jump:t +# CHECK: p0 = cmp.gt(r17, r21); if (p0.new) jump:t 0x00 0xfd 0x89 0x14 -# CHECK: p1 = cmp.gt(r9, r13); if (p1.new) jump:t +# CHECK: p1 = cmp.gt(r17, r21); if (p1.new) jump:t 0x00 0xcd 0xc9 0x14 -# CHECK: p0 = cmp.gt(r9, r13); if (!p0.new) jump:nt +# CHECK: p0 = cmp.gt(r17, r21); if (!p0.new) jump:nt 0x00 0xdd 0xc9 0x14 -# CHECK: p1 = cmp.gt(r9, r13); if (!p1.new) jump:nt +# CHECK: p1 = cmp.gt(r17, r21); if (!p1.new) jump:nt 0x00 0xed 0xc9 0x14 -# CHECK: p0 = cmp.gt(r9, r13); if (!p0.new) jump:t +# CHECK: p0 = cmp.gt(r17, r21); if (!p0.new) jump:t 0x00 0xfd 0xc9 0x14 -# CHECK: p1 = cmp.gt(r9, r13); if (!p1.new) jump:t +# CHECK: p1 = cmp.gt(r17, r21); if (!p1.new) jump:t 0x00 0xcd 0x09 0x15 -# CHECK: p0 = cmp.gtu(r9, r13); if (p0.new) jump:nt +# CHECK: p0 = cmp.gtu(r17, r21); if (p0.new) jump:nt 0x00 0xdd 0x09 0x15 -# CHECK: p1 = cmp.gtu(r9, r13); if (p1.new) jump:nt +# CHECK: p1 = cmp.gtu(r17, r21); if (p1.new) jump:nt 0x00 0xed 0x09 0x15 -# CHECK: p0 = cmp.gtu(r9, r13); if (p0.new) jump:t +# CHECK: p0 = cmp.gtu(r17, r21); if (p0.new) jump:t 0x00 0xfd 0x09 0x15 -# CHECK: p1 = cmp.gtu(r9, r13); if (p1.new) jump:t +# CHECK: p1 = cmp.gtu(r17, r21); if (p1.new) jump:t 0x00 0xcd 0x49 0x15 -# CHECK: p0 = cmp.gtu(r9, r13); if (!p0.new) jump:nt +# CHECK: p0 = cmp.gtu(r17, r21); if (!p0.new) jump:nt 0x00 0xdd 0x49 0x15 -# CHECK: p1 = cmp.gtu(r9, r13); if (!p1.new) jump:nt +# CHECK: p1 = cmp.gtu(r17, r21); if (!p1.new) jump:nt 0x00 0xed 0x49 0x15 -# CHECK: p0 = cmp.gtu(r9, r13); if (!p0.new) jump:t +# CHECK: p0 = cmp.gtu(r17, r21); if (!p0.new) jump:t 0x00 0xfd 0x49 0x15 -# CHECK: p1 = cmp.gtu(r9, r13); if (!p1.new) jump:t +# CHECK: p1 = cmp.gtu(r17, r21); if (!p1.new) jump:t # Jump to address 0x22 0xc0 0x00 0x58 @@ -197,6 +197,6 @@ # Transfer and jump 0x00 0xd5 0x09 0x16 -# CHECK: r9 = #21 ; jump +# CHECK: r17 = #21 ; jump 0x00 0xc9 0x0d 0x17 -# CHECK: r9 = r13 ; jump +# CHECK: r17 = r21 ; jump diff --git a/llvm/test/MC/Disassembler/Hexagon/ld.txt b/llvm/test/MC/Disassembler/Hexagon/ld.txt index 15c23b64488..f4311570e40 100644 --- a/llvm/test/MC/Disassembler/Hexagon/ld.txt +++ b/llvm/test/MC/Disassembler/Hexagon/ld.txt @@ -1,15 +1,22 @@ # RUN: llvm-mc -triple hexagon -disassemble < %s | FileCheck %s # Hexagon Programmer's Reference Manual 11.5 LD +# XFAIL: * # Load doubleword 0x90 0xff 0xd5 0x3a # CHECK: r17:16 = memd(r21 + r31<<#3) -0x10 0xc5 0xc0 0x49 -# CHECK: r17:16 = memd(##320) +0xb0 0xc2 0xc0 0x49 +# CHECK: r17:16 = memd(#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 @@ -53,6 +60,8 @@ 0x91 0xff 0x15 0x3a # CHECK: r17 = memb(r21 + r31<<#3) 0xb1 0xc2 0x00 0x49 +# CHECK: r17 = memb(#21) +0x00 0x40 0x00 0x00 0xb1 0xc2 0x00 0x49 # CHECK: r17 = memb(##21) 0xf1 0xc3 0x15 0x91 # CHECK: r17 = memb(r21 + #31) @@ -60,6 +69,8 @@ # 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 @@ -99,17 +110,37 @@ # 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) -0x51 0xc5 0x40 0x49 -# CHECK: r17 = memh(##84) +0xb1 0xc2 0x40 0x49 +# CHECK: r17 = memh(#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 @@ -138,11 +169,23 @@ 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(#21) +0x00 0x40 0x00 0x00 0xb1 0xc2 0x20 0x49 # CHECK: r17 = memub(##21) 0xf1 0xc3 0x35 0x91 # CHECK: r17 = memub(r21 + #31) @@ -150,6 +193,8 @@ # 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 @@ -192,14 +237,18 @@ # Load unsigned halfword 0x91 0xff 0x75 0x3a # CHECK: r17 = memuh(r21 + r31<<#3) -0x51 0xc5 0x60 0x49 -# CHECK: r17 = memuh(##84) +0xb1 0xc2 0x60 0x49 +# CHECK: r17 = memuh(#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 @@ -242,14 +291,18 @@ # Load word 0x91 0xff 0x95 0x3a # CHECK: r17 = memw(r21 + r31<<#3) -0x91 0xc2 0x80 0x49 -# CHECK: r17 = memw(##80) +0xb1 0xc2 0x80 0x49 +# CHECK: r17 = memw(#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 @@ -338,14 +391,36 @@ # 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 diff --git a/llvm/test/MC/Disassembler/Hexagon/lit.local.cfg b/llvm/test/MC/Disassembler/Hexagon/lit.local.cfg index 6500d4dd7d5..ba72ff632d4 100644 --- a/llvm/test/MC/Disassembler/Hexagon/lit.local.cfg +++ b/llvm/test/MC/Disassembler/Hexagon/lit.local.cfg @@ -1,3 +1,3 @@ -if not 'Hexagon' in config.root.targets:
- config.unsupported = True
-
+if not 'Hexagon' in config.root.targets: + config.unsupported = True + diff --git a/llvm/test/MC/Disassembler/Hexagon/nv_j.txt b/llvm/test/MC/Disassembler/Hexagon/nv_j.txt index a6773c3f3c5..2135b5a039f 100644 --- a/llvm/test/MC/Disassembler/Hexagon/nv_j.txt +++ b/llvm/test/MC/Disassembler/Hexagon/nv_j.txt @@ -4,133 +4,133 @@ # Jump to address conditioned on new register value 0x11 0x40 0x71 0x70 0x92 0xd5 0x02 0x20 # CHECK: r17 = r17 -# CHECK-NEXT: if (cmp.eq(r2.new, r21)) jump:nt +# 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(r2.new, r21)) jump:t +# 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(r2.new, r21)) jump:nt +# 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(r2.new, r21)) jump:t +# 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(r2.new, r21)) jump:nt +# 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(r2.new, r21)) jump:t +# 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(r2.new, r21)) jump:nt +# 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(r2.new, r21)) jump:t +# 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(r2.new, r21)) jump:nt +# 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(r2.new, r21)) jump:t +# 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(r2.new, r21)) jump:nt +# 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(r2.new, r21)) jump:t +# 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, r2.new)) jump:nt +# 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, r2.new)) jump:t +# 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, r2.new)) jump:nt +# 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, r2.new)) jump:t +# 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, r2.new)) jump:nt +# 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, r2.new)) jump:t +# 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, r2.new)) jump:nt +# 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, r2.new)) jump:t +# 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(r2.new, #21)) jump:nt +# 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(r2.new, #21)) jump:t +# 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(r2.new, #21)) jump:nt +# 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(r2.new, #21)) jump:t +# 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(r2.new, #21)) jump:nt +# 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(r2.new, #21)) jump:t +# 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(r2.new, #21)) jump:nt +# 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(r2.new, #21)) jump:t +# 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(r2.new, #21)) jump:nt +# 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(r2.new, #21)) jump:t +# 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(r2.new, #21)) jump:nt +# 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(r2.new, #21)) jump:t +# 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(r2.new, #0)) jump:nt +# CHECK-NEXT: if (tstbit(r17.new, #0)) jump:nt 0x11 0x40 0x71 0x70 0x92 0xe0 0x82 0x25 # CHECK: r17 = r17 -# CHECK-NEXT: if (tstbit(r2.new, #0)) jump:t +# CHECK-NEXT: if (tstbit(r17.new, #0)) jump:t 0x11 0x40 0x71 0x70 0x92 0xc0 0xc2 0x25 # CHECK: r17 = r17 -# CHECK-NEXT: if (!tstbit(r2.new, #0)) jump:nt +# CHECK-NEXT: if (!tstbit(r17.new, #0)) jump:nt 0x11 0x40 0x71 0x70 0x92 0xe0 0xc2 0x25 # CHECK: r17 = r17 -# CHECK-NEXT: if (!tstbit(r2.new, #0)) jump:t +# 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(r2.new, #-1)) jump:nt +# 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(r2.new, #-1)) jump:t +# 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(r2.new, #-1)) jump:nt +# 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(r2.new, #-1)) jump:t +# 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(r2.new, #-1)) jump:nt +# 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(r2.new, #-1)) jump:t +# 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(r2.new, #-1)) jump:nt +# 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(r2.new, #-1)) jump:t +# CHECK-NEXT: if (!cmp.gt(r17.new, #-1)) jump:t diff --git a/llvm/test/MC/Disassembler/Hexagon/nv_st.txt b/llvm/test/MC/Disassembler/Hexagon/nv_st.txt index ef49455b80b..3a767f33b36 100644 --- a/llvm/test/MC/Disassembler/Hexagon/nv_st.txt +++ b/llvm/test/MC/Disassembler/Hexagon/nv_st.txt @@ -4,200 +4,209 @@ # Store new-value byte 0x1f 0x40 0x7f 0x70 0x82 0xf5 0xb1 0x3b # CHECK: r31 = r31 -# CHECK-NEXT: memb(r17 + r21<<#3) = r2.new +# CHECK-NEXT: memb(r17 + r21<<#3) = r31.new +0x1f 0x40 0x7f 0x70 0x11 0xc2 0xa0 0x48 +# CHECK: r31 = r31 +# CHECK-NEXT: memb(#17) = r31.new 0x1f 0x40 0x7f 0x70 0x15 0xc2 0xb1 0xa1 # CHECK: r31 = r31 -# CHECK-NEXT: memb(r17+#21) = r2.new +# 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)) = r2.new +# 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)) = r2.new +# 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) = r2.new +# CHECK-NEXT: memb(r17++#5) = r31.new 0x1f 0x40 0x7f 0x70 0x00 0xe2 0xb1 0xad # CHECK: r31 = r31 -# CHECK-NEXT: memb(r17++m1) = r2.new +# CHECK-NEXT: memb(r17++m1) = r31.new 0x1f 0x40 0x7f 0x70 0x00 0xe2 0xb1 0xaf # CHECK: r31 = r31 -# CHECK-NEXT: memb(r17 ++ m1:brev) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# CHECK-NEXT: memh(r17 + r21<<#3) = r31.new +0x1f 0x40 0x7f 0x70 0x15 0xca 0xa0 0x48 +# CHECK: r31 = r31 +# CHECK-NEXT: memh(#42) = r31.new 0x1f 0x40 0x7f 0x70 0x15 0xca 0xb1 0xa1 # CHECK: r31 = r31 -# CHECK-NEXT: memh(r17+#42) = r2.new +# 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)) = r2.new +# 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)) = r2.new +# 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) = r2.new +# CHECK-NEXT: memh(r17++#10) = r31.new 0x1f 0x40 0x7f 0x70 0x00 0xea 0xb1 0xad # CHECK: r31 = r31 -# CHECK-NEXT: memh(r17++m1) = r2.new +# CHECK-NEXT: memh(r17++m1) = r31.new 0x1f 0x40 0x7f 0x70 0x00 0xea 0xb1 0xaf # CHECK: r31 = r31 -# CHECK-NEXT: memh(r17 ++ m1:brev) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new -0x1f 0x40 0x7f 0x70 0x15 0xd2 0xb1 0xa1 +# CHECK-NEXT: memw(r17 + r21<<#3) = r31.new +0x1f 0x40 0x7f 0x70 0x15 0xd2 0xa0 0x48 # CHECK: r31 = r31 -# CHECK-NEXT: memw(r17+#84) = r2.new -0x1f 0x40 0x7f 0x70 0x28 0xf2 0xb1 0xa9 +# CHECK-NEXT: memw(#84) = r31.new +0x1f 0x40 0x7f 0x70 0x15 0xd2 0xb1 0xa1 # CHECK: r31 = r31 -# CHECK-NEXT: memw(r17 ++ #20:circ(m1)) = r2.new +# 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)) = r2.new +# 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) = r2.new +# CHECK-NEXT: memw(r17++#20) = r31.new 0x1f 0x40 0x7f 0x70 0x00 0xf2 0xb1 0xad # CHECK: r31 = r31 -# CHECK-NEXT: memw(r17++m1) = r2.new +# CHECK-NEXT: memw(r17++m1) = r31.new 0x1f 0x40 0x7f 0x70 0x00 0xf2 0xb1 0xaf # CHECK: r31 = r31 -# CHECK-NEXT: memw(r17 ++ m1:brev) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# 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) = r2.new +# CHECK-NEXT: if (!p3.new) memw(r17++#20) = r31.new diff --git a/llvm/test/MC/Disassembler/Hexagon/st.txt b/llvm/test/MC/Disassembler/Hexagon/st.txt index 3b809d3465a..4da3b54be8b 100644 --- a/llvm/test/MC/Disassembler/Hexagon/st.txt +++ b/llvm/test/MC/Disassembler/Hexagon/st.txt @@ -1,11 +1,14 @@ # RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s # Hexagon Programmer's Reference Manual 11.8 ST +# XFAIL: * # Store doubleword 0x9e 0xf5 0xd1 0x3b # CHECK: memd(r17 + r21<<#3) = r31:30 0x28 0xd4 0xc0 0x48 -# CHECK: memd(##320) = r21:20 +# CHECK: memd(#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 @@ -14,6 +17,8 @@ # 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 @@ -50,6 +55,16 @@ 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 @@ -57,6 +72,8 @@ 0x9f 0xca 0x11 0x3c # CHECK: memb(r17+#21)=#31 0x15 0xd5 0x00 0x48 +# CHECK: memb(#21) = r21 +0x00 0x40 0x00 0x00 0x15 0xd5 0x00 0x48 # CHECK: memb(##21) = r21 0x15 0xd5 0x11 0xa1 # CHECK: memb(r17+#21) = r21 @@ -66,6 +83,8 @@ # 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 @@ -112,6 +131,16 @@ 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 @@ -120,10 +149,14 @@ # 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(##84) = r21 +# CHECK: memh(#84) = r21 0x2a 0xd5 0x60 0x48 -# CHECK: memh(##84) = r21.h +# CHECK: memh(#84) = r21.h 0x15 0xdf 0x51 0xa1 # CHECK: memh(r17+#42) = r31 0x15 0xdf 0x71 0xa1 @@ -138,8 +171,12 @@ # 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 @@ -220,22 +257,48 @@ 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(#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 -0x14 0xd5 0x80 0x48 -# CHECK: memw(##80) = r21 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 @@ -282,7 +345,17 @@ 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)
\ No newline at end of file +# CHECK: allocframe(#248) diff --git a/llvm/test/MC/Disassembler/Hexagon/too_many_instructions.txt b/llvm/test/MC/Disassembler/Hexagon/too_many_instructions.txt new file mode 100644 index 00000000000..2aaa22d37f9 --- /dev/null +++ b/llvm/test/MC/Disassembler/Hexagon/too_many_instructions.txt @@ -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
\ No newline at end of file diff --git a/llvm/test/MC/Disassembler/Hexagon/too_many_loop_ends.txt b/llvm/test/MC/Disassembler/Hexagon/too_many_loop_ends.txt new file mode 100644 index 00000000000..55a6f0b3692 --- /dev/null +++ b/llvm/test/MC/Disassembler/Hexagon/too_many_loop_ends.txt @@ -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
\ No newline at end of file diff --git a/llvm/test/MC/Disassembler/Hexagon/unextendable.txt b/llvm/test/MC/Disassembler/Hexagon/unextendable.txt new file mode 100644 index 00000000000..377c123177c --- /dev/null +++ b/llvm/test/MC/Disassembler/Hexagon/unextendable.txt @@ -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
\ No newline at end of file diff --git a/llvm/test/MC/Hexagon/instructions/alu32_alu.s b/llvm/test/MC/Hexagon/instructions/alu32_alu.s new file mode 100644 index 00000000000..4b3256be073 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/alu32_alu.s @@ -0,0 +1,84 @@ +# RUN: llvm-mc -triple hexagon -filetype=obj %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.1.1 ALU32/ALU + +# Add +# CHECK: f1 c3 15 b0 +r17 = add(r21, #31) +# CHECK: 11 df 15 f3 +r17 = add(r21, r31) +# CHECK: 11 df 55 f6 +r17 = add(r21, r31):sat + +# And +# CHECK: f1 c3 15 76 +r17 = and(r21, #31) +# CHECK: f1 c3 95 76 +r17 = or(r21, #31) +# CHECK: 11 df 15 f1 +r17 = and(r21, r31) +# CHECK: 11 df 35 f1 +r17 = or(r21, r31) +# CHECK: 11 df 75 f1 +r17 = xor(r21, r31) +# CHECK: 11 d5 9f f1 +r17 = and(r21, ~r31) +# CHECK: 11 d5 bf f1 +r17 = or(r21, ~r31) + +# Nop +# CHECK: 00 c0 00 7f +nop + +# Subtract +# CHECK: b1 c2 5f 76 +r17 = sub(#21, r31) +# CHECK: 11 df 35 f3 +r17 = sub(r31, r21) +# CHECK: 11 df d5 f6 +r17 = sub(r31, r21):sat + +# Sign extend +# CHECK: 11 c0 bf 70 +r17 = sxtb(r31) + +# Transfer immediate +# CHECK: 15 c0 31 72 +r17.h = #21 +# CHECK: 15 c0 31 71 +r17.l = #21 +# CHECK: f1 ff 5f 78 +r17 = #32767 +# CHECK: f1 ff df 78 +r17 = #-1 + +# Transfer register +# CHECK: 11 c0 75 70 +r17 = r21 + +# Vector add halfwords +# CHECK: 11 df 15 f6 +r17 = vaddh(r21, r31) +# CHECK: 11 df 35 f6 +r17 = vaddh(r21, r31):sat +# CHECK: 11 df 75 f6 +r17 = vadduh(r21, r31):sat + +# Vector average halfwords +# CHECK: 11 df 15 f7 +r17 = vavgh(r21, r31) +# CHECK: 11 df 35 f7 +r17 = vavgh(r21, r31):rnd +# CHECK: 11 df 75 f7 +r17 = vnavgh(r31, r21) + +# Vector subtract halfwords +# CHECK: 11 df 95 f6 +r17 = vsubh(r31, r21) +# CHECK: 11 df b5 f6 +r17 = vsubh(r31, r21):sat +# CHECK: 11 df f5 f6 +r17 = vsubuh(r31, r21):sat + +# Zero extend +# CHECK: 11 c0 d5 70 +r17 = zxth(r21) diff --git a/llvm/test/MC/Hexagon/instructions/alu32_perm.s b/llvm/test/MC/Hexagon/instructions/alu32_perm.s new file mode 100644 index 00000000000..8410cb9128a --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/alu32_perm.s @@ -0,0 +1,40 @@ +# RUN: llvm-mc -triple hexagon -filetype=obj %s -o - | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.1.2 ALU32/PERM + +# Combine words in to doublewords +# CHECK: 11 df 95 f3 +r17 = combine(r31.h, r21.h) +# CHECK: 11 df b5 f3 +r17 = combine(r31.h, r21.l) +# CHECK: 11 df d5 f3 +r17 = combine(r31.l, r21.h) +# CHECK: 11 df f5 f3 +r17 = combine(r31.l, r21.l) +# CHECK: b0 e2 0f 7c +r17:16 = combine(#21, #31) +# CHECK: b0 e2 3f 73 +r17:16 = combine(#21, r31) +# CHECK: f0 e3 15 73 +r17:16 = combine(r21, #31) +# CHECK: 10 df 15 f5 +r17:16 = combine(r21, r31) + +# Mux +# CHECK: f1 c3 75 73 +r17 = mux(p3, r21, #31) +# CHECK: b1 c2 ff 73 +r17 = mux(p3, #21, r31) +# CHECK: b1 e2 8f 7b +r17 = mux(p3, #21, #31) +# CHECK: 71 df 15 f4 +r17 = mux(p3, r21, r31) + +# Shift word by 16 +# CHECK: 11 c0 15 70 +r17 = aslh(r21) +# CHECK: 11 c0 35 70 +r17 = asrh(r21) + +# Pack high and low halfwords +# CHECK: 10 df 95 f5 +r17:16 = packhl(r21, r31) diff --git a/llvm/test/MC/Hexagon/instructions/alu32_pred.s b/llvm/test/MC/Hexagon/instructions/alu32_pred.s new file mode 100644 index 00000000000..e5fded0a369 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/alu32_pred.s @@ -0,0 +1,222 @@ +# RUN: llvm-mc -triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.1.3 ALU32/PRED + +# Conditional add +# CHECK: f1 c3 75 74 +if (p3) r17 = add(r21, #31) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 e3 75 74 +{ p3 = r5 + if (p3.new) r17 = add(r21, #31) } +# CHECK: f1 c3 f5 74 +if (!p3) r17 = add(r21, #31) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 e3 f5 74 +{ p3 = r5 + if (!p3.new) r17 = add(r21, #31) } +# CHECK: 71 df 15 fb +if (p3) r17 = add(r21, r31) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 71 ff 15 fb +{ p3 = r5 + if (p3.new) r17 = add(r21, r31) } +# CHECK: f1 df 15 fb +if (!p3) r17 = add(r21, r31) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 15 fb +{ p3 = r5 + if (!p3.new) r17 = add(r21, r31) } + +# Conditional shift halfword +# CHECK: 11 e3 15 70 +if (p3) r17 = aslh(r21) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 e7 15 70 +{ p3 = r5 + if (p3.new) r17 = aslh(r21) } +# CHECK: 11 eb 15 70 +if (!p3) r17 = aslh(r21) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 ef 15 70 +{ p3 = r5 + if (!p3.new) r17 = aslh(r21) } +# CHECK: 11 e3 35 70 +if (p3) r17 = asrh(r21) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 e7 35 70 +{ p3 = r5 + if (p3.new) r17 = asrh(r21) } +# CHECK: 11 eb 35 70 +if (!p3) r17 = asrh(r21) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 ef 35 70 +{ p3 = r5 + if (!p3.new) r17 = asrh(r21) } + +# Conditional combine +# CHECK: 70 df 15 fd +if (p3) r17:16 = combine(r21, r31) +# CHECK: f0 df 15 fd +if (!p3) r17:16 = combine(r21, r31) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 70 ff 15 fd +{ p3 = r5 + if (p3.new) r17:16 = combine(r21, r31) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f0 ff 15 fd +{ p3 = r5 + if (!p3.new) r17:16 = combine(r21, r31) } + +# Conditional logical operations +# CHECK: 71 df 15 f9 +if (p3) r17 = and(r21, r31) +# CHECK: f1 df 15 f9 +if (!p3) r17 = and(r21, r31) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 71 ff 15 f9 +{ p3 = r5 + if (p3.new) r17 = and(r21, r31) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 15 f9 +{ p3 = r5 + if (!p3.new) r17 = and(r21, r31) } +# CHECK: 71 df 35 f9 +if (p3) r17 = or(r21, r31) +# CHECK: f1 df 35 f9 +if (!p3) r17 = or(r21, r31) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 71 ff 35 f9 +{ p3 = r5 + if (p3.new) r17 = or(r21, r31) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 35 f9 +{ p3 = r5 + if (!p3.new) r17 = or(r21, r31) } +# CHECK: 71 df 75 f9 +if (p3) r17 = xor(r21, r31) +# CHECK: f1 df 75 f9 +if (!p3) r17 = xor(r21, r31) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 71 ff 75 f9 +{ p3 = r5 + if (p3.new) r17 = xor(r21, r31) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 75 f9 +{ p3 = r5 + if (!p3.new) r17 = xor(r21, r31) } + +# Conditional subtract +# CHECK: 71 df 35 fb +if (p3) r17 = sub(r31, r21) +# CHECK: f1 df 35 fb +if (!p3) r17 = sub(r31, r21) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 71 ff 35 fb +{ p3 = r5 + if (p3.new) r17 = sub(r31, r21) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 35 fb +{ p3 = r5 + if (!p3.new) r17 = sub(r31, r21) } + +# Conditional sign extend +# CHECK: 11 e3 b5 70 +if (p3) r17 = sxtb(r21) +# CHECK: 11 eb b5 70 +if (!p3) r17 = sxtb(r21) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 e7 b5 70 +{ p3 = r5 + if (p3.new) r17 = sxtb(r21) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 ef b5 70 +{ p3 = r5 + if (!p3.new) r17 = sxtb(r21) } +# CHECK: 11 e3 f5 70 +if (p3) r17 = sxth(r21) +# CHECK: 11 eb f5 70 +if (!p3) r17 = sxth(r21) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 e7 f5 70 +{ p3 = r5 + if (p3.new) r17 = sxth(r21) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 ef f5 70 +{ p3 = r5 + if (!p3.new) r17 = sxth(r21) } + +# Conditional transfer +# CHECK: b1 c2 60 7e +if (p3) r17 = #21 +# CHECK: b1 c2 e0 7e +if (!p3) r17 = #21 +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 e2 60 7e +{ p3 = r5 + if (p3.new) r17 = #21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 e2 e0 7e +{ p3 = r5 + if (!p3.new) r17 = #21 } + +# Conditional zero extend +# CHECK: 11 e3 95 70 +if (p3) r17 = zxtb(r21) +# CHECK: 11 eb 95 70 +if (!p3) r17 = zxtb(r21) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 e7 95 70 +{ p3 = r5 + if (p3.new) r17 = zxtb(r21) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 ef 95 70 +{ p3 = r5 + if (!p3.new) r17 = zxtb(r21) } +# CHECK: 11 e3 d5 70 +if (p3) r17 = zxth(r21) +# CHECK: 11 eb d5 70 +if (!p3) r17 = zxth(r21) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 e7 d5 70 +{ p3 = r5 + if (p3.new) r17 = zxth(r21) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 11 ef d5 70 +{ p3 = r5 + if (!p3.new) r17 = zxth(r21) } + +# Compare +# CHECK: e3 c3 15 75 +p3 = cmp.eq(r21, #31) +# CHECK: f3 c3 15 75 +p3 = !cmp.eq(r21, #31) +# CHECK: e3 c3 55 75 +p3 = cmp.gt(r21, #31) +# CHECK: f3 c3 55 75 +p3 = !cmp.gt(r21, #31) +# CHECK: e3 c3 95 75 +p3 = cmp.gtu(r21, #31) +# CHECK: f3 c3 95 75 +p3 = !cmp.gtu(r21, #31) +# CHECK: 03 df 15 f2 +p3 = cmp.eq(r21, r31) +# CHECK: 13 df 15 f2 +p3 = !cmp.eq(r21, r31) +# CHECK: 03 df 55 f2 +p3 = cmp.gt(r21, r31) +# CHECK: 13 df 55 f2 +p3 = !cmp.gt(r21, r31) +# CHECK: 03 df 75 f2 +p3 = cmp.gtu(r21, r31) +# CHECK: 13 df 75 f2 +p3 = !cmp.gtu(r21, r31) + +# Compare to general register +# CHECK: f1 e3 55 73 +r17 = cmp.eq(r21, #31) +# CHECK: f1 e3 75 73 +r17 = !cmp.eq(r21, #31) +# CHECK: 11 df 55 f3 +r17 = cmp.eq(r21, r31) +# CHECK: 11 df 75 f3 +r17 = !cmp.eq(r21, r31) diff --git a/llvm/test/MC/Hexagon/instructions/cr.s b/llvm/test/MC/Hexagon/instructions/cr.s new file mode 100644 index 00000000000..4cc21551865 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/cr.s @@ -0,0 +1,78 @@ +# RUN: llvm-mc --triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.2 CR + +# Corner detection acceleration +# CHECK: 93 e1 12 6b +p3 = !fastcorner9(p2, p1) +# CHECK: 91 e3 02 6b +p1 = fastcorner9(p2, p3) + +# Logical reductions on predicates +# CHECK: 01 c0 82 6b +p1 = any8(p2) +# CHECK: 01 c0 a2 6b +p1 = all8(p2) + +# Looping instructions +# CHECK: 00 c0 15 60 +loop0(0, r21) +# CHECK: 00 c0 35 60 +loop1(0, r21) +# CHECK: 60 c0 00 69 +loop0(0, #12) +# CHECK: 60 c0 20 69 +loop1(0, #12) + +# Add to PC +# CHECK: 91 ca 49 6a +r17 = add(pc, #21) + +# Pipelined loop instructions +# CHECK: 00 c0 b5 60 +p3 = sp1loop0(0, r21) +# CHECK: 00 c0 d5 60 +p3 = sp2loop0(0, r21) +# CHECK: 00 c0 f5 60 +p3 = sp3loop0(0, r21) +# CHECK: a1 c0 a0 69 +p3 = sp1loop0(0, #21) +# CHECK: a1 c0 c0 69 +p3 = sp2loop0(0, #21) +# CHECK: a1 c0 e0 69 +p3 = sp3loop0(0, #21) + +# Logical operations on predicates +# CHECK: 01 c3 02 6b +p1 = and(p3, p2) +# CHECK: c1 c3 12 6b +p1 = and(p2, and(p3, p3)) +# CHECK: 01 c3 22 6b +p1 = or(p3, p2) +# CHECK: c1 c3 32 6b +p1 = and(p2, or(p3, p3)) +# CHECK: 01 c3 42 6b +p1 = xor(p2, p3) +# CHECK: c1 c3 52 6b +p1 = or(p2, and(p3, p3)) +# CHECK: 01 c2 63 6b +p1 = and(p2, !p3) +# CHECK: c1 c3 72 6b +p1 = or(p2, or(p3, p3)) +# CHECK: c1 c3 92 6b +p1 = and(p2, and(p3, !p3)) +# CHECK: c1 c3 b2 6b +p1 = and(p2, or(p3, !p3)) +# CHECK: 01 c0 c2 6b +p1 = not(p2) +# CHECK: c1 c3 d2 6b +p1 = or(p2, and(p3, !p3)) +# CHECK: 01 c2 e3 6b +p1 = or(p2, !p3) +# CHECK: c1 c3 f2 6b +p1 = or(p2, or(p3, !p3)) + +# User control register transfer +# CHECK: 0d c0 35 62 +cs1 = r21 +# CHECK: 11 c0 0d 6a +r17 = cs1 diff --git a/llvm/test/MC/Hexagon/instructions/j.s b/llvm/test/MC/Hexagon/instructions/j.s new file mode 100644 index 00000000000..720edd62a90 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/j.s @@ -0,0 +1,207 @@ +# RUN: llvm-mc -triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.4 J +# XFAIL: * + +# Call subroutine +# CHECK: 00 c0 00 5a +call 0 +# CHECK: 00 c3 00 5d +if (p3) call 0 +# CHECK: 00 c3 20 5d +if (!p3) call 0 + +# Compare and jump +# CHECK: 00 c0 89 11 +{ p0 = cmp.eq(r17,#-1); if (p0.new) jump:nt 0 } +# CHECK: 00 c1 89 11 +{ p0 = cmp.gt(r17,#-1); if (p0.new) jump:nt 0 } +# CHECK: 00 c3 89 11 +{ p0 = tstbit(r17, #0); if (p0.new) jump:nt 0 } +# CHECK: 00 e0 89 11 +{ p0 = cmp.eq(r17,#-1); if (p0.new) jump:t 0 } +# CHECK: 00 e1 89 11 +{ p0 = cmp.gt(r17,#-1); if (p0.new) jump:t 0 } +# CHECK: 00 e3 89 11 +{ p0 = tstbit(r17, #0); if (p0.new) jump:t 0 } +# CHECK: 00 c0 c9 11 +{ p0 = cmp.eq(r17,#-1); if (!p0.new) jump:nt 0 } +# CHECK: 00 c1 c9 11 +{ p0 = cmp.gt(r17,#-1); if (!p0.new) jump:nt 0 } +# CHECK: 00 c3 c9 11 +{ p0 = tstbit(r17, #0); if (!p0.new) jump:nt 0 } +# CHECK: 00 e0 c9 11 +{ p0 = cmp.eq(r17,#-1); if (!p0.new) jump:t 0 } +# CHECK: 00 e1 c9 11 +{ p0 = cmp.gt(r17,#-1); if (!p0.new) jump:t 0 } +# CHECK: 00 e3 c9 11 +{ p0 = tstbit(r17, #0); if (!p0.new) jump:t 0 } +# CHECK: 00 d5 09 10 +{ p0 = cmp.eq(r17, #21); if (p0.new) jump:nt 0 } +# CHECK: 00 f5 09 10 +{ p0 = cmp.eq(r17, #21); if (p0.new) jump:t 0 } +# CHECK: 00 d5 49 10 +{ p0 = cmp.eq(r17, #21); if (!p0.new) jump:nt 0 } +# CHECK: 00 f5 49 10 +{ p0 = cmp.eq(r17, #21); if (!p0.new) jump:t 0 } +# CHECK: 00 d5 89 10 +{ p0 = cmp.gt(r17, #21); if (p0.new) jump:nt 0 } +# CHECK: 00 f5 89 10 +{ p0 = cmp.gt(r17, #21); if (p0.new) jump:t 0 } +# CHECK: 00 d5 c9 10 +{ p0 = cmp.gt(r17, #21); if (!p0.new) jump:nt 0 } +# CHECK: 00 f5 c9 10 +{ p0 = cmp.gt(r17, #21); if (!p0.new) jump:t 0 } +# CHECK: 00 d5 09 11 +{ p0 = cmp.gtu(r17, #21); if (p0.new) jump:nt 0 } +# CHECK: 00 f5 09 11 +{ p0 = cmp.gtu(r17, #21); if (p0.new) jump:t 0 } +# CHECK: 00 d5 49 11 +{ p0 = cmp.gtu(r17, #21); if (!p0.new) jump:nt 0 } +# CHECK: 00 f5 49 11 +{ p0 = cmp.gtu(r17, #21); if (!p0.new) jump:t 0 } +# CHECK: 00 c0 89 13 +{ p1 = cmp.eq(r17,#-1); if (p1.new) jump:nt 0 } +# CHECK: 00 c1 89 13 +{ p1 = cmp.gt(r17,#-1); if (p1.new) jump:nt 0 } +# CHECK: 00 c3 89 13 +{ p1 = tstbit(r17, #0); if (p1.new) jump:nt 0 } +# CHECK: 00 e0 89 13 +{ p1 = cmp.eq(r17,#-1); if (p1.new) jump:t 0 } +# CHECK: 00 e1 89 13 +{ p1 = cmp.gt(r17,#-1); if (p1.new) jump:t 0 } +# CHECK: 00 e3 89 13 +{ p1 = tstbit(r17, #0); if (p1.new) jump:t 0 } +# CHECK: 00 c0 c9 13 +{ p1 = cmp.eq(r17,#-1); if (!p1.new) jump:nt 0 } +# CHECK: 00 c1 c9 13 +{ p1 = cmp.gt(r17,#-1); if (!p1.new) jump:nt 0 } +# CHECK: 00 c3 c9 13 +{ p1 = tstbit(r17, #0); if (!p1.new) jump:nt 0 } +# CHECK: 00 e0 c9 13 +{ p1 = cmp.eq(r17,#-1); if (!p1.new) jump:t 0 } +# CHECK: 00 e1 c9 13 +{ p1 = cmp.gt(r17,#-1); if (!p1.new) jump:t 0 } +# CHECK: 00 e3 c9 13 +{ p1 = tstbit(r17, #0); if (!p1.new) jump:t 0 } +# CHECK: 00 d5 09 12 +{ p1 = cmp.eq(r17, #21); if (p1.new) jump:nt 0 } +# CHECK: 00 f5 09 12 +{ p1 = cmp.eq(r17, #21); if (p1.new) jump:t 0 } +# CHECK: 00 d5 49 12 +{ p1 = cmp.eq(r17, #21); if (!p1.new) jump:nt 0 } +# CHECK: 00 f5 49 12 +{ p1 = cmp.eq(r17, #21); if (!p1.new) jump:t 0 } +# CHECK: 00 d5 89 12 +{ p1 = cmp.gt(r17, #21); if (p1.new) jump:nt 0 } +# CHECK: 00 f5 89 12 +{ p1 = cmp.gt(r17, #21); if (p1.new) jump:t 0 } +# CHECK: 00 d5 c9 12 +{ p1 = cmp.gt(r17, #21); if (!p1.new) jump:nt 0 } +# CHECK: 00 f5 c9 12 +{ p1 = cmp.gt(r17, #21); if (!p1.new) jump:t 0 } +# CHECK: 00 d5 09 13 +{ p1 = cmp.gtu(r17, #21); if (p1.new) jump:nt 0 } +# CHECK: 00 f5 09 13 +{ p1 = cmp.gtu(r17, #21); if (p1.new) jump:t 0 } +# CHECK: 00 d5 49 13 +{ p1 = cmp.gtu(r17, #21); if (!p1.new) jump:nt 0 } +# CHECK: 00 f5 49 13 +{ p1 = cmp.gtu(r17, #21); if (!p1.new) jump:t 0 } +# CHECK: 00 cd 09 14 +{ p0 = cmp.eq(r17, r21); if (p0.new) jump:nt 0 } +# CHECK: 00 dd 09 14 +{ p1 = cmp.eq(r17, r21); if (p1.new) jump:nt 0 } +# CHECK: 00 ed 09 14 +{ p0 = cmp.eq(r17, r21); if (p0.new) jump:t 0 } +# CHECK: 00 fd 09 14 +{ p1 = cmp.eq(r17, r21); if (p1.new) jump:t 0 } +# CHECK: 00 cd 49 14 +{ p0 = cmp.eq(r17, r21); if (!p0.new) jump:nt 0 } +# CHECK: 00 dd 49 14 +{ p1 = cmp.eq(r17, r21); if (!p1.new) jump:nt 0 } +# CHECK: 00 ed 49 14 +{ p0 = cmp.eq(r17, r21); if (!p0.new) jump:t 0 } +# CHECK: 00 fd 49 14 +{ p1 = cmp.eq(r17, r21); if (!p1.new) jump:t 0 } +# CHECK: 00 cd 89 14 +{ p0 = cmp.gt(r17, r21); if (p0.new) jump:nt 0 } +# CHECK: 00 dd 89 14 +{ p1 = cmp.gt(r17, r21); if (p1.new) jump:nt 0 } +# CHECK: 00 ed 89 14 +{ p0 = cmp.gt(r17, r21); if (p0.new) jump:t 0 } +# CHECK: 00 fd 89 14 +{ p1 = cmp.gt(r17, r21); if (p1.new) jump:t 0 } +# CHECK: 00 cd c9 14 +{ p0 = cmp.gt(r17, r21); if (!p0.new) jump:nt 0 } +# CHECK: 00 dd c9 14 +{ p1 = cmp.gt(r17, r21); if (!p1.new) jump:nt 0 } +# CHECK: 00 ed c9 14 +{ p0 = cmp.gt(r17, r21); if (!p0.new) jump:t 0 } +# CHECK: 00 fd c9 14 +{ p1 = cmp.gt(r17, r21); if (!p1.new) jump:t 0 } +# CHECK: 00 cd 09 15 +{ p0 = cmp.gtu(r17, r21); if (p0.new) jump:nt 0 } +# CHECK: 00 dd 09 15 +{ p1 = cmp.gtu(r17, r21); if (p1.new) jump:nt 0 } +# CHECK: 00 ed 09 15 +{ p0 = cmp.gtu(r17, r21); if (p0.new) jump:t 0 } +# CHECK: 00 fd 09 15 +{ p1 = cmp.gtu(r17, r21); if (p1.new) jump:t 0 } +# CHECK: 00 cd 49 15 +{ p0 = cmp.gtu(r17, r21); if (!p0.new) jump:nt 0 } +# CHECK: 00 dd 49 15 +{ p1 = cmp.gtu(r17, r21); if (!p1.new) jump:nt 0 } +# CHECK: 00 ed 49 15 +{ p0 = cmp.gtu(r17, r21); if (!p0.new) jump:t 0 } +# CHECK: 00 fd 49 15 +{ p1 = cmp.gtu(r17, r21); if (!p1.new) jump:t 0 } + +# Jump to address +# CHECK: 00 c0 00 58 +jump 0 +# CHECK: 00 c3 00 5c +if (p3) jump 0 +# CHECK: 00 c3 20 5c +if (!p3) jump 0 + +# Jump to address conditioned on new predicate +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 cb 00 5c +{ p3 = r5 + if (p3.new) jump:nt 0 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 db 00 5c +{ p3 = r5 + if (p3.new) jump:t 0 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 cb 20 5c +{ p3 = r5 + if (!p3.new) jump:nt 0 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 db 20 5c +{ p3 = r5 + if (!p3.new) jump:t 0 } + +# Jump to address conditioned on register value +# CHECK: 00 c0 11 61 +if (r17!=#0) jump:nt 0 +# CHECK: 00 d0 11 61 +if (r17!=#0) jump:t 0 +# CHECK: 00 c0 51 61 +if (r17>=#0) jump:nt 0 +# CHECK: 00 d0 51 61 +if (r17>=#0) jump:t 0 +# CHECK: 00 c0 91 61 +if (r17==#0) jump:nt 0 +# CHECK: 00 d0 91 61 +if (r17==#0) jump:t 0 +# CHECK: 00 c0 d1 61 +if (r17<=#0) jump:nt 0 +# CHECK: 00 d0 d1 61 +if (r17<=#0) jump:t 0 + +# Transfer and jump +# CHECK: 00 d5 09 16 +{ r17 = #21 ; jump 0} +# CHECK: 00 c9 0d 17 +{ r17 = r21 ; jump 0 } diff --git a/llvm/test/MC/Hexagon/instructions/jr.s b/llvm/test/MC/Hexagon/instructions/jr.s new file mode 100644 index 00000000000..f4f32450f34 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/jr.s @@ -0,0 +1,38 @@ +# RUN: llvm-mc -triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.3 JR + +# Call subroutine from register +# CHECK: 00 c0 b5 50 +callr r21 +# CHECK: 00 c1 15 51 +if (p1) callr r21 +# CHECK: 00 c3 35 51 +if (!p3) callr r21 + +# Hint an indirect jump address +# CHECK: 00 c0 b5 52 +hintjr(r21) + +# Jump to address from register +# CHECK: 00 c0 95 52 +jumpr r21 +# CHECK: 00 c1 55 53 +if (p1) jumpr r21 +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 cb 55 53 +{ p3 = r5 + if (p3.new) jumpr:nt r21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 db 55 53 +{ p3 = r5 + if (p3.new) jumpr:t r21 } +# CHECK: 00 c3 75 53 +if (!p3) jumpr r21 +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 cb 75 53 +{ p3 = r5 + if (!p3.new) jumpr:nt r21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 db 75 53 +{ p3 = r5 + if (!p3.new) jumpr:t r21 } diff --git a/llvm/test/MC/Hexagon/instructions/ld.s b/llvm/test/MC/Hexagon/instructions/ld.s new file mode 100644 index 00000000000..cbfa7799f83 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/ld.s @@ -0,0 +1,499 @@ +# RUN: llvm-mc -triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.5 LD +# XFAIL: * + +# Load doubleword +# CHECK: 90 ff d5 3a +r17:16 = memd(r21 + r31<<#3) +# CHECK: b0 c2 c0 49 +r17:16 = memd(#168) +# CHECK: 02 40 00 00 +# CHECK-NEXT: 10 c5 c0 49 +r17:16 = memd(##168) +# CHECK: d0 c0 d5 91 +r17:16 = memd(r21 + #48) +# CHECK: b0 e0 d5 99 +r17:16 = memd(r21 ++ #40:circ(m1)) +# CHECK: 10 e2 d5 99 +r17:16 = memd(r21 ++ I:circ(m1)) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 70 d7 d5 9b +r17:16 = memd(r21 = ##31) +# CHECK: b0 c0 d5 9b +r17:16 = memd(r21++#40) +# CHECK: 10 e0 d5 9d +r17:16 = memd(r21++m1) +# CHECK: 10 e0 d5 9f +r17:16 = memd(r21 ++ m1:brev) + +# Load doubleword conditionally +# CHECK: f0 ff d5 30 +if (p3) r17:16 = memd(r21+r31<<#3) +# CHECK: f0 ff d5 31 +if (!p3) r17:16 = memd(r21+r31<<#3) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f0 ff d5 32 +{ p3 = r5 + if (p3.new) r17:16 = memd(r21+r31<<#3) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f0 ff d5 33 +{ p3 = r5 + if (!p3.new) r17:16 = memd(r21+r31<<#3) } +# CHECK: 70 d8 d5 41 +if (p3) r17:16 = memd(r21 + #24) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 70 d8 d5 43 +{ p3 = r5 + if (p3.new) r17:16 = memd(r21 + #24) } +# CHECK: 70 d8 d5 45 +if (!p3) r17:16 = memd(r21 + #24) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 70 d8 d5 47 +{ p3 = r5 + if (!p3.new) r17:16 = memd(r21 + #24) } +# CHECK: b0 e6 d5 9b +if (p3) r17:16 = memd(r21++#40) +# CHECK: b0 ee d5 9b +if (!p3) r17:16 = memd(r21++#40) +# CHECK: 03 40 45 85 +# CHECK-NEXT: b0 f6 d5 9b +{ p3 = r5 + if (p3.new) r17:16 = memd(r21++#40) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: b0 fe d5 9b +{ p3 = r5 + if (!p3.new) r17:16 = memd(r21++#40) } + +# Load byte +# CHECK: 91 ff 15 3a +r17 = memb(r21 + r31<<#3) +# CHECK: b1 c2 00 49 +r17 = memb(#21) +# CHECK: 00 40 00 00 +# CHECK-NEXT: b1 c2 00 49 +r17 = memb(##21) +# CHECK: f1 c3 15 91 +r17 = memb(r21 + #31) +# CHECK: b1 e0 15 99 +r17 = memb(r21 ++ #5:circ(m1)) +# CHECK: 11 e2 15 99 +r17 = memb(r21 ++ I:circ(m1)) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 71 d7 15 9b +r17 = memb(r21 = ##31) +# CHECK: b1 c0 15 9b +r17 = memb(r21++#5) +# CHECK: 11 e0 15 9d +r17 = memb(r21++m1) +# CHECK: 11 e0 15 9f +r17 = memb(r21 ++ m1:brev) + +# Load byte conditionally +# CHECK: f1 ff 15 30 +if (p3) r17 = memb(r21+r31<<#3) +# CHECK: f1 ff 15 31 +if (!p3) r17 = memb(r21+r31<<#3) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 15 32 +{ p3 = r5 + if (p3.new) r17 = memb(r21+r31<<#3) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 15 33 +{ p3 = r5 + if (!p3.new) r17 = memb(r21+r31<<#3) } +# CHECK: 91 dd 15 41 +if (p3) r17 = memb(r21 + #44) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 91 dd 15 43 +{ p3 = r5 + if (p3.new) r17 = memb(r21 + #44) } +# CHECK: 91 dd 15 45 +if (!p3) r17 = memb(r21 + #44) +# CHECK: 03 40 45 85 +# CHECK-NEXT: 91 dd 15 47 +{ p3 = r5 + if (!p3.new) r17 = memb(r21 + #44) } +# CHECK: b1 e6 15 9b +if (p3) r17 = memb(r21++#5) +# CHECK: b1 ee 15 9b +if (!p3) r17 = memb(r21++#5) +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 f6 15 9b +{ p3 = r5 + if (p3.new) r17 = memb(r21++#5) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 fe 15 9b +{ p3 = r5 + if (!p3.new) r17 = memb(r21++#5) } + +# Load byte into shifted vector +# CHECK: f0 c3 95 90 +r17:16 = memb_fifo(r21 + #31) +# CHECK: b0 e0 95 98 +r17:16 = memb_fifo(r21 ++ #5:circ(m1)) +# CHECK: 10 e2 95 98 +r17:16 = memb_fifo(r21 ++ I:circ(m1)) + +# Load half into shifted vector +# CHECK: f0 c3 55 90 +r17:16 = memh_fifo(r21 + #62) +# CHECK: b0 e0 55 98 +r17:16 = memh_fifo(r21 ++ #10:circ(m1)) +# CHECK: 10 e2 55 98 +r17:16 = memh_fifo(r21 ++ I:circ(m1)) + +# Load halfword +# CHECK: 91 ff 55 3a +r17 = memh(r21 + r31<<#3) +# CHECK: b1 c2 40 49 +r17 = memh(#42) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 51 c5 40 49 +r17 = memh(##42) +# CHECK: f1 c3 55 91 +r17 = memh(r21 + #62) +# CHECK: b1 e0 55 99 +r17 = memh(r21 ++ #10:circ(m1)) +# CHECK: 11 e2 55 99 +r17 = memh(r21 ++ I:circ(m1)) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 71 d7 55 9b +r17 = memh(r21 = ##31) +# CHECK: b1 c0 55 9b +r17 = memh(r21++#10) +# CHECK: 11 e0 55 9d +r17 = memh(r21++m1) +# CHECK: 11 e0 55 9f +r17 = memh(r21 ++ m1:brev) + +# Load halfword conditionally +# CHECK: f1 ff 55 30 +if (p3) r17 = memh(r21+r31<<#3) +# CHECK: f1 ff 55 31 +if (!p3) r17 = memh(r21+r31<<#3) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 55 32 +{ p3 = r5 + if (p3.new) r17 = memh(r21+r31<<#3) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 55 33 +{ p3 = r5 + if (!p3.new) r17 = memh(r21+r31<<#3) } +# CHECK: b1 e6 55 9b +if (p3) r17 = memh(r21++#10) +# CHECK: b1 ee 55 9b +if (!p3) r17 = memh(r21++#10) +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 f6 55 9b +{ p3 = r5 + if (p3.new) r17 = memh(r21++#10) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 fe 55 9b +{ p3 = r5 + if (!p3.new) r17 = memh(r21++#10) } +# CHECK: f1 db 55 41 +if (p3) r17 = memh(r21 + #62) +# CHECK: f1 db 55 45 +if (!p3) r17 = memh(r21 + #62) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 db 55 43 +{ p3 = r5 + if (p3.new) r17 = memh(r21 + #62) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 db 55 47 +{ p3 = r5 + if (!p3.new) r17 = memh(r21 + #62) } + +# Load unsigned byte +# CHECK: 91 ff 35 3a +r17 = memub(r21 + r31<<#3) +# CHECK: b1 c2 20 49 +r17 = memub(#21) +# CHECK: 00 40 00 00 +# CHECK-NEXT: b1 c2 20 49 +r17 = memub(##21) +# CHECK: f1 c3 35 91 +r17 = memub(r21 + #31) +# CHECK: b1 e0 35 99 +r17 = memub(r21 ++ #5:circ(m1)) +# CHECK: 11 e2 35 99 +r17 = memub(r21 ++ I:circ(m1)) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 71 d7 35 9b +r17 = memub(r21 = ##31) +# CHECK: b1 c0 35 9b +r17 = memub(r21++#5) +# CHECK: 11 e0 35 9d +r17 = memub(r21++m1) +# CHECK: 11 e0 35 9f +r17 = memub(r21 ++ m1:brev) + +# Load unsigned byte conditionally +# CHECK: f1 ff 35 30 +if (p3) r17 = memub(r21+r31<<#3) +# CHECK: f1 ff 35 31 +if (!p3) r17 = memub(r21+r31<<#3) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 35 32 +{ p3 = r5 + if (p3.new) r17 = memub(r21+r31<<#3) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 35 33 +{ p3 = r5 + if (!p3.new) r17 = memub(r21+r31<<#3) } +# CHECK: f1 db 35 41 +if (p3) r17 = memub(r21 + #31) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 db 35 43 +{ p3 = r5 + if (p3.new) r17 = memub(r21 + #31) } +# CHECK: f1 db 35 45 +if (!p3) r17 = memub(r21 + #31) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 db 35 47 +{ p3 = r5 + if (!p3.new) r17 = memub(r21 + #31) } +# CHECK: b1 e6 35 9b +if (p3) r17 = memub(r21++#5) +# CHECK: b1 ee 35 9b +if (!p3) r17 = memub(r21++#5) +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 f6 35 9b +{ p3 = r5 + if (p3.new) r17 = memub(r21++#5) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 fe 35 9b +{ p3 = r5 + if (!p3.new) r17 = memub(r21++#5) } + +# Load unsigned halfword +# CHECK: 91 ff 75 3a +r17 = memuh(r21 + r31<<#3) +# CHECK: b1 c2 60 49 +r17 = memuh(#42) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 51 c5 60 49 +r17 = memuh(##42) +# CHECK: b1 c2 75 91 +r17 = memuh(r21 + #42) +# CHECK: b1 e0 75 99 +r17 = memuh(r21 ++ #10:circ(m1)) +# CHECK: 11 e2 75 99 +r17 = memuh(r21 ++ I:circ(m1)) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 71 d7 75 9b +r17 = memuh(r21 = ##31) +# CHECK: b1 c0 75 9b +r17 = memuh(r21++#10) +# CHECK: 11 e0 75 9d +r17 = memuh(r21++m1) +# CHECK: 11 e0 75 9f +r17 = memuh(r21 ++ m1:brev) + +# Load unsigned halfword conditionally +# CHECK: f1 ff 75 30 +if (p3) r17 = memuh(r21+r31<<#3) +# CHECK: f1 ff 75 31 +if (!p3) r17 = memuh(r21+r31<<#3) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 75 32 +{ p3 = r5 + if (p3.new) r17 = memuh(r21+r31<<#3) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 75 33 +{ p3 = r5 + if (!p3.new) r17 = memuh(r21+r31<<#3) } +# CHECK: b1 da 75 41 +if (p3) r17 = memuh(r21 + #42) +# CHECK: b1 da 75 45 +if (!p3) r17 = memuh(r21 + #42) +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 da 75 43 +{ p3 = r5 + if (p3.new) r17 = memuh(r21 + #42) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 da 75 47 +{ p3 = r5 + if (!p3.new) r17 = memuh(r21 + #42) } +# CHECK: b1 e6 75 9b +if (p3) r17 = memuh(r21++#10) +# CHECK: b1 ee 75 9b +if (!p3) r17 = memuh(r21++#10) +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 f6 75 9b +{ p3 = r5 + if (p3.new) r17 = memuh(r21++#10) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 fe 75 9b +{ p3 = r5 + if (!p3.new) r17 = memuh(r21++#10) } + +# Load word +# CHECK: 91 ff 95 3a +r17 = memw(r21 + r31<<#3) +# CHECK: b1 c2 80 49 +r17 = memw(#84) +# CHECK: 01 40 00 00 +# CHECK-NEXT: 91 c2 80 49 +r17 = memw(##84) +# CHECK: b1 c2 95 91 +r17 = memw(r21 + #84) +# CHECK: b1 e0 95 99 +r17 = memw(r21 ++ #20:circ(m1)) +# CHECK: 11 e2 95 99 +r17 = memw(r21 ++ I:circ(m1)) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 71 d7 95 9b +r17 = memw(r21 = ##31) +# CHECK: b1 c0 95 9b +r17 = memw(r21++#20) +# CHECK: 11 e0 95 9d +r17 = memw(r21++m1) +# CHECK: 11 e0 95 9f +r17 = memw(r21 ++ m1:brev) + +# Load word conditionally +# CHECK: f1 ff 95 30 +if (p3) r17 = memw(r21+r31<<#3) +# CHECK: f1 ff 95 31 +if (!p3) r17 = memw(r21+r31<<#3) +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 95 32 +{ p3 = r5 + if (p3.new) r17 = memw(r21+r31<<#3) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f1 ff 95 33 +{ p3 = r5 + if (!p3.new) r17 = memw(r21+r31<<#3) } +# CHECK: b1 da 95 41 +if (p3) r17 = memw(r21 + #84) +# CHECK: b1 da 95 45 +if (!p3) r17 = memw(r21 + #84) +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 da 95 43 +{ p3 = r5 + if (p3.new) r17 = memw(r21 + #84) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 da 95 47 +{ p3 = r5 + if (!p3.new) r17 = memw(r21 + #84) } +# CHECK: b1 e6 95 9b +if (p3) r17 = memw(r21++#20) +# CHECK: b1 ee 95 9b +if (!p3) r17 = memw(r21++#20) +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 f6 95 9b +{ p3 = r5 + if (p3.new) r17 = memw(r21++#20) } +# CHECK: 03 40 45 85 +# CHECK-NEXT: b1 fe 95 9b +{ p3 = r5 + if (!p3.new) r17 = memw(r21++#20) } + +# Deallocate stack frame +# CHECK: 1e c0 1e 90 +deallocframe + +# Deallocate stack frame and return +# CHECK: 1e c0 1e 96 +dealloc_return +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1e cb 1e 96 +{ p3 = r5 + if (p3.new) dealloc_return:nt } +# CHECK: 1e d3 1e 96 +if (p3) dealloc_return +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1e db 1e 96 +{ p3 = r5 + if (p3.new) dealloc_return:t } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1e eb 1e 96 +{ p3 = r5 + if (!p3.new) dealloc_return:nt } +# CHECK: 1e f3 1e 96 +if (!p3) dealloc_return +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1e fb 1e 96 +{ p3 = r5 + if (!p3.new) dealloc_return:t } + +# Load and unpack bytes to halfwords +# CHECK: f1 c3 35 90 +r17 = membh(r21 + #62) +# CHECK: f1 c3 75 90 +r17 = memubh(r21 + #62) +# CHECK: f0 c3 b5 90 +r17:16 = memubh(r21 + #124) +# CHECK: f0 c3 f5 90 +r17:16 = membh(r21 + #124) +# CHECK: b1 e0 35 98 +r17 = membh(r21 ++ #10:circ(m1)) +# CHECK: 11 e2 35 98 +r17 = membh(r21 ++ I:circ(m1)) +# CHECK: b1 e0 75 98 +r17 = memubh(r21 ++ #10:circ(m1)) +# CHECK: 11 e2 75 98 +r17 = memubh(r21 ++ I:circ(m1)) +# CHECK: b0 e0 f5 98 +r17:16 = membh(r21 ++ #20:circ(m1)) +# CHECK: 10 e2 f5 98 +r17:16 = membh(r21 ++ I:circ(m1)) +# CHECK: b0 e0 b5 98 +r17:16 = memubh(r21 ++ #20:circ(m1)) +# CHECK: 10 e2 b5 98 +r17:16 = memubh(r21 ++ I:circ(m1)) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 71 d7 35 9a +r17 = membh(r21 = ##31) +# CHECK: b1 c0 35 9a +r17 = membh(r21++#10) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 71 d7 75 9a +r17 = memubh(r21 = ##31) +# CHECK: b1 c0 75 9a +r17 = memubh(r21++#10) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 70 d7 b5 9a +r17:16 = memubh(r21 = ##31) +# CHECK: b0 c0 b5 9a +r17:16 = memubh(r21++#20) +# CHECK: 00 40 00 00 +# CHECK-NEXT: 70 d7 f5 9a +r17:16 = membh(r21 = ##31) +# CHECK: b0 c0 f5 9a +r17:16 = membh(r21++#20) +# CHECK: 00 40 00 00 +# CHECK-NEXT: f1 f7 35 9c +r17 = membh(r21<<#3 + ##31) +# CHECK: 11 e0 35 9c +r17 = membh(r21++m1) +# CHECK: 00 40 00 00 +# CHECK-NEXT: f1 f7 75 9c +r17 = memubh(r21<<#3 + ##31) +# CHECK: 11 e0 75 9c +r17 = memubh(r21++m1) +# CHECK: 00 40 00 00 +# CHECK-NEXT: f0 f7 f5 9c +r17:16 = membh(r21<<#3 + ##31) +# CHECK: 10 e0 f5 9c +r17:16 = membh(r21++m1) +# CHECK: 00 40 00 00 +# CHECK-NEXT: f0 f7 b5 9c +r17:16 = memubh(r21<<#3 + ##31) +# CHECK: 11 e0 35 9c +r17 = membh(r21++m1) +# CHECK: 11 e0 75 9c +r17 = memubh(r21++m1) +# CHECK: 10 e0 f5 9c +r17:16 = membh(r21++m1) +# CHECK: 10 e0 b5 9c +r17:16 = memubh(r21++m1) +# CHECK: 11 e0 35 9e +r17 = membh(r21 ++ m1:brev) +# CHECK: 11 e0 75 9e +r17 = memubh(r21 ++ m1:brev) +# CHECK: 10 e0 b5 9e +r17:16 = memubh(r21 ++ m1:brev) +# CHECK: 10 e0 f5 9e +r17:16 = membh(r21 ++ m1:brev) diff --git a/llvm/test/MC/Hexagon/instructions/memop.s b/llvm/test/MC/Hexagon/instructions/memop.s new file mode 100644 index 00000000000..1aac69056b1 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/memop.s @@ -0,0 +1,56 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.6 MEMOP + +# Operation on memory byte +# CHECK: 95 d9 11 3e +memb(r17+#51) += r21 +# CHECK: b5 d9 11 3e +memb(r17+#51) -= r21 +# CHECK: d5 d9 11 3e +memb(r17+#51) &= r21 +# CHECK: f5 d9 11 3e +memb(r17+#51) |= r21 +# CHECK: 95 d9 11 3f +memb(r17+#51) += #21 +# CHECK: b5 d9 11 3f +memb(r17+#51) -= #21 +# CHECK: d5 d9 11 3f +memb(r17+#51) = clrbit(#21) +# CHECK: f5 d9 11 3f +memb(r17+#51) = setbit(#21) + +# Operation on memory halfword +# CHECK: 95 d9 31 3e +memh(r17+#102) += r21 +# CHECK: b5 d9 31 3e +memh(r17+#102) -= r21 +# CHECK: d5 d9 31 3e +memh(r17+#102) &= r21 +# CHECK: f5 d9 31 3e +memh(r17+#102) |= r21 +# CHECK: 95 d9 31 3f +memh(r17+#102) += #21 +# CHECK: b5 d9 31 3f +memh(r17+#102) -= #21 +# CHECK: d5 d9 31 3f +memh(r17+#102) = clrbit(#21) +# CHECK: f5 d9 31 3f +memh(r17+#102) = setbit(#21) + +# Operation on memory word +# CHECK: 95 d9 51 3e +memw(r17+#204) += r21 +# CHECK: b5 d9 51 3e +memw(r17+#204) -= r21 +# CHECK: d5 d9 51 3e +memw(r17+#204) &= r21 +# CHECK: f5 d9 51 3e +memw(r17+#204) |= r21 +# CHECK: 95 d9 51 3f +memw(r17+#204) += #21 +# CHECK: b5 d9 51 3f +memw(r17+#204) -= #21 +# CHECK: d5 d9 51 3f +memw(r17+#204) = clrbit(#21) +# CHECK: f5 d9 51 3f +memw(r17+#204) = setbit(#21) diff --git a/llvm/test/MC/Hexagon/instructions/nv_j.s b/llvm/test/MC/Hexagon/instructions/nv_j.s new file mode 100644 index 00000000000..5bc75c5a964 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/nv_j.s @@ -0,0 +1,180 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.7.1 NV/J + +# Jump to address conditioned on new register value +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 02 20 +{ r17 = r17 + if (cmp.eq(r17.new, r21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 02 20 +{ r17 = r17 + if (cmp.eq(r17.new, r21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 42 20 +{ r17 = r17 + if (!cmp.eq(r17.new, r21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 42 20 +{ r17 = r17 + if (!cmp.eq(r17.new, r21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 82 20 +{ r17 = r17 + if (cmp.gt(r17.new, r21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 82 20 +{ r17 = r17 + if (cmp.gt(r17.new, r21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 c2 20 +{ r17 = r17 + if (!cmp.gt(r17.new, r21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 c2 20 +{ r17 = r17 + if (!cmp.gt(r17.new, r21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 02 21 +{ r17 = r17 + if (cmp.gtu(r17.new, r21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 02 21 +{ r17 = r17 + if (cmp.gtu(r17.new, r21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 42 21 +{ r17 = r17 + if (!cmp.gtu(r17.new, r21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 42 21 +{ r17 = r17 + if (!cmp.gtu(r17.new, r21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 82 21 +{ r17 = r17 + if (cmp.gt(r21, r17.new)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 82 21 +{ r17 = r17 + if (cmp.gt(r21, r17.new)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 c2 21 +{ r17 = r17 + if (!cmp.gt(r21, r17.new)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 c2 21 +{ r17 = r17 + if (!cmp.gt(r21, r17.new)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 02 22 +{ r17 = r17 + if (cmp.gtu(r21, r17.new)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 02 22 +{ r17 = r17 + if (cmp.gtu(r21, r17.new)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 42 22 +{ r17 = r17 + if (!cmp.gtu(r21, r17.new)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 42 22 +{ r17 = r17 + if (!cmp.gtu(r21, r17.new)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 02 24 +{ r17 = r17 + if (cmp.eq(r17.new, #21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 02 24 +{ r17 = r17 + if (cmp.eq(r17.new, #21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 42 24 +{ r17 = r17 + if (!cmp.eq(r17.new, #21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 42 24 +{ r17 = r17 + if (!cmp.eq(r17.new, #21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 82 24 +{ r17 = r17 + if (cmp.gt(r17.new, #21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 82 24 +{ r17 = r17 + if (cmp.gt(r17.new, #21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 c2 24 +{ r17 = r17 + if (!cmp.gt(r17.new, #21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 c2 24 +{ r17 = r17 + if (!cmp.gt(r17.new, #21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 02 25 +{ r17 = r17 + if (cmp.gtu(r17.new, #21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 02 25 +{ r17 = r17 + if (cmp.gtu(r17.new, #21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 d5 42 25 +{ r17 = r17 + if (!cmp.gtu(r17.new, #21)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 f5 42 25 +{ r17 = r17 + if (!cmp.gtu(r17.new, #21)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 c0 82 25 +{ r17 = r17 + if (tstbit(r17.new, #0)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 e0 82 25 +{ r17 = r17 + if (tstbit(r17.new, #0)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 c0 c2 25 +{ r17 = r17 + if (!tstbit(r17.new, #0)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 e0 c2 25 +{ r17 = r17 + if (!tstbit(r17.new, #0)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 c0 02 26 +{ r17 = r17 + if (cmp.eq(r17.new, #-1)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 e0 02 26 +{ r17 = r17 + if (cmp.eq(r17.new, #-1)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 c0 42 26 +{ r17 = r17 + if (!cmp.eq(r17.new, #-1)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 e0 42 26 +{ r17 = r17 + if (!cmp.eq(r17.new, #-1)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 c0 82 26 +{ r17 = r17 + if (cmp.gt(r17.new, #-1)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 e0 82 26 +{ r17 = r17 + if (cmp.gt(r17.new, #-1)) jump:t 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 c0 c2 26 +{ r17 = r17 + if (!cmp.gt(r17.new, #-1)) jump:nt 0x0 } +# CHECK: 11 40 71 70 +# CHECK-NEXT: 00 e0 c2 26 +{ r17 = r17 + if (!cmp.gt(r17.new, #-1)) jump:t 0x0 } diff --git a/llvm/test/MC/Hexagon/instructions/nv_st.s b/llvm/test/MC/Hexagon/instructions/nv_st.s new file mode 100644 index 00000000000..4ff490024a8 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/nv_st.s @@ -0,0 +1,290 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.7.2 NV/ST + +# Store new-value byte +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 82 f5 b1 3b +{ r31 = r31 + memb(r17 + r21<<#3) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 11 c2 a0 48 +{ r31 = r31 + memb(#17) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 15 c2 b1 a1 +{ r31 = r31 + memb(r17+#21) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 02 e2 b1 a9 +{ r31 = r31 + memb(r17 ++ I:circ(m1)) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 28 e2 b1 a9 +{ r31 = r31 + memb(r17 ++ #5:circ(m1)) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 28 c2 b1 ab +{ r31 = r31 + memb(r17++#5) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 00 e2 b1 ad +{ r31 = r31 + memb(r17++m1) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 00 e2 b1 af +{ r31 = r31 + memb(r17 ++ m1:brev) = r31.new } + +# Store new-value byte conditionally +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: e2 f5 b1 34 +{ r31 = r31 + if (p3) memb(r17+r21<<#3) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: e2 f5 b1 35 +{ r31 = r31 + if (!p3) memb(r17+r21<<#3) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: e2 f5 b1 36 +{ p3 = r5 + r31 = r31 + if (p3.new) memb(r17+r21<<#3) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: e2 f5 b1 37 +{ p3 = r5 + r31 = r31 + if (!p3.new) memb(r17+r21<<#3) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: ab c2 b1 40 +{ r31 = r31 + if (p3) memb(r17+#21) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: ab c2 b1 44 +{ r31 = r31 + if (!p3) memb(r17+#21) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: ab c2 b1 42 +{ p3 = r5 + r31 = r31 + if (p3.new) memb(r17+#21) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: ab c2 b1 46 +{ p3 = r5 + r31 = r31 + if (!p3.new) memb(r17+#21) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 2b e2 b1 ab +{ r31 = r31 + if (p3) memb(r17++#5) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 2f e2 b1 ab +{ r31 = r31 + if (!p3) memb(r17++#5) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: ab e2 b1 ab +{ p3 = r5 + r31 = r31 + if (p3.new) memb(r17++#5) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: af e2 b1 ab +{ p3 = r5 + r31 = r31 + if (!p3.new) memb(r17++#5) = r31.new } + +# Store new-value halfword +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 8a f5 b1 3b +{ r31 = r31 + memh(r17 + r21<<#3) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 15 ca a0 48 +{ r31 = r31 + memh(#42) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 15 ca b1 a1 +{ r31 = r31 + memh(r17+#42) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 02 ea b1 a9 +{ r31 = r31 + memh(r17 ++ I:circ(m1)) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 28 ea b1 a9 +{ r31 = r31 + memh(r17 ++ #10:circ(m1)) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 28 ca b1 ab +{ r31 = r31 + memh(r17++#10) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 00 ea b1 ad +{ r31 = r31 + memh(r17++m1) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 00 ea b1 af +{ r31 = r31 + memh(r17 ++ m1:brev) = r31.new } + +# Store new-value halfword conditionally +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: ea f5 b1 34 +{ r31 = r31 + if (p3) memh(r17+r21<<#3) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: ea f5 b1 35 +{ r31 = r31 + if (!p3) memh(r17+r21<<#3) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: ea f5 b1 36 +{ p3 = r5 + r31 = r31 + if (p3.new) memh(r17+r21<<#3) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: ea f5 b1 37 +{ p3 = r5 + r31 = r31 + if (!p3.new) memh(r17+r21<<#3) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: ab ca b1 40 +{ r31 = r31 + if (p3) memh(r17+#42) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: ab ca b1 44 +{ r31 = r31 + if (!p3) memh(r17+#42) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: ab ca b1 42 +{ p3 = r5 + r31 = r31 + if (p3.new) memh(r17+#42) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: ab ca b1 46 +{ p3 = r5 + r31 = r31 + if (!p3.new) memh(r17+#42) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 2b ea b1 ab +{ r31 = r31 + if (p3) memh(r17++#10) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 2f ea b1 ab +{ r31 = r31 + if (!p3) memh(r17++#10) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: ab ea b1 ab +{ p3 = r5 + r31 = r31 + if (p3.new) memh(r17++#10) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: af ea b1 ab +{ p3 = r5 + r31 = r31 + if (!p3.new) memh(r17++#10) = r31.new } + +# Store new-value word +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 92 f5 b1 3b +{ r31 = r31 + memw(r17 + r21<<#3) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 15 d2 a0 48 +{ r31 = r31 + memw(#84) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 15 d2 b1 a1 +{ r31 = r31 + memw(r17+#84) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 02 f2 b1 a9 +{ r31 = r31 + memw(r17 ++ I:circ(m1)) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 28 f2 b1 a9 +{ r31 = r31 + memw(r17 ++ #20:circ(m1)) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 28 d2 b1 ab +{ r31 = r31 + memw(r17++#20) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 00 f2 b1 ad +{ r31 = r31 + memw(r17++m1) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 00 f2 b1 af +{ r31 = r31 + memw(r17 ++ m1:brev) = r31.new } + +# Store new-value word conditionally +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: f2 f5 b1 34 +{ r31 = r31 + if (p3) memw(r17+r21<<#3) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: f2 f5 b1 35 +{ r31 = r31 + if (!p3) memw(r17+r21<<#3) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: f2 f5 b1 36 +{ p3 = r5 + r31 = r31 + if (p3.new) memw(r17+r21<<#3) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: f2 f5 b1 37 +{ p3 = r5 + r31 = r31 + if (!p3.new) memw(r17+r21<<#3) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: ab d2 b1 40 +{ r31 = r31 + if (p3) memw(r17+#84) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: ab d2 b1 44 +{ r31 = r31 + if (!p3) memw(r17+#84) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: ab d2 b1 42 +{ p3 = r5 + r31 = r31 + if (p3.new) memw(r17+#84) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: ab d2 b1 46 +{ p3 = r5 + r31 = r31 + if (!p3.new) memw(r17+#84) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 2b f2 b1 ab +{ r31 = r31 + if (p3) memw(r17++#20) = r31.new } +# CHECK: 1f 40 7f 70 +# CHECK-NEXT: 2f f2 b1 ab +{ r31 = r31 + if (!p3) memw(r17++#20) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: ab f2 b1 ab +{ p3 = r5 + r31 = r31 + if (p3.new) memw(r17++#20) = r31.new } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 1f 40 7f 70 +# CHECK-NEXT: af f2 b1 ab +{ p3 = r5 + r31 = r31 + if (!p3.new) memw(r17++#20) = r31.new } diff --git a/llvm/test/MC/Hexagon/instructions/st.s b/llvm/test/MC/Hexagon/instructions/st.s new file mode 100644 index 00000000000..38822a62043 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/st.s @@ -0,0 +1,435 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.8 ST +# XFAIL: * + +# Store doubleword +# CHECK: 9e f5 d1 3b +memd(r17 + r21<<#3) = r31:30 +# CHECK: 28 d4 c0 48 +memd(#320) = r21:20 +# CHECK: 02 40 00 00 +# CHECK-NEXT: 28 d4 c0 48 +memd(##168) = r21:20 +memd(r17+#168) = r21:20 +# CHECK: 02 f4 d1 a9 +memd(r17 ++ I:circ(m1)) = r21:20 +# CHECK: 28 f4 d1 a9 +memd(r17 ++ #40:circ(m1)) = r21:20 +# CHECK: 28 d4 d1 ab +memd(r17++#40) = r21:20 +# CHECK: 00 40 00 00 +# CHECK-NEXT: d5 fe d1 ad +memd(r17<<#3 + ##21) = r31:30 +memd(r17++m1) = r21:20 +# CHECK: 00 f4 d1 af +memd(r17 ++ m1:brev) = r21:20 + +# Store doubleword conditionally +# CHECK: fe f5 d1 34 +if (p3) memd(r17+r21<<#3) = r31:30 +# CHECK: fe f5 d1 35 +if (!p3) memd(r17+r21<<#3) = r31:30 +# CHECK: 03 40 45 85 +# CHECK-NEXT: fe f5 d1 36 +{ p3 = r5 + if (p3.new) memd(r17+r21<<#3) = r31:30 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: fe f5 d1 37 +{ p3 = r5 + if (!p3.new) memd(r17+r21<<#3) = r31:30 } +# CHECK: ab de d1 40 +if (p3) memd(r17+#168) = r31:30 +# CHECK: ab de d1 44 +if (!p3) memd(r17+#168) = r31:30 +# CHECK: 03 40 45 85 +# CHECK-NEXT: ab de d1 42 +{ p3 = r5 + if (p3.new) memd(r17+#168) = r31:30 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: ab de d1 46 +{ p3 = r5 + if (!p3.new) memd(r17+#168) = r31:30 } +# CHECK: 2b f4 d1 ab +if (p3) memd(r17++#40) = r21:20 +# CHECK: 2f f4 d1 ab +if (!p3) memd(r17++#40) = r21:20 +# CHECK: 03 40 45 85 +# CHECK-NEXT: ab f4 d1 ab +{ p3 = r5 + if (p3.new) memd(r17++#40) = r21:20 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: af f4 d1 ab +{ p3 = r5 + if (!p3.new) memd(r17++#40) = r21:20 } +# CHECK: 02 40 00 00 +# CHECK-NEXT: c3 d4 c2 af +if (p3) memd(##168) = r21:20 +# CHECK: 02 40 00 00 +# CHECK-NEXT: c7 d4 c2 af +if (!p3) memd(##168) = r21:20 +# CHECK: 03 40 45 85 +# CHECK-NEXT: 02 40 00 00 +# CHECK-NEXT: c3 f4 c2 af +{ p3 = r5 + if (p3.new) memd(##168) = r21:20 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 02 40 00 00 +# CHECK-NEXT: c7 f4 c2 af +{ p3 = r5 + if (!p3.new) memd(##168) = r21:20 } + +# Store byte +# CHECK: 9f f5 11 3b +memb(r17 + r21<<#3) = r31 +# CHECK: 9f ca 11 3c +memb(r17+#21)=#31 +# CHECK: 15 d5 00 48 +memb(#21) = r21 +# CHECK: 00 40 00 00 +# CHECK-NEXT: 15 d5 00 48 +memb(##21) = r21 +# CHECK: 15 d5 11 a1 +memb(r17+#21) = r21 +# CHECK: 02 f5 11 a9 +memb(r17 ++ I:circ(m1)) = r21 +# CHECK: 28 f5 11 a9 +memb(r17 ++ #5:circ(m1)) = r21 +# CHECK: 28 d5 11 ab +memb(r17++#5) = r21 +# CHECK: 00 40 00 00 +# CHECK-NEXT: d5 ff 11 ad +memb(r17<<#3 + ##21) = r31 +# CHECK: 00 f5 11 ad +memb(r17++m1) = r21 +# CHECK: 00 f5 11 af +memb(r17 ++ m1:brev) = r21 + +# Store byte conditionally +# CHECK: ff f5 11 34 +if (p3) memb(r17+r21<<#3) = r31 +# CHECK: ff f5 11 35 +if (!p3) memb(r17+r21<<#3) = r31 +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff f5 11 36 +{ p3 = r5 + if (p3.new) memb(r17+r21<<#3) = r31 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff f5 11 37 +{ p3 = r5 + if (!p3.new) memb(r17+r21<<#3) = r31 } +# CHECK: ff ca 11 38 +if (p3) memb(r17+#21)=#31 +# CHECK: ff ca 91 38 +if (!p3) memb(r17+#21)=#31 +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff ca 11 39 +{ p3 = r5 + if (p3.new) memb(r17+#21)=#31 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff ca 91 39 +{ p3 = r5 + if (!p3.new) memb(r17+#21)=#31 } +# CHECK: ab df 11 40 +if (p3) memb(r17+#21) = r31 +# CHECK: ab df 11 44 +if (!p3) memb(r17+#21) = r31 +# CHECK: 03 40 45 85 +# CHECK-NEXT: ab df 11 42 +{ p3 = r5 + if (p3.new) memb(r17+#21) = r31 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: ab df 11 46 +{ p3 = r5 + if (!p3.new) memb(r17+#21) = r31 } +# CHECK: 2b f5 11 ab +if (p3) memb(r17++#5) = r21 +# CHECK: 2f f5 11 ab +if (!p3) memb(r17++#5) = r21 +# CHECK: 03 40 45 85 +# CHECK-NEXT: ab f5 11 ab +{ p3 = r5 + if (p3.new) memb(r17++#5) = r21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: af f5 11 ab +{ p3 = r5 + if (!p3.new) memb(r17++#5) = r21 } +# CHECK: 00 40 00 00 +# CHECK-NEXT: ab d5 01 af +if (p3) memb(##21) = r21 +# CHECK: 00 40 00 00 +# CHECK-NEXT: af d5 01 af +if (!p3) memb(##21) = r21 +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 40 00 00 +# CHECK-NEXT: ab f5 01 af +{ p3 = r5 + if (p3.new) memb(##21) = r21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 40 00 00 +# CHECK-NEXT: af f5 01 af +{ p3 = r5 + if (!p3.new) memb(##21) = r21 } + +# Store halfword +# CHECK: 9f f5 51 3b +memh(r17 + r21<<#3) = r31 +# CHECK: 9f f5 71 3b +memh(r17 + r21<<#3) = r31.h +# CHECK: 95 cf 31 3c +memh(r17+#62)=#21 +# CHECK: 00 40 00 00 +# CHECK-NEXT: 2a d5 40 48 +memh(##42) = r21 +# CHECK: 00 40 00 00 +# CHECK-NEXT: 2a d5 60 48 +memh(##42) = r21.h +# CHECK: 2a d5 40 48 +memh(#84) = r21 +# CHECK: 2a d5 60 48 +memh(#84) = r21.h +# CHECK: 15 df 51 a1 +memh(r17+#42) = r31 +# CHECK: 15 df 71 a1 +memh(r17+#42) = r31.h +# CHECK: 02 f5 51 a9 +memh(r17 ++ I:circ(m1)) = r21 +# CHECK: 28 f5 51 a9 +memh(r17 ++ #10:circ(m1)) = r21 +# CHECK: 02 f5 71 a9 +memh(r17 ++ I:circ(m1)) = r21.h +# CHECK: 28 f5 71 a9 +memh(r17 ++ #10:circ(m1)) = r21.h +# CHECK: 28 d5 51 ab +memh(r17++#10) = r21 +# CHECK: 00 40 00 00 +# CHECK-NEXT: d5 ff 51 ad +memh(r17<<#3 + ##21) = r31 +# CHECK: 28 d5 71 ab +memh(r17++#10) = r21.h +# CHECK: 00 40 00 00 +# CHECK-NEXT: d5 ff 71 ad +memh(r17<<#3 + ##21) = r31.h +# CHECK: 00 f5 51 ad +memh(r17++m1) = r21 +# CHECK: 00 f5 71 ad +memh(r17++m1) = r21.h +# CHECK: 00 f5 51 af +memh(r17 ++ m1:brev) = r21 +# CHECK: 00 f5 71 af +memh(r17 ++ m1:brev) = r21.h + +# Store halfword conditionally +# CHECK: ff f5 51 34 +if (p3) memh(r17+r21<<#3) = r31 +# CHECK: ff f5 71 34 +if (p3) memh(r17+r21<<#3) = r31.h +# CHECK: ff f5 51 35 +if (!p3) memh(r17+r21<<#3) = r31 +# CHECK: ff f5 71 35 +if (!p3) memh(r17+r21<<#3) = r31.h +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff f5 51 36 +{ p3 = r5 + if (p3.new) memh(r17+r21<<#3) = r31 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff f5 71 36 +{ p3 = r5 + if (p3.new) memh(r17+r21<<#3) = r31.h } +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff f5 51 37 +{ p3 = r5 + if (!p3.new) memh(r17+r21<<#3) = r31 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff f5 71 37 +{ p3 = r5 + if (!p3.new) memh(r17+r21<<#3) = r31.h } +# CHECK: f5 cf 31 38 +if (p3) memh(r17+#62)=#21 +# CHECK: f5 cf b1 38 +if (!p3) memh(r17+#62)=#21 +# CHECK: 03 40 45 85 +# CHECK-NEXT: f5 cf 31 39 +{ p3 = r5 + if (p3.new) memh(r17+#62)=#21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: f5 cf b1 39 +{ p3 = r5 + if (!p3.new) memh(r17+#62)=#21 } +# CHECK: fb d5 51 40 +if (p3) memh(r17+#62) = r21 +# CHECK: fb d5 71 40 +if (p3) memh(r17+#62) = r21.h +# CHECK: fb d5 51 44 +if (!p3) memh(r17+#62) = r21 +# CHECK: fb d5 71 44 +if (!p3) memh(r17+#62) = r21.h +# CHECK: 03 40 45 85 +# CHECK-NEXT: fb d5 51 42 +{ p3 = r5 + if (p3.new) memh(r17+#62) = r21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: fb d5 71 42 +{ p3 = r5 + if (p3.new) memh(r17+#62) = r21.h } +# CHECK: 03 40 45 85 +# CHECK-NEXT: fb d5 51 46 +{ p3 = r5 + if (!p3.new) memh(r17+#62) = r21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: fb d5 71 46 +{ p3 = r5 + if (!p3.new) memh(r17+#62) = r21.h } +# CHECK: 2b f5 51 ab +if (p3) memh(r17++#10) = r21 +# CHECK: 2f f5 51 ab +if (!p3) memh(r17++#10) = r21 +# CHECK: 03 40 45 85 +# CHECK-NEXT: ab f5 51 ab +{ p3 = r5 + if (p3.new) memh(r17++#10) = r21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: af f5 51 ab +{ p3 = r5 + if (!p3.new) memh(r17++#10) = r21 } +# CHECK: 2b f5 71 ab +if (p3) memh(r17++#10) = r21.h +# CHECK: 2f f5 71 ab +if (!p3) memh(r17++#10) = r21.h +# CHECK: 03 40 45 85 +# CHECK-NEXT: ab f5 71 ab +{ p3 = r5 + if (p3.new) memh(r17++#10) = r21.h } +# CHECK: 03 40 45 85 +# CHECK-NEXT: af f5 71 ab +{ p3 = r5 + if (!p3.new) memh(r17++#10) = r21.h } +# CHECK: 00 40 00 00 +# CHECK-NEXT: d3 d5 42 af +if (p3) memh(##42) = r21 +# CHECK: 00 40 00 00 +# CHECK-NEXT: d3 d5 62 af +if (p3) memh(##42) = r21.h +# CHECK: 00 40 00 00 +# CHECK-NEXT: d7 d5 42 af +if (!p3) memh(##42) = r21 +# CHECK: 00 40 00 00 +# CHECK-NEXT: d7 d5 62 af +if (!p3) memh(##42) = r21.h +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 40 00 00 +# CHECK-NEXT: d3 f5 42 af +{ p3 = r5 + if (p3.new) memh(##42) = r21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 40 00 00 +# CHECK-NEXT: d3 f5 62 af +{ p3 = r5 + if (p3.new) memh(##42) = r21.h } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 40 00 00 +# CHECK-NEXT: d7 f5 42 af +{ p3 = r5 + if (!p3.new) memh(##42) = r21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 00 40 00 00 +# CHECK-NEXT: d7 f5 62 af +{ p3 = r5 + if (!p3.new) memh(##42) = r21.h } + +# Store word +# CHECK: 9f f5 91 3b +memw(r17 + r21<<#3) = r31 +# CHECK: 9f ca 51 3c +memw(r17+#84)=#31 +# CHECK: 15 df 80 48 +memw(#84) = r31 +# CHECK: 01 40 00 00 +# CHECK-NEXT: 14 d5 80 48 +memw(##84) = r21 +# CHECK: 9f ca 51 3c +memw(r17+#84)=#31 +# CHECK: 15 df 91 a1 +memw(r17+#84) = r31 +# CHECK: 02 f5 91 a9 +memw(r17 ++ I:circ(m1)) = r21 +# CHECK: 28 f5 91 a9 +memw(r17 ++ #20:circ(m1)) = r21 +# CHECK: 28 d5 91 ab +memw(r17++#20) = r21 +# CHECK: 00 40 00 00 +# CHECK-NEXT: d5 ff 91 ad +memw(r17<<#3 + ##21) = r31 +# CHECK: 00 f5 91 ad +memw(r17++m1) = r21 +# CHECK: 00 f5 91 af +memw(r17 ++ m1:brev) = r21 + +# Store word conditionally +# CHECK: ff f5 91 34 +if (p3) memw(r17+r21<<#3) = r31 +# CHECK: ff f5 91 35 +if (!p3) memw(r17+r21<<#3) = r31 +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff f5 91 36 +{ p3 = r5 + if (p3.new) memw(r17+r21<<#3) = r31 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff f5 91 37 +{ p3 = r5 + if (!p3.new) memw(r17+r21<<#3) = r31 } +# CHECK: ff ca 51 38 +if (p3) memw(r17+#84)=#31 +# CHECK: ff ca d1 38 +if (!p3) memw(r17+#84)=#31 +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff ca 51 39 +{ p3 = r5 + if (p3.new) memw(r17+#84)=#31 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: ff ca d1 39 +{ p3 = r5 + if (!p3.new) memw(r17+#84)=#31 } +# CHECK: ab df 91 40 +if (p3) memw(r17+#84) = r31 +# CHECK: ab df 91 44 +if (!p3) memw(r17+#84) = r31 +# CHECK: 03 40 45 85 +# CHECK-NEXT: ab df 91 42 +{ p3 = r5 + if (p3.new) memw(r17+#84) = r31 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: ab df 91 46 +{ p3 = r5 + if (!p3.new) memw(r17+#84) = r31 } +# CHECK: 2b f5 91 ab +if (p3) memw(r17++#20) = r21 +# CHECK: 2f f5 91 ab +if (!p3) memw(r17++#20) = r21 +# CHECK: 03 40 45 85 +# CHECK-NEXT: af f5 91 ab +{ p3 = r5 + if (!p3.new) memw(r17++#20) = r21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: ab f5 91 ab +{ p3 = r5 + if (p3.new) memw(r17++#20) = r21 } +# CHECK: 01 40 00 00 +# CHECK-NEXT: a3 d5 81 af +if (p3) memw(##84) = r21 +# CHECK: 01 40 00 00 +# CHECK-NEXT: a7 d5 81 af +if (!p3) memw(##84) = r21 +# CHECK: 03 40 45 85 +# CHECK-NEXT: 01 40 00 00 +# CHECK-NEXT: a3 f5 81 af +{ p3 = r5 + if (p3.new) memw(##84) = r21 } +# CHECK: 03 40 45 85 +# CHECK-NEXT: 01 40 00 00 +# CHECK-NEXT: a7 f5 81 af +{ p3 = r5 + if (!p3.new) memw(##84) = r21 } + +# Allocate stack frame +# CHECK: 1f c0 9d a0 +allocframe(#248) diff --git a/llvm/test/MC/Hexagon/instructions/system_user.s b/llvm/test/MC/Hexagon/instructions/system_user.s new file mode 100644 index 00000000000..d52f8b41182 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/system_user.s @@ -0,0 +1,26 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.9.1 SYSTEM/USER + +# Load locked +# CHECK: 11 c0 15 92 +r17 = memw_locked(r21) +# CHECK: 10 d0 15 92 +r17:16 = memd_locked(r21) + +# Store conditional +# CHECK: 03 d5 b1 a0 +memw_locked(r17, p3) = r21 +# CHECK: 03 d4 f1 a0 +memd_locked(r17, p3) = r21:20 + +# Memory barrier +# CHECK: 00 c0 00 a8 +barrier + +# Data cache prefetch +# CHECK: 15 c0 11 94 +dcfetch(r17 + #168) + +# Send value to ETM trace +# CHECK: 00 c0 51 62 +trace(r17) diff --git a/llvm/test/MC/Hexagon/instructions/xtype_alu.s b/llvm/test/MC/Hexagon/instructions/xtype_alu.s new file mode 100644 index 00000000000..b68175ed1e2 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/xtype_alu.s @@ -0,0 +1,395 @@ +# 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 diff --git a/llvm/test/MC/Hexagon/instructions/xtype_bit.s b/llvm/test/MC/Hexagon/instructions/xtype_bit.s new file mode 100644 index 00000000000..6d2fa401b81 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/xtype_bit.s @@ -0,0 +1,118 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.10.2 XTYPE/BIT + +# Count leading +# CHECK: 11 c0 54 88 +r17 = clb(r21:20) +# CHECK: 51 c0 54 88 +r17 = cl0(r21:20) +# CHECK: 91 c0 54 88 +r17 = cl1(r21:20) +# CHECK: 11 c0 74 88 +r17 = normamt(r21:20) +# CHECK: 51 d7 74 88 +r17 = add(clb(r21:20), #23) +# CHECK: 11 d7 35 8c +r17 = add(clb(r21), #23) +# CHECK: 91 c0 15 8c +r17 = clb(r21) +# CHECK: b1 c0 15 8c +r17 = cl0(r21) +# CHECK: d1 c0 15 8c +r17 = cl1(r21) +# CHECK: f1 c0 15 8c +r17 = normamt(r21) + +# Count population +# CHECK: 71 c0 74 88 +r17 = popcount(r21:20) + +# Count trailing +# CHECK: 51 c0 f4 88 +r17 = ct0(r21:20) +# CHECK: 91 c0 f4 88 +r17 = ct1(r21:20) +# CHECK: 91 c0 55 8c +r17 = ct0(r21) +# CHECK: b1 c0 55 8c +r17 = ct1(r21) + +# Extract bitfield +# CHECK: f0 df 54 81 +r17:16 = extractu(r21:20, #31, #23) +# CHECK: f0 df 54 8a +r17:16 = extract(r21:20, #31, #23) +# CHECK: f1 df 55 8d +r17 = extractu(r21, #31, #23) +# CHECK: f1 df d5 8d +r17 = extract(r21, #31, #23) +# CHECK: 10 de 14 c1 +r17:16 = extractu(r21:20, r31:30) +# CHECK: 90 de d4 c1 +r17:16 = extract(r21:20, r31:30) +# CHECK: 11 de 15 c9 +r17 = extractu(r21, r31:30) +# CHECK: 51 de 15 c9 +r17 = extract(r21, r31:30) + +# Insert bitfield +# CHECK: f0 df 54 83 +r17:16 = insert(r21:20, #31, #23) +# CHECK: f1 df 55 8f +r17 = insert(r21, #31, #23) +# CHECK: 11 de 15 c8 +r17 = insert(r21, r31:30) +# CHECK: 10 de 14 ca +r17:16 = insert(r21:20, r31:30) + +# Interleave/deinterleave +# CHECK: 90 c0 d4 80 +r17:16 = deinterleave(r21:20) +# CHECK: b0 c0 d4 80 +r17:16 = interleave(r21:20) + +# Linear feedback-shift iteration +# CHECK: d0 de 94 c1 +r17:16 = lfs(r21:20, r31:30) + +# Masked parity +# CHECK: 11 de 14 d0 +r17 = parity(r21:20, r31:30) +# CHECK: 11 df f5 d5 +r17 = parity(r21, r31) + +# Bit reverse +# CHECK: d0 c0 d4 80 +r17:16 = brev(r21:20) +# CHECK: d1 c0 55 8c +r17 = brev(r21) + +# Set/clear/toggle bit +# CHECK: 11 df d5 8c +r17 = setbit(r21, #31) +# CHECK: 31 df d5 8c +r17 = clrbit(r21, #31) +# CHECK: 51 df d5 8c +r17 = togglebit(r21, #31) +# CHECK: 11 df 95 c6 +r17 = setbit(r21, r31) +# CHECK: 51 df 95 c6 +r17 = clrbit(r21, r31) +# CHECK: 91 df 95 c6 +r17 = togglebit(r21, r31) + +# Split bitfield +# CHECK: 90 df d5 88 +r17:16 = bitsplit(r21, #31) +# CHECK: 10 df 35 d4 +r17:16 = bitsplit(r21, r31) + +# Table index +# CHECK: f1 cd 15 87 +r17 = tableidxb(r21, #7, #13):raw +# CHECK: f1 cd 55 87 +r17 = tableidxh(r21, #7, #13):raw +# CHECK: f1 cd 95 87 +r17 = tableidxw(r21, #7, #13):raw +# CHECK: f1 cd d5 87 +r17 = tableidxd(r21, #7, #13):raw diff --git a/llvm/test/MC/Hexagon/instructions/xtype_complex.s b/llvm/test/MC/Hexagon/instructions/xtype_complex.s new file mode 100644 index 00000000000..901c29c80d9 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/xtype_complex.s @@ -0,0 +1,128 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.10.3 XTYPE/COMPLEX + +# Complex add/sub halfwords +# CHECK: 90 de 54 c1 +r17:16 = vxaddsubh(r21:20, r31:30):sat +# CHECK: d0 de 54 c1 +r17:16 = vxsubaddh(r21:20, r31:30):sat +# CHECK: 10 de d4 c1 +r17:16 = vxaddsubh(r21:20, r31:30):rnd:>>1:sat +# CHECK: 50 de d4 c1 +r17:16 = vxsubaddh(r21:20, r31:30):rnd:>>1:sat + +# Complex add/sub words +# CHECK: 10 de 54 c1 +r17:16 = vxaddsubw(r21:20, r31:30):sat +# CHECK: 50 de 54 c1 +r17:16 = vxsubaddw(r21:20, r31:30):sat + +# Complex multiply +# CHECK: d0 df 15 e5 +r17:16 = cmpy(r21, r31):sat +# CHECK: d0 df 95 e5 +r17:16 = cmpy(r21, r31):<<1:sat +# CHECK: d0 df 55 e5 +r17:16 = cmpy(r21, r31*):sat +# CHECK: d0 df d5 e5 +r17:16 = cmpy(r21, r31*):<<1:sat +# CHECK: d0 df 15 e7 +r17:16 += cmpy(r21, r31):sat +# CHECK: d0 df 95 e7 +r17:16 += cmpy(r21, r31):<<1:sat +# CHECK: f0 df 15 e7 +r17:16 -= cmpy(r21, r31):sat +# CHECK: f0 df 95 e7 +r17:16 -= cmpy(r21, r31):<<1:sat +# CHECK: d0 df 55 e7 +r17:16 += cmpy(r21, r31*):sat +# CHECK: d0 df d5 e7 +r17:16 += cmpy(r21, r31*):<<1:sat +# CHECK: f0 df 55 e7 +r17:16 -= cmpy(r21, r31*):sat +# CHECK: f0 df d5 e7 +r17:16 -= cmpy(r21, r31*):<<1:sat + +# Complex multiply real or imaginary +# CHECK: 30 df 15 e5 +r17:16 = cmpyi(r21, r31) +# CHECK: 50 df 15 e5 +r17:16 = cmpyr(r21, r31) +# CHECK: 30 df 15 e7 +r17:16 += cmpyi(r21, r31) +# CHECK: 50 df 15 e7 +r17:16 += cmpyr(r21, r31) + +# Complex multiply with round and pack +# CHECK: d1 df 35 ed +r17 = cmpy(r21, r31):rnd:sat +# CHECK: d1 df b5 ed +r17 = cmpy(r21, r31):<<1:rnd:sat +# CHECK: d1 df 75 ed +r17 = cmpy(r21, r31*):rnd:sat +# CHECK: d1 df f5 ed +r17 = cmpy(r21, r31*):<<1:rnd:sat + +# Complex multiply 32x16 +# CHECK: 91 df 14 c5 +r17 = cmpyiwh(r21:20, r31):<<1:rnd:sat +# CHECK: b1 df 14 c5 +r17 = cmpyiwh(r21:20, r31*):<<1:rnd:sat +# CHECK: d1 df 14 c5 +r17 = cmpyrwh(r21:20, r31):<<1:rnd:sat +# CHECK: f1 df 14 c5 +r17 = cmpyrwh(r21:20, r31*):<<1:rnd:sat + +# Vector complex multiply real or imaginary +# CHECK: d0 de 34 e8 +r17:16 = vcmpyr(r21:20, r31:30):sat +# CHECK: d0 de b4 e8 +r17:16 = vcmpyr(r21:20, r31:30):<<1:sat +# CHECK: d0 de 54 e8 +r17:16 = vcmpyi(r21:20, r31:30):sat +# CHECK: d0 de d4 e8 +r17:16 = vcmpyi(r21:20, r31:30):<<1:sat +# CHECK: 90 de 34 ea +r17:16 += vcmpyr(r21:20, r31:30):sat +# CHECK: 90 de 54 ea +r17:16 += vcmpyi(r21:20, r31:30):sat + +# Vector complex conjugate +# CHECK: f0 c0 94 80 +r17:16 = vconj(r21:20):sat + +# Vector complex rotate +# CHECK: 10 df d4 c3 +r17:16 = vcrotate(r21:20, r31) + +# Vector reduce complex multiply real or imaginary +# CHECK: 10 de 14 e8 +r17:16 = vrcmpyi(r21:20, r31:30) +# CHECK: 30 de 14 e8 +r17:16 = vrcmpyr(r21:20, r31:30) +# CHECK: 10 de 54 e8 +r17:16 = vrcmpyi(r21:20, r31:30*) +# CHECK: 30 de 74 e8 +r17:16 = vrcmpyr(r21:20, r31:30*) + +# Vector reduce complex multiply by scalar +# CHECK: 90 de b4 e8 +r17:16 = vrcmpys(r21:20, r31:30):<<1:sat:raw:hi +# CHECK: 90 de f4 e8 +r17:16 = vrcmpys(r21:20, r31:30):<<1:sat:raw:lo +# CHECK: 90 de b4 ea +r17:16 += vrcmpys(r21:20, r31:30):<<1:sat:raw:hi +# CHECK: 90 de f4 ea +r17:16 += vrcmpys(r21:20, r31:30):<<1:sat:raw:lo + +# Vector reduce complex multiply by scalar with round and pack +# CHECK: d1 de b4 e9 +r17 = vrcmpys(r21:20, r31:30):<<1:rnd:sat:raw:hi +# CHECK: f1 de b4 e9 +r17 = vrcmpys(r21:20, r31:30):<<1:rnd:sat:raw:lo + +# Vector reduce complex rotate +# CHECK: f0 ff d4 c3 +r17:16 = vrcrotate(r21:20, r31, #3) +# CHECK: 30 ff b4 cb +r17:16 += vrcrotate(r21:20, r31, #3) diff --git a/llvm/test/MC/Hexagon/instructions/xtype_fp.s b/llvm/test/MC/Hexagon/instructions/xtype_fp.s new file mode 100644 index 00000000000..184098ec6d0 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/xtype_fp.s @@ -0,0 +1,146 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.10.4 XTYPE/FP + +# Floating point addition +# CHECK: 11 df 15 eb +r17 = sfadd(r21, r31) + +# Classify floating-point value +# CHECK: 03 d5 f1 85 +p3 = sfclass(r17, #21) +# CHECK: b3 c2 90 dc +p3 = dfclass(r17:16, #21) + +# Compare floating-point value +# CHECK: 03 d5 f1 c7 +p3 = sfcmp.ge(r17, r21) +# CHECK: 23 d5 f1 c7 +p3 = sfcmp.uo(r17, r21) +# CHECK: 63 d5 f1 c7 +p3 = sfcmp.eq(r17, r21) +# CHECK: 83 d5 f1 c7 +p3 = sfcmp.gt(r17, r21) +# CHECK: 03 d4 f0 d2 +p3 = dfcmp.eq(r17:16, r21:20) +# CHECK: 23 d4 f0 d2 +p3 = dfcmp.gt(r17:16, r21:20) +# CHECK: 43 d4 f0 d2 +p3 = dfcmp.ge(r17:16, r21:20) +# CHECK: 63 d4 f0 d2 +p3 = dfcmp.uo(r17:16, r21:20) + +# Convert floating-point value to other format +# CHECK: 10 c0 95 84 +r17:16 = convert_sf2df(r21) +# CHECK: 31 c0 14 88 +r17 = convert_df2sf(r21:20) + +# Convert integer to floating-point value +# CHECK: 50 c0 f4 80 +r17:16 = convert_ud2df(r21:20) +# CHECK: 70 c0 f4 80 +r17:16 = convert_d2df(r21:20) +# CHECK: 30 c0 95 84 +r17:16 = convert_uw2df(r21) +# CHECK: 50 c0 95 84 +r17:16 = convert_w2df(r21) +# CHECK: 31 c0 34 88 +r17 = convert_ud2sf(r21:20) +# CHECK: 31 c0 54 88 +r17 = convert_d2sf(r21:20) +# CHECK: 11 c0 35 8b +r17 = convert_uw2sf(r21) +# CHECK: 11 c0 55 8b +r17 = convert_w2sf(r21) + +# Convert floating-point value to integer +# CHECK: 10 c0 f4 80 +r17:16 = convert_df2d(r21:20) +# CHECK: 30 c0 f4 80 +r17:16 = convert_df2ud(r21:20) +# CHECK: d0 c0 f4 80 +r17:16 = convert_df2d(r21:20):chop +# CHECK: f0 c0 f4 80 +r17:16 = convert_df2ud(r21:20):chop +# CHECK: 70 c0 95 84 +r17:16 = convert_sf2ud(r21) +# CHECK: 90 c0 95 84 +r17:16 = convert_sf2d(r21) +# CHECK: b0 c0 95 84 +r17:16 = convert_sf2ud(r21):chop +# CHECK: d0 c0 95 84 +r17:16 = convert_sf2d(r21):chop +# CHECK: 31 c0 74 88 +r17 = convert_df2uw(r21:20) +# CHECK: 31 c0 94 88 +r17 = convert_df2w(r21:20) +# CHECK: 31 c0 b4 88 +r17 = convert_df2uw(r21:20):chop +# CHECK: 31 c0 f4 88 +r17 = convert_df2w(r21:20):chop +# CHECK: 11 c0 75 8b +r17 = convert_sf2uw(r21) +# CHECK: 31 c0 75 8b +r17 = convert_sf2uw(r21):chop +# CHECK: 11 c0 95 8b +r17 = convert_sf2w(r21) +# CHECK: 31 c0 95 8b +r17 = convert_sf2w(r21):chop + +# Floating point extreme value assistance +# CHECK: 11 c0 b5 8b +r17 = sffixupr(r21) +# CHECK: 11 df d5 eb +r17 = sffixupn(r21, r31) +# CHECK: 31 df d5 eb +r17 = sffixupd(r21, r31) + +# Floating point fused multiply-add +# CHECK: 91 df 15 ef +r17 += sfmpy(r21, r31) +# CHECK: b1 df 15 ef +r17 -= sfmpy(r21, r31) + +# Floating point fused multiply-add with scaling +# CHECK: f1 df 75 ef +r17 += sfmpy(r21, r31, p3):scale + +# Floating point reciprocal square root approximation +# CHECK: 71 c0 f5 8b +r17, p3 = sfinvsqrta(r21) + +# Floating point fused multiply-add for library routines +# CHECK: d1 df 15 ef +r17 += sfmpy(r21, r31):lib +# CHECK: f1 df 15 ef +r17 -= sfmpy(r21, r31):lib + +# Create floating-point constant +# CHECK: b1 c2 00 d6 +r17 = sfmake(#21):pos +# CHECK: b1 c2 40 d6 +r17 = sfmake(#21):neg +# CHECK: b0 c2 00 d9 +r17:16 = dfmake(#21):pos +# CHECK: b0 c2 40 d9 +r17:16 = dfmake(#21):neg + +# Floating point maximum +# CHECK: 11 df 95 eb +r17 = sfmax(r21, r31) + +# Floating point minimum +# CHECK: 31 df 95 eb +r17 = sfmin(r21, r31) + +# Floating point multiply +# CHECK: 11 df 55 eb +r17 = sfmpy(r21, r31) + +# Floating point reciprocal approximation +# CHECK: f1 df f5 eb +r17, p3 = sfrecipa(r21, r31) + +# Floating point subtraction +# CHECK: 31 df 15 eb +r17 = sfsub(r21, r31) diff --git a/llvm/test/MC/Hexagon/instructions/xtype_mpy.s b/llvm/test/MC/Hexagon/instructions/xtype_mpy.s new file mode 100644 index 00000000000..4b9efd4cabc --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/xtype_mpy.s @@ -0,0 +1,400 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.10.5 XTYPE/MPY + +# Multiply and use lower result +# CHECK: b1 df 35 d7 +r17 = add(#21, mpyi(r21, r31)) +# CHECK: bf d1 35 d8 +r17 = add(#21, mpyi(r21, #31)) +# CHECK: b5 d1 3f df +r17 = add(r21, mpyi(#84, r31)) +# CHECK: f5 f1 b5 df +r17 = add(r21, mpyi(r21, #31)) +# CHECK: 15 d1 1f e3 +r17 = add(r21, mpyi(r17, r31)) +# CHECK: f1 c3 15 e0 +r17 =+ mpyi(r21, #31) +# CHECK: f1 c3 95 e0 +r17 =- mpyi(r21, #31) +# CHECK: f1 c3 15 e1 +r17 += mpyi(r21, #31) +# CHECK: f1 c3 95 e1 +r17 -= mpyi(r21, #31) +# CHECK: 11 df 15 ed +r17 = mpyi(r21, r31) +# CHECK: 11 df 15 ef +r17 += mpyi(r21, r31) + +# Vector multiply word by signed half (32x16) +# CHECK: b0 de 14 e8 +r17:16 = vmpyweh(r21:20, r31:30):sat +# CHECK: b0 de 94 e8 +r17:16 = vmpyweh(r21:20, r31:30):<<1:sat +# CHECK: f0 de 14 e8 +r17:16 = vmpywoh(r21:20, r31:30):sat +# CHECK: f0 de 94 e8 +r17:16 = vmpywoh(r21:20, r31:30):<<1:sat +# CHECK: b0 de 34 e8 +r17:16 = vmpyweh(r21:20, r31:30):rnd:sat +# CHECK: b0 de b4 e8 +r17:16 = vmpyweh(r21:20, r31:30):<<1:rnd:sat +# CHECK: f0 de 34 e8 +r17:16 = vmpywoh(r21:20, r31:30):rnd:sat +# CHECK: f0 de b4 e8 +r17:16 = vmpywoh(r21:20, r31:30):<<1:rnd:sat +# CHECK: b0 de 14 ea +r17:16 += vmpyweh(r21:20, r31:30):sat +# CHECK: b0 de 94 ea +r17:16 += vmpyweh(r21:20, r31:30):<<1:sat +# CHECK: f0 de 14 ea +r17:16 += vmpywoh(r21:20, r31:30):sat +# CHECK: f0 de 94 ea +r17:16 += vmpywoh(r21:20, r31:30):<<1:sat +# CHECK: b0 de 34 ea +r17:16 += vmpyweh(r21:20, r31:30):rnd:sat +# CHECK: b0 de b4 ea +r17:16 += vmpyweh(r21:20, r31:30):<<1:rnd:sat +# CHECK: f0 de 34 ea +r17:16 += vmpywoh(r21:20, r31:30):rnd:sat +# CHECK: f0 de b4 ea +r17:16 += vmpywoh(r21:20, r31:30):<<1:rnd:sat + +# Vector multiply word by unsigned half (32x16) +# CHECK: b0 de 54 e8 +r17:16 = vmpyweuh(r21:20, r31:30):sat +# CHECK: b0 de d4 e8 +r17:16 = vmpyweuh(r21:20, r31:30):<<1:sat +# CHECK: f0 de 54 e8 +r17:16 = vmpywouh(r21:20, r31:30):sat +# CHECK: f0 de d4 e8 +r17:16 = vmpywouh(r21:20, r31:30):<<1:sat +# CHECK: b0 de 74 e8 +r17:16 = vmpyweuh(r21:20, r31:30):rnd:sat +# CHECK: b0 de f4 e8 +r17:16 = vmpyweuh(r21:20, r31:30):<<1:rnd:sat +# CHECK: f0 de 74 e8 +r17:16 = vmpywouh(r21:20, r31:30):rnd:sat +# CHECK: f0 de f4 e8 +r17:16 = vmpywouh(r21:20, r31:30):<<1:rnd:sat +# CHECK: b0 de 54 ea +r17:16 += vmpyweuh(r21:20, r31:30):sat +# CHECK: b0 de d4 ea +r17:16 += vmpyweuh(r21:20, r31:30):<<1:sat +# CHECK: f0 de 54 ea +r17:16 += vmpywouh(r21:20, r31:30):sat +# CHECK: f0 de d4 ea +r17:16 += vmpywouh(r21:20, r31:30):<<1:sat +# CHECK: b0 de 74 ea +r17:16 += vmpyweuh(r21:20, r31:30):rnd:sat +# CHECK: b0 de f4 ea +r17:16 += vmpyweuh(r21:20, r31:30):<<1:rnd:sat +# CHECK: f0 de 74 ea +r17:16 += vmpywouh(r21:20, r31:30):rnd:sat +# CHECK: f0 de f4 ea +r17:16 += vmpywouh(r21:20, r31:30):<<1:rnd:sat + +# Multiply signed halfwords +# CHECK: 10 df 95 e4 +r17:16 = mpy(r21.l, r31.l):<<1 +# CHECK: 30 df 95 e4 +r17:16 = mpy(r21.l, r31.h):<<1 +# CHECK: 50 df 95 e4 +r17:16 = mpy(r21.h, r31.l):<<1 +# CHECK: 70 df 95 e4 +r17:16 = mpy(r21.h, r31.h):<<1 +# CHECK: 10 df b5 e4 +r17:16 = mpy(r21.l, r31.l):<<1:rnd +# CHECK: 30 df b5 e4 +r17:16 = mpy(r21.l, r31.h):<<1:rnd +# CHECK: 50 df b5 e4 +r17:16 = mpy(r21.h, r31.l):<<1:rnd +# CHECK: 70 df b5 e4 +r17:16 = mpy(r21.h, r31.h):<<1:rnd +# CHECK: 10 df 95 e6 +r17:16 += mpy(r21.l, r31.l):<<1 +# CHECK: 30 df 95 e6 +r17:16 += mpy(r21.l, r31.h):<<1 +# CHECK: 50 df 95 e6 +r17:16 += mpy(r21.h, r31.l):<<1 +# CHECK: 70 df 95 e6 +r17:16 += mpy(r21.h, r31.h):<<1 +# CHECK: 10 df b5 e6 +r17:16 -= mpy(r21.l, r31.l):<<1 +# CHECK: 30 df b5 e6 +r17:16 -= mpy(r21.l, r31.h):<<1 +# CHECK: 50 df b5 e6 +r17:16 -= mpy(r21.h, r31.l):<<1 +# CHECK: 70 df b5 e6 +r17:16 -= mpy(r21.h, r31.h):<<1 +# CHECK: 11 df 95 ec +r17 = mpy(r21.l, r31.l):<<1 +# CHECK: 31 df 95 ec +r17 = mpy(r21.l, r31.h):<<1 +# CHECK: 51 df 95 ec +r17 = mpy(r21.h, r31.l):<<1 +# CHECK: 71 df 95 ec +r17 = mpy(r21.h, r31.h):<<1 +# CHECK: 91 df 95 ec +r17 = mpy(r21.l, r31.l):<<1:sat +# CHECK: b1 df 95 ec +r17 = mpy(r21.l, r31.h):<<1:sat +# CHECK: d1 df 95 ec +r17 = mpy(r21.h, r31.l):<<1:sat +# CHECK: f1 df 95 ec +r17 = mpy(r21.h, r31.h):<<1:sat +# CHECK: 11 df b5 ec +r17 = mpy(r21.l, r31.l):<<1:rnd +# CHECK: 31 df b5 ec +r17 = mpy(r21.l, r31.h):<<1:rnd +# CHECK: 51 df b5 ec +r17 = mpy(r21.h, r31.l):<<1:rnd +# CHECK: 71 df b5 ec +r17 = mpy(r21.h, r31.h):<<1:rnd +# CHECK: 91 df b5 ec +r17 = mpy(r21.l, r31.l):<<1:rnd:sat +# CHECK: b1 df b5 ec +r17 = mpy(r21.l, r31.h):<<1:rnd:sat +# CHECK: d1 df b5 ec +r17 = mpy(r21.h, r31.l):<<1:rnd:sat +# CHECK: f1 df b5 ec +r17 = mpy(r21.h, r31.h):<<1:rnd:sat +# CHECK: 11 df 95 ee +r17 += mpy(r21.l, r31.l):<<1 +# CHECK: 31 df 95 ee +r17 += mpy(r21.l, r31.h):<<1 +# CHECK: 51 df 95 ee +r17 += mpy(r21.h, r31.l):<<1 +# CHECK: 71 df 95 ee +r17 += mpy(r21.h, r31.h):<<1 +# CHECK: 91 df 95 ee +r17 += mpy(r21.l, r31.l):<<1:sat +# CHECK: b1 df 95 ee +r17 += mpy(r21.l, r31.h):<<1:sat +# CHECK: d1 df 95 ee +r17 += mpy(r21.h, r31.l):<<1:sat +# CHECK: f1 df 95 ee +r17 += mpy(r21.h, r31.h):<<1:sat +# CHECK: 11 df b5 ee +r17 -= mpy(r21.l, r31.l):<<1 +# CHECK: 31 df b5 ee +r17 -= mpy(r21.l, r31.h):<<1 +# CHECK: 51 df b5 ee +r17 -= mpy(r21.h, r31.l):<<1 +# CHECK: 71 df b5 ee +r17 -= mpy(r21.h, r31.h):<<1 +# CHECK: 91 df b5 ee +r17 -= mpy(r21.l, r31.l):<<1:sat +# CHECK: b1 df b5 ee +r17 -= mpy(r21.l, r31.h):<<1:sat +# CHECK: d1 df b5 ee +r17 -= mpy(r21.h, r31.l):<<1:sat +# CHECK: f1 df b5 ee +r17 -= mpy(r21.h, r31.h):<<1:sat + +# Multiply unsigned halfwords +# CHECK: 10 df d5 e4 +r17:16 = mpyu(r21.l, r31.l):<<1 +# CHECK: 30 df d5 e4 +r17:16 = mpyu(r21.l, r31.h):<<1 +# CHECK: 50 df d5 e4 +r17:16 = mpyu(r21.h, r31.l):<<1 +# CHECK: 70 df d5 e4 +r17:16 = mpyu(r21.h, r31.h):<<1 +# CHECK: 10 df d5 e6 +r17:16 += mpyu(r21.l, r31.l):<<1 +# CHECK: 30 df d5 e6 +r17:16 += mpyu(r21.l, r31.h):<<1 +# CHECK: 50 df d5 e6 +r17:16 += mpyu(r21.h, r31.l):<<1 +# CHECK: 70 df d5 e6 +r17:16 += mpyu(r21.h, r31.h):<<1 +# CHECK: 10 df f5 e6 +r17:16 -= mpyu(r21.l, r31.l):<<1 +# CHECK: 30 df f5 e6 +r17:16 -= mpyu(r21.l, r31.h):<<1 +# CHECK: 50 df f5 e6 +r17:16 -= mpyu(r21.h, r31.l):<<1 +# CHECK: 70 df f5 e6 +r17:16 -= mpyu(r21.h, r31.h):<<1 +# CHECK: 11 df d5 ec +r17 = mpyu(r21.l, r31.l):<<1 +# CHECK: 31 df d5 ec +r17 = mpyu(r21.l, r31.h):<<1 +# CHECK: 51 df d5 ec +r17 = mpyu(r21.h, r31.l):<<1 +# CHECK: 71 df d5 ec +r17 = mpyu(r21.h, r31.h):<<1 +# CHECK: 11 df d5 ee +r17 += mpyu(r21.l, r31.l):<<1 +# CHECK: 31 df d5 ee +r17 += mpyu(r21.l, r31.h):<<1 +# CHECK: 51 df d5 ee +r17 += mpyu(r21.h, r31.l):<<1 +# CHECK: 71 df d5 ee +r17 += mpyu(r21.h, r31.h):<<1 +# CHECK: 11 df f5 ee +r17 -= mpyu(r21.l, r31.l):<<1 +# CHECK: 31 df f5 ee +r17 -= mpyu(r21.l, r31.h):<<1 +# CHECK: 51 df f5 ee +r17 -= mpyu(r21.h, r31.l):<<1 +# CHECK: 71 df f5 ee +r17 -= mpyu(r21.h, r31.h):<<1 + +# Polynomial multiply words +# CHECK: f0 df 55 e5 +r17:16 = pmpyw(r21, r31) +# CHECK: f0 df 35 e7 +r17:16 ^= pmpyw(r21, r31) + +# Vector reduce multiply word by signed half (32x16) +# CHECK: 50 de 34 e8 +r17:16 = vrmpywoh(r21:20, r31:30) +# CHECK: 50 de b4 e8 +r17:16 = vrmpywoh(r21:20, r31:30):<<1 +# CHECK: 90 de 54 e8 +r17:16 = vrmpyweh(r21:20, r31:30) +# CHECK: 90 de d4 e8 +r17:16 = vrmpyweh(r21:20, r31:30):<<1 +# CHECK: d0 de 74 ea +r17:16 += vrmpywoh(r21:20, r31:30) +# CHECK: d0 de f4 ea +r17:16 += vrmpywoh(r21:20, r31:30):<<1 +# CHECK: d0 de 34 ea +r17:16 += vrmpyweh(r21:20, r31:30) +# CHECK: d0 de b4 ea +r17:16 += vrmpyweh(r21:20, r31:30):<<1 + +# Multiply and use upper result +# CHECK: 31 df 15 ed +r17 = mpy(r21, r31) +# CHECK: 31 df 35 ed +r17 = mpy(r21, r31):rnd +# CHECK: 31 df 55 ed +r17 = mpyu(r21, r31) +# CHECK: 31 df 75 ed +r17 = mpysu(r21, r31) +# CHECK: 11 df b5 ed +r17 = mpy(r21, r31.h):<<1:sat +# CHECK: 31 df b5 ed +r17 = mpy(r21, r31.l):<<1:sat +# CHECK: 91 df b5 ed +r17 = mpy(r21, r31.h):<<1:rnd:sat +# CHECK: 11 df f5 ed +r17 = mpy(r21, r31):<<1:sat +# CHECK: 91 df f5 ed +r17 = mpy(r21, r31.l):<<1:rnd:sat +# CHECK: 51 df b5 ed +r17 = mpy(r21, r31):<<1 +# CHECK: 11 df 75 ef +r17 += mpy(r21, r31):<<1:sat +# CHECK: 31 df 75 ef +r17 -= mpy(r21, r31):<<1:sat + +# Multiply and use full result +# CHECK: 10 df 15 e5 +r17:16 = mpy(r21, r31) +# CHECK: 10 df 55 e5 +r17:16 = mpyu(r21, r31) +# CHECK: 10 df 15 e7 +r17:16 += mpy(r21, r31) +# CHECK: 10 df 35 e7 +r17:16 -= mpy(r21, r31) +# CHECK: 10 df 55 e7 +r17:16 += mpyu(r21, r31) +# CHECK: 10 df 75 e7 +r17:16 -= mpyu(r21, r31) + +# Vector dual multiply +# CHECK: 90 de 14 e8 +r17:16 = vdmpy(r21:20, r31:30):sat +# CHECK: 90 de 94 e8 +r17:16 = vdmpy(r21:20, r31:30):<<1:sat +# CHECK: 90 de 14 ea +r17:16 += vdmpy(r21:20, r31:30):sat +# CHECK: 90 de 94 ea +r17:16 += vdmpy(r21:20, r31:30):<<1:sat + +# Vector dual multiply with round and pack +# CHECK: 11 de 14 e9 +r17 = vdmpy(r21:20, r31:30):rnd:sat +# CHECK: 11 de 94 e9 +r17 = vdmpy(r21:20, r31:30):<<1:rnd:sat + +# Vector reduce multiply bytes +# CHECK: 30 de 94 e8 +r17:16 = vrmpybu(r21:20, r31:30) +# CHECK: 30 de d4 e8 +r17:16 = vrmpybsu(r21:20, r31:30) +# CHECK: 30 de 94 ea +r17:16 += vrmpybu(r21:20, r31:30) +# CHECK: 30 de d4 ea +r17:16 += vrmpybsu(r21:20, r31:30) + +# Vector dual multiply signed by unsigned bytes +# CHECK: 30 de b4 e8 +r17:16 = vdmpybsu(r21:20, r31:30):sat +# CHECK: 30 de 34 ea +r17:16 += vdmpybsu(r21:20, r31:30):sat + +# Vector multiply even haldwords +# CHECK: d0 de 14 e8 +r17:16 = vmpyeh(r21:20, r31:30):sat +# CHECK: d0 de 94 e8 +r17:16 = vmpyeh(r21:20, r31:30):<<1:sat +# CHECK: 50 de 34 ea +r17:16 += vmpyeh(r21:20, r31:30) +# CHECK: d0 de 14 ea +r17:16 += vmpyeh(r21:20, r31:30):sat +# CHECK: d0 de 94 ea +r17:16 += vmpyeh(r21:20, r31:30):<<1:sat + +# Vector multiply halfwords +# CHECK: b0 df 15 e5 +r17:16 = vmpyh(r21, r31):sat +# CHECK: b0 df 95 e5 +r17:16 = vmpyh(r21, r31):<<1:sat +# CHECK: 30 df 35 e7 +r17:16 += vmpyh(r21, r31) +# CHECK: b0 df 15 e7 +r17:16 += vmpyh(r21, r31):sat +# CHECK: b0 df 95 e7 +r17:16 += vmpyh(r21, r31):<<1:sat + +# Vector multiply halfwords with round and pack +# CHECK: f1 df 35 ed +r17 = vmpyh(r21, r31):rnd:sat +# CHECK: f1 df b5 ed +r17 = vmpyh(r21, r31):<<1:rnd:sat + +# Vector multiply halfwords signed by unsigned +# CHECK: f0 df 15 e5 +r17:16 = vmpyhsu(r21, r31):sat +# CHECK: f0 df 95 e5 +r17:16 = vmpyhsu(r21, r31):<<1:sat +# CHECK: b0 df 75 e7 +r17:16 += vmpyhsu(r21, r31):sat +# CHECK: b0 df f5 e7 +r17:16 += vmpyhsu(r21, r31):<<1:sat + +# Vector reduce multiply halfwords +# CHECK: 50 de 14 e8 +r17:16 = vrmpyh(r21:20, r31:30) +# CHECK: 50 de 14 ea +r17:16 += vrmpyh(r21:20, r31:30) + +# Vector multiply bytes +# CHECK: 30 df 55 e5 +r17:16 = vmpybsu(r21, r31) +# CHECK: 30 df 95 e5 +r17:16 = vmpybu(r21, r31) +# CHECK: 30 df 95 e7 +r17:16 += vmpybu(r21, r31) +# CHECK: 30 df d5 e7 +r17:16 += vmpybsu(r21, r31) + +# Vector polynomial multiply halfwords +# CHECK: f0 df d5 e5 +r17:16 = vpmpyh(r21, r31) +# CHECK: f0 df b5 e7 +r17:16 ^= vpmpyh(r21, r31) diff --git a/llvm/test/MC/Hexagon/instructions/xtype_perm.s b/llvm/test/MC/Hexagon/instructions/xtype_perm.s new file mode 100644 index 00000000000..d8033ec8017 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/xtype_perm.s @@ -0,0 +1,104 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.10.6 XTYPE/PERM + +# CABAC decode bin +# CHECK: d0 de d4 c1 +r17:16 = decbin(r21:20, r31:30) + +# Saturate +# CHECK: 11 c0 d4 88 +r17 = sat(r21:20) +# CHECK: 91 c0 d5 8c +r17 = sath(r21) +# CHECK: b1 c0 d5 8c +r17 = satuh(r21) +# CHECK: d1 c0 d5 8c +r17 = satub(r21) +# CHECK: f1 c0 d5 8c +r17 = satb(r21) + +# Swizzle bytes +# CHECK: f1 c0 95 8c +r17 = swiz(r21) + +# Vector align +# CHECK: 70 d4 1e c2 +r17:16 = valignb(r21:20, r31:30, p3) +# CHECK: 70 de 94 c2 +r17:16 = vspliceb(r21:20, r31:30, p3) + +# Vector round and pack +# CHECK: 91 c0 94 88 +r17 = vrndwh(r21:20) +# CHECK: d1 c0 94 88 +r17 = vrndwh(r21:20):sat + +# Vector saturate and pack +# CHECK: 11 c0 14 88 +r17 = vsathub(r21:20) +# CHECK: 51 c0 14 88 +r17 = vsatwh(r21:20) +# CHECK: 91 c0 14 88 +r17 = vsatwuh(r21:20) +# CHECK: d1 c0 14 88 +r17 = vsathb(r21:20) +# CHECK: 11 c0 95 8c +r17 = vsathb(r21) +# CHECK: 51 c0 95 8c +r17 = vsathub(r21) + +# Vector saturate without pack +# CHECK: 90 c0 14 80 +r17:16 = vsathub(r21:20) +# CHECK: b0 c0 14 80 +r17:16 = vsatwuh(r21:20) +# CHECK: d0 c0 14 80 +r17:16 = vsatwh(r21:20) +# CHECK: f0 c0 14 80 +r17:16 = vsathb(r21:20) + +# Vector shuffle +# CHECK: 50 de 14 c1 +r17:16 = shuffeb(r21:20, r31:30) +# CHECK: 90 d4 1e c1 +r17:16 = shuffob(r21:20, r31:30) +# CHECK: d0 de 14 c1 +r17:16 = shuffeh(r21:20, r31:30) +# CHECK: 10 d4 9e c1 +r17:16 = shuffoh(r21:20, r31:30) + +# Vector splat bytes +# CHECK: f1 c0 55 8c +r17 = vsplatb(r21) + +# Vector splat halfwords +# CHECK: 50 c0 55 84 +r17:16 = vsplath(r21) + +# Vector splice +# CHECK: 70 de 94 c0 +r17:16 = vspliceb(r21:20, r31:30, #3) +# CHECK: 70 de 94 c2 +r17:16 = vspliceb(r21:20, r31:30, p3) + +# Vector sign extend +# CHECK: 10 c0 15 84 +r17:16 = vsxtbh(r21) +# CHECK: 90 c0 15 84 +r17:16 = vsxthw(r21) + +# Vector truncate +# CHECK: 11 c0 94 88 +r17 = vtrunohb(r21:20) +# CHECK: 51 c0 94 88 +r17 = vtrunehb(r21:20) +# CHECK: 50 de 94 c1 +r17:16 = vtrunewh(r21:20, r31:30) +# CHECK: 90 de 94 c1 +r17:16 = vtrunowh(r21:20, r31:30) + +# Vector zero extend +# CHECK: 50 c0 15 84 +r17:16 = vzxtbh(r21) +# CHECK: d0 c0 15 84 +r17:16 = vzxthw(r21) diff --git a/llvm/test/MC/Hexagon/instructions/xtype_pred.s b/llvm/test/MC/Hexagon/instructions/xtype_pred.s new file mode 100644 index 00000000000..769de0f6e02 --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/xtype_pred.s @@ -0,0 +1,136 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.10.7 XTYPE/PRED + +# Bounds check +# CHECK: 83 f4 10 d2 +p3 = boundscheck(r17:16, r21:20):raw:lo +# CHECK: a3 f4 10 d2 +p3 = boundscheck(r17:16, r21:20):raw:hi + +# Compare byte +# CHECK: 43 d5 d1 c7 +p3 = cmpb.gt(r17, r21) +# CHECK: c3 d5 d1 c7 +p3 = cmpb.eq(r17, r21) +# CHECK: e3 d5 d1 c7 +p3 = cmpb.gtu(r17, r21) +# CHECK: a3 c2 11 dd +p3 = cmpb.eq(r17, #21) +# CHECK: a3 c2 31 dd +p3 = cmpb.gt(r17, #21) +# CHECK: a3 c2 51 dd +p3 = cmpb.gtu(r17, #21) + +# Compare half +# CHECK: 63 d5 d1 c7 +p3 = cmph.eq(r17, r21) +# CHECK: 83 d5 d1 c7 +p3 = cmph.gt(r17, r21) +# CHECK: a3 d5 d1 c7 +p3 = cmph.gtu(r17, r21) +# CHECK: ab c2 11 dd +p3 = cmph.eq(r17, #21) +# CHECK: ab c2 31 dd +p3 = cmph.gt(r17, #21) +# CHECK: ab c2 51 dd +p3 = cmph.gtu(r17, #21) + +# Compare doublewords +# CHECK: 03 de 94 d2 +p3 = cmp.eq(r21:20, r31:30) +# CHECK: 43 de 94 d2 +p3 = cmp.gt(r21:20, r31:30) +# CHECK: 83 de 94 d2 +p3 = cmp.gtu(r21:20, r31:30) + +# Compare bitmask +# CHECK: 03 d5 91 85 +p3 = bitsclr(r17, #21) +# CHECK: 03 d5 b1 85 +p3 = !bitsclr(r17, #21) +# CHECK: 03 d5 51 c7 +p3 = bitsset(r17, r21) +# CHECK: 03 d5 71 c7 +p3 = !bitsset(r17, r21) +# CHECK: 03 d5 91 c7 +p3 = bitsclr(r17, r21) +# CHECK: 03 d5 b1 c7 +p3 = !bitsclr(r17, r21) + +# mask generate from predicate +# CHECK: 10 c3 00 86 +r17:16 = mask(p3) + +# Check for TLB match +# CHECK: 63 f5 10 d2 +p3 = tlbmatch(r17:16, r21) + +# Predicate Transfer +# CHECK: 03 c0 45 85 +p3 = r5 +# CHECK: 05 c0 43 89 +r5 = p3 + +# Test bit +# CHECK: 03 d5 11 85 +p3 = tstbit(r17, #21) +# CHECK: 03 d5 31 85 +p3 = !tstbit(r17, #21) +# CHECK: 03 d5 11 c7 +p3 = tstbit(r17, r21) +# CHECK: 03 d5 31 c7 +p3 = !tstbit(r17, r21) + +# Vector compare halfwords +# CHECK: 63 de 14 d2 +p3 = vcmph.eq(r21:20, r31:30) +# CHECK: 83 de 14 d2 +p3 = vcmph.gt(r21:20, r31:30) +# CHECK: a3 de 14 d2 +p3 = vcmph.gtu(r21:20, r31:30) +# CHECK: eb c3 14 dc +p3 = vcmph.eq(r21:20, #31) +# CHECK: eb c3 34 dc +p3 = vcmph.gt(r21:20, #31) +# CHECK: eb c3 54 dc +p3 = vcmph.gtu(r21:20, #31) + +# Vector compare bytes for any match +# CHECK: 03 fe 14 d2 +p3 = any8(vcmpb.eq(r21:20, r31:30)) + +# Vector compare bytes +# CHECK: 63 de 14 d2 +p3 = vcmph.eq(r21:20, r31:30) +# CHECK: 83 de 14 d2 +p3 = vcmph.gt(r21:20, r31:30) +# CHECK: a3 de 14 d2 +p3 = vcmph.gtu(r21:20, r31:30) +# CHECK: eb c3 14 dc +p3 = vcmph.eq(r21:20, #31) +# CHECK: eb c3 34 dc +p3 = vcmph.gt(r21:20, #31) +# CHECK: eb c3 54 dc +p3 = vcmph.gtu(r21:20, #31) + +# Vector compare words +# CHECK: 03 de 14 d2 +p3 = vcmpw.eq(r21:20, r31:30) +# CHECK: 23 de 14 d2 +p3 = vcmpw.gt(r21:20, r31:30) +# CHECK: 43 de 14 d2 +p3 = vcmpw.gtu(r21:20, r31:30) +# CHECK: f3 c3 14 dc +p3 = vcmpw.eq(r21:20, #31) +# CHECK: f3 c3 34 dc +p3 = vcmpw.gt(r21:20, #31) +# CHECK: f3 c3 54 dc +p3 = vcmpw.gtu(r21:20, #31) + +# Viterbi pack even and odd predicate bits +# CHECK: 11 c2 03 89 +r17 = vitpack(p3, p2) + +# Vector mux +# CHECK: 70 de 14 d1 +r17:16 = vmux(p3, r21:20, r31:30) diff --git a/llvm/test/MC/Hexagon/instructions/xtype_shift.s b/llvm/test/MC/Hexagon/instructions/xtype_shift.s new file mode 100644 index 00000000000..bbe327b62ba --- /dev/null +++ b/llvm/test/MC/Hexagon/instructions/xtype_shift.s @@ -0,0 +1,260 @@ +# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s +# Hexagon Programmer's Reference Manual 11.10.8 XTYPE/SHIFT + +# Shift by immediate +# CHECK: 10 df 14 80 +r17:16 = asr(r21:20, #31) +# CHECK: 30 df 14 80 +r17:16 = lsr(r21:20, #31) +# CHECK: 50 df 14 80 +r17:16 = asl(r21:20, #31) +# CHECK: 11 df 15 8c +r17 = asr(r21, #31) +# CHECK: 31 df 15 8c +r17 = lsr(r21, #31) +# CHECK: 51 df 15 8c +r17 = asl(r21, #31) + +# Shift by immediate and accumulate +# CHECK: 10 df 14 82 +r17:16 -= asr(r21:20, #31) +# CHECK: 30 df 14 82 +r17:16 -= lsr(r21:20, #31) +# CHECK: 50 df 14 82 +r17:16 -= asl(r21:20, #31) +# CHECK: 90 df 14 82 +r17:16 += asr(r21:20, #31) +# CHECK: b0 df 14 82 +r17:16 += lsr(r21:20, #31) +# CHECK: d0 df 14 82 +r17:16 += asl(r21:20, #31) +# CHECK: 11 df 15 8e +r17 -= asr(r21, #31) +# CHECK: 31 df 15 8e +r17 -= lsr(r21, #31) +# CHECK: 51 df 15 8e +r17 -= asl(r21, #31) +# CHECK: 91 df 15 8e +r17 += asr(r21, #31) +# CHECK: b1 df 15 8e +r17 += lsr(r21, #31) +# CHECK: d1 df 15 8e +r17 += asl(r21, #31) +# CHECK: 4c f7 11 de +r17 = add(#21, asl(r17, #23)) +# CHECK: 4e f7 11 de +r17 = sub(#21, asl(r17, #23)) +# CHECK: 5c f7 11 de +r17 = add(#21, lsr(r17, #23)) +# CHECK: 5e f7 11 de +r17 = sub(#21, lsr(r17, #23)) + +# Shift by immediate and add +# CHECK: f1 d5 1f c4 +r17 = addasl(r21, r31, #7) + +# Shift by immediate and logical +# CHECK: 10 df 54 82 +r17:16 &= asr(r21:20, #31) +# CHECK: 30 df 54 82 +r17:16 &= lsr(r21:20, #31) +# CHECK: 50 df 54 82 +r17:16 &= asl(r21:20, #31) +# CHECK: 90 df 54 82 +r17:16 |= asr(r21:20, #31) +# CHECK: b0 df 54 82 +r17:16 |= lsr(r21:20, #31) +# CHECK: d0 df 54 82 +r17:16 |= asl(r21:20, #31) +# CHECK: 30 df 94 82 +r17:16 ^= lsr(r21:20, #31) +# CHECK: 50 df 94 82 +r17:16 ^= asl(r21:20, #31) +# CHECK: 11 df 55 8e +r17 &= asr(r21, #31) +# CHECK: 31 df 55 8e +r17 &= lsr(r21, #31) +# CHECK: 51 df 55 8e +r17 &= asl(r21, #31) +# CHECK: 91 df 55 8e +r17 |= asr(r21, #31) +# CHECK: b1 df 55 8e +r17 |= lsr(r21, #31) +# CHECK: d1 df 55 8e +r17 |= asl(r21, #31) +# CHECK: 31 df 95 8e +r17 ^= lsr(r21, #31) +# CHECK: 51 df 95 8e +r17 ^= asl(r21, #31) +# CHECK: 48 ff 11 de +r17 = and(#21, asl(r17, #31)) +# CHECK: 4a ff 11 de +r17 = or(#21, asl(r17, #31)) +# CHECK: 58 ff 11 de +r17 = and(#21, lsr(r17, #31)) +# CHECK: 5a ff 11 de +r17 = or(#21, lsr(r17, #31)) + +# Shift right by immediate with rounding +# CHECK: f0 df d4 80 +r17:16 = asr(r21:20, #31):rnd +# CHECK: 11 df 55 8c +r17 = asr(r21, #31):rnd + +# Shift left by immediate with saturation +# CHECK: 51 df 55 8c +r17 = asl(r21, #31):sat + +# Shift by register +# CHECK: 10 df 94 c3 +r17:16 = asr(r21:20, r31) +# CHECK: 50 df 94 c3 +r17:16 = lsr(r21:20, r31) +# CHECK: 90 df 94 c3 +r17:16 = asl(r21:20, r31) +# CHECK: d0 df 94 c3 +r17:16 = lsl(r21:20, r31) +# CHECK: 11 df 55 c6 +r17 = asr(r21, r31) +# CHECK: 51 df 55 c6 +r17 = lsr(r21, r31) +# CHECK: 91 df 55 c6 +r17 = asl(r21, r31) +# CHECK: d1 df 55 c6 +r17 = lsl(r21, r31) +# CHECK: f1 df 8a c6 +r17 = lsl(#21, r31) + +# Shift by register and accumulate +# CHECK: 10 df 94 cb +r17:16 -= asr(r21:20, r31) +# CHECK: 50 df 94 cb +r17:16 -= lsr(r21:20, r31) +# CHECK: 90 df 94 cb +r17:16 -= asl(r21:20, r31) +# CHECK: d0 df 94 cb +r17:16 -= lsl(r21:20, r31) +# CHECK: 10 df d4 cb +r17:16 += asr(r21:20, r31) +# CHECK: 50 df d4 cb +r17:16 += lsr(r21:20, r31) +# CHECK: 90 df d4 cb +r17:16 += asl(r21:20, r31) +# CHECK: d0 df d4 cb +r17:16 += lsl(r21:20, r31) +# CHECK: 11 df 95 cc +r17 -= asr(r21, r31) +# CHECK: 51 df 95 cc +r17 -= lsr(r21, r31) +# CHECK: 91 df 95 cc +r17 -= asl(r21, r31) +# CHECK: d1 df 95 cc +r17 -= lsl(r21, r31) +# CHECK: 11 df d5 cc +r17 += asr(r21, r31) +# CHECK: 51 df d5 cc +r17 += lsr(r21, r31) +# CHECK: 91 df d5 cc +r17 += asl(r21, r31) +# CHECK: d1 df d5 cc +r17 += lsl(r21, r31) + +# Shift by register and logical +# CHECK: 10 df 14 cb +r17:16 |= asr(r21:20, r31) +# CHECK: 50 df 14 cb +r17:16 |= lsr(r21:20, r31) +# CHECK: 90 df 14 cb +r17:16 |= asl(r21:20, r31) +# CHECK: d0 df 14 cb +r17:16 |= lsl(r21:20, r31) +# CHECK: 10 df 54 cb +r17:16 &= asr(r21:20, r31) +# CHECK: 50 df 54 cb +r17:16 &= lsr(r21:20, r31) +# CHECK: 90 df 54 cb +r17:16 &= asl(r21:20, r31) +# CHECK: d0 df 54 cb +r17:16 &= lsl(r21:20, r31) +# CHECK: 10 df 74 cb +r17:16 ^= asr(r21:20, r31) +# CHECK: 50 df 74 cb +r17:16 ^= lsr(r21:20, r31) +# CHECK: 90 df 74 cb +r17:16 ^= asl(r21:20, r31) +# CHECK: d0 df 74 cb +r17:16 ^= lsl(r21:20, r31) +# CHECK: 11 df 15 cc +r17 |= asr(r21, r31) +# CHECK: 51 df 15 cc +r17 |= lsr(r21, r31) +# CHECK: 91 df 15 cc +r17 |= asl(r21, r31) +# CHECK: d1 df 15 cc +r17 |= lsl(r21, r31) +# CHECK: 11 df 55 cc +r17 &= asr(r21, r31) +# CHECK: 51 df 55 cc +r17 &= lsr(r21, r31) +# CHECK: 91 df 55 cc +r17 &= asl(r21, r31) +# CHECK: d1 df 55 cc +r17 &= lsl(r21, r31) + +# Shift by register with saturation +# CHECK: 11 df 15 c6 +r17 = asr(r21, r31):sat +# CHECK: 91 df 15 c6 +r17 = asl(r21, r31):sat + +# Vector shift halfwords by immediate +# CHECK: 10 c5 94 80 +r17:16 = vasrh(r21:20, #5) +# CHECK: 30 c5 94 80 +r17:16 = vlsrh(r21:20, #5) +# CHECK: 50 c5 94 80 +r17:16 = vaslh(r21:20, #5) + +# Vector arithmetic shift halfwords with round +# CHECK: 10 c5 34 80 +r17:16 = vasrh(r21:20, #5):raw + +# Vector arithmetic shift halfwords with saturate and pack +# CHECK: 91 c5 74 88 +r17 = vasrhub(r21:20, #5):raw +# CHECK: b1 c5 74 88 +r17 = vasrhub(r21:20, #5):sat + +# Vector shift halfwords by register +# CHECK: 10 df 54 c3 +r17:16 = vasrh(r21:20, r31) +# CHECK: 50 df 54 c3 +r17:16 = vlsrh(r21:20, r31) +# CHECK: 90 df 54 c3 +r17:16 = vaslh(r21:20, r31) +# CHECK: d0 df 54 c3 +r17:16 = vlslh(r21:20, r31) + +# Vector shift words by immediate +# CHECK: 10 df 54 80 +r17:16 = vasrw(r21:20, #31) +# CHECK: 30 df 54 80 +r17:16 = vlsrw(r21:20, #31) +# CHECK: 50 df 54 80 +r17:16 = vaslw(r21:20, #31) + +# Vector shift words by register +# CHECK: 10 df 14 c3 +r17:16 = vasrw(r21:20, r31) +# CHECK: 50 df 14 c3 +r17:16 = vlsrw(r21:20, r31) +# CHECK: 90 df 14 c3 +r17:16 = vaslw(r21:20, r31) +# CHECK: d0 df 14 c3 +r17:16 = vlslw(r21:20, r31) + +# Vector shift words with truncate and pack +# CHECK: 51 df d4 88 +r17 = vasrw(r21:20, #31) +# CHECK: 51 df 14 c5 +r17 = vasrw(r21:20, r31) |

