diff options
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/SystemZ/loop-02.ll | 38 | ||||
-rw-r--r-- | llvm/test/MC/Disassembler/SystemZ/insns-pcrel.txt | 75 | ||||
-rw-r--r-- | llvm/test/MC/Disassembler/SystemZ/insns.txt | 213 | ||||
-rw-r--r-- | llvm/test/MC/SystemZ/insn-bad-z196.s | 14 | ||||
-rw-r--r-- | llvm/test/MC/SystemZ/insn-bad.s | 87 | ||||
-rw-r--r-- | llvm/test/MC/SystemZ/insn-good-z196.s | 37 | ||||
-rw-r--r-- | llvm/test/MC/SystemZ/insn-good.s | 244 |
7 files changed, 707 insertions, 1 deletions
diff --git a/llvm/test/CodeGen/SystemZ/loop-02.ll b/llvm/test/CodeGen/SystemZ/loop-02.ll new file mode 100644 index 00000000000..a3c1cf65ae2 --- /dev/null +++ b/llvm/test/CodeGen/SystemZ/loop-02.ll @@ -0,0 +1,38 @@ +; Test BRCTH. + +; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu -mcpu=z196 \ +; RUN: -no-integrated-as | FileCheck %s + +; Test a loop that should be converted into dbr form and then use BRCTH. +define void @f2(i32 *%src, i32 *%dest) { +; CHECK-LABEL: f2: +; CHECK: blah [[REG:%r[0-5]]] +; CHECK: [[LABEL:\.[^:]*]]:{{.*}} %loop +; CHECK: brcth [[REG]], [[LABEL]] +; CHECK: br %r14 +entry: + ; Force upper bound into a high register in order to encourage the + ; register allocator to use a high register for the count variable. + %top = call i32 asm sideeffect "blah $0", "=h"() + br label %loop + +loop: + %count = phi i32 [ 0, %entry ], [ %next, %loop.next ] + %next = add i32 %count, 1 + %val = load volatile i32 , i32 *%src + %cmp = icmp eq i32 %val, 0 + br i1 %cmp, label %loop.next, label %loop.store + +loop.store: + %add = add i32 %val, 1 + store volatile i32 %add, i32 *%dest + br label %loop.next + +loop.next: + %cont = icmp ne i32 %next, %top + br i1 %cont, label %loop, label %exit + +exit: + ret void +} + diff --git a/llvm/test/MC/Disassembler/SystemZ/insns-pcrel.txt b/llvm/test/MC/Disassembler/SystemZ/insns-pcrel.txt index d6ef5ac1698..8c6149e193c 100644 --- a/llvm/test/MC/Disassembler/SystemZ/insns-pcrel.txt +++ b/llvm/test/MC/Disassembler/SystemZ/insns-pcrel.txt @@ -1,7 +1,7 @@ # Test instructions that have PC-relative operands. There is no attempt # to keep the instructions in alphabetical order, since adding new instructions # in the middle would mean updating all later offsets. -# RUN: llvm-mc --disassemble %s -triple=s390x-linux-gnu | FileCheck %s +# RUN: llvm-mc --disassemble %s -triple=s390x-linux-gnu -mcpu=zEC12 | FileCheck %s # 0x00000000: # CHECK: brasl %r0, 0x0 @@ -1810,3 +1810,76 @@ # 0x00000a34: # CHECK: brxle %r15, %r1, 0x10a32 0x85 0xf1 0x7f 0xff + +# 0x00000a38: +# CHECK: brxhg %r0, %r1, 0xa38 +0xec 0x01 0x00 0x00 0x00 0x44 + +# 0x00000a3e: +# CHECK: brxhg %r14, %r1, 0xa3e +0xec 0xe1 0x00 0x00 0x00 0x44 + +# 0x00000a44: +# CHECK: brxhg %r15, %r1, 0xa44 +0xec 0xf1 0x00 0x00 0x00 0x44 + +# 0x00000a4a: +# CHECK: brxhg %r0, %r1, 0xa48 +0xec 0x01 0xff 0xff 0x00 0x44 + +# 0x00000a50: +# CHECK: brxhg %r14, %r1, 0xffffffffffff0a50 +0xec 0xe1 0x80 0x00 0x00 0x44 + +# 0x00000a56: +# CHECK: brxhg %r15, %r1, 0x10a54 +0xec 0xf1 0x7f 0xff 0x00 0x44 + +# 0x00000a5c: +# CHECK: brxlg %r0, %r1, 0xa5c +0xec 0x01 0x00 0x00 0x00 0x45 + +# 0x00000a62: +# CHECK: brxlg %r14, %r1, 0xa62 +0xec 0xe1 0x00 0x00 0x00 0x45 + +# 0x00000a68: +# CHECK: brxlg %r15, %r1, 0xa68 +0xec 0xf1 0x00 0x00 0x00 0x45 + +# 0x00000a6e: +# CHECK: brxlg %r0, %r1, 0xa6c +0xec 0x01 0xff 0xff 0x00 0x45 + +# 0x00000a74: +# CHECK: brxlg %r14, %r1, 0xffffffffffff0a74 +0xec 0xe1 0x80 0x00 0x00 0x45 + +# 0x00000a7a: +# CHECK: brxlg %r15, %r1, 0x10a78 +0xec 0xf1 0x7f 0xff 0x00 0x45 + +# 0x00000a80: +# CHECK: brcth %r0, 0xa80 +0xcc 0x06 0x00 0x00 0x00 0x00 + +# 0x00000a86: +# CHECK: brcth %r14, 0xa86 +0xcc 0xe6 0x00 0x00 0x00 0x00 + +# 0x00000a8c: +# CHECK: brcth %r15, 0xa8c +0xcc 0xf6 0x00 0x00 0x00 0x00 + +# 0x00000a92: +# CHECK: brcth %r0, 0xa90 +0xcc 0x06 0xff 0xff 0xff 0xff + +# 0x00000a98: +# CHECK: brcth %r14, 0xffffffff00000a98 +0xcc 0xe6 0x80 0x00 0x00 0x00 + +# 0x00000a9e: +# CHECK: brcth %r15, 0x100000a9c +0xcc 0xf6 0x7f 0xff 0xff 0xff + diff --git a/llvm/test/MC/Disassembler/SystemZ/insns.txt b/llvm/test/MC/Disassembler/SystemZ/insns.txt index ccbfc5f1c53..1c521a512b6 100644 --- a/llvm/test/MC/Disassembler/SystemZ/insns.txt +++ b/llvm/test/MC/Disassembler/SystemZ/insns.txt @@ -994,6 +994,219 @@ # CHECK: br %r15 0x07 0xff +# CHECK: bct %r0, 0 +0x46 0x00 0x00 0x00 + +# CHECK: bct %r0, 4095 +0x46 0x00 0x0f 0xff + +# CHECK: bct %r0, 0(%r1) +0x46 0x00 0x10 0x00 + +# CHECK: bct %r0, 0(%r15) +0x46 0x00 0xf0 0x00 + +# CHECK: bct %r0, 4095(%r1,%r15) +0x46 0x01 0xff 0xff + +# CHECK: bct %r0, 4095(%r15,%r1) +0x46 0x0f 0x1f 0xff + +# CHECK: bct %r15, 0 +0x46 0xf0 0x00 0x00 + +# CHECK: bctr %r0, %r9 +0x06 0x09 + +# CHECK: bctr %r0, %r15 +0x06 0x0f + +# CHECK: bctr %r15, %r0 +0x06 0xf0 + +# CHECK: bctr %r15, %r9 +0x06 0xf9 + +# CHECK: bctg %r0, -524288 +0xe3 0x00 0x00 0x00 0x80 0x46 + +# CHECK: bctg %r0, -1 +0xe3 0x00 0x0f 0xff 0xff 0x46 + +# CHECK: bctg %r0, 0 +0xe3 0x00 0x00 0x00 0x00 0x46 + +# CHECK: bctg %r0, 1 +0xe3 0x00 0x00 0x01 0x00 0x46 + +# CHECK: bctg %r0, 524287 +0xe3 0x00 0x0f 0xff 0x7f 0x46 + +# CHECK: bctg %r0, 0(%r1) +0xe3 0x00 0x10 0x00 0x00 0x46 + +# CHECK: bctg %r0, 0(%r15) +0xe3 0x00 0xf0 0x00 0x00 0x46 + +# CHECK: bctg %r0, 524287(%r1,%r15) +0xe3 0x01 0xff 0xff 0x7f 0x46 + +# CHECK: bctg %r0, 524287(%r15,%r1) +0xe3 0x0f 0x1f 0xff 0x7f 0x46 + +# CHECK: bctg %r15, 0 +0xe3 0xf0 0x00 0x00 0x00 0x46 + +# CHECK: bctgr %r0, %r9 +0xb9 0x46 0x00 0x09 + +# CHECK: bctgr %r0, %r15 +0xb9 0x46 0x00 0x0f + +# CHECK: bctgr %r15, %r0 +0xb9 0x46 0x00 0xf0 + +# CHECK: bctgr %r15, %r9 +0xb9 0x46 0x00 0xf9 + +# CHECK: bxh %r0, %r0, 0 +0x86 0x00 0x00 0x00 + +# CHECK: bxh %r0, %r15, 0 +0x86 0x0f 0x00 0x00 + +# CHECK: bxh %r14, %r15, 0 +0x86 0xef 0x00 0x00 + +# CHECK: bxh %r15, %r15, 0 +0x86 0xff 0x00 0x00 + +# CHECK: bxh %r0, %r0, 4095 +0x86 0x00 0x0f 0xff + +# CHECK: bxh %r0, %r0, 1 +0x86 0x00 0x00 0x01 + +# CHECK: bxh %r0, %r0, 0(%r1) +0x86 0x00 0x10 0x00 + +# CHECK: bxh %r0, %r0, 0(%r15) +0x86 0x00 0xf0 0x00 + +# CHECK: bxh %r0, %r0, 4095(%r1) +0x86 0x00 0x1f 0xff + +# CHECK: bxh %r0, %r0, 4095(%r15) +0x86 0x00 0xff 0xff + +# CHECK: bxhg %r0, %r0, 0 +0xeb 0x00 0x00 0x00 0x00 0x44 + +# CHECK: bxhg %r0, %r15, 0 +0xeb 0x0f 0x00 0x00 0x00 0x44 + +# CHECK: bxhg %r14, %r15, 0 +0xeb 0xef 0x00 0x00 0x00 0x44 + +# CHECK: bxhg %r15, %r15, 0 +0xeb 0xff 0x00 0x00 0x00 0x44 + +# CHECK: bxhg %r0, %r0, -524288 +0xeb 0x00 0x00 0x00 0x80 0x44 + +# CHECK: bxhg %r0, %r0, -1 +0xeb 0x00 0x0f 0xff 0xff 0x44 + +# CHECK: bxhg %r0, %r0, 0 +0xeb 0x00 0x00 0x00 0x00 0x44 + +# CHECK: bxhg %r0, %r0, 1 +0xeb 0x00 0x00 0x01 0x00 0x44 + +# CHECK: bxhg %r0, %r0, 524287 +0xeb 0x00 0x0f 0xff 0x7f 0x44 + +# CHECK: bxhg %r0, %r0, 0(%r1) +0xeb 0x00 0x10 0x00 0x00 0x44 + +# CHECK: bxhg %r0, %r0, 0(%r15) +0xeb 0x00 0xf0 0x00 0x00 0x44 + +# CHECK: bxhg %r0, %r0, 524287(%r1) +0xeb 0x00 0x1f 0xff 0x7f 0x44 + +# CHECK: bxhg %r0, %r0, 524287(%r15) +0xeb 0x00 0xff 0xff 0x7f 0x44 + +# CHECK: bxle %r0, %r0, 0 +0x87 0x00 0x00 0x00 + +# CHECK: bxle %r0, %r15, 0 +0x87 0x0f 0x00 0x00 + +# CHECK: bxle %r14, %r15, 0 +0x87 0xef 0x00 0x00 + +# CHECK: bxle %r15, %r15, 0 +0x87 0xff 0x00 0x00 + +# CHECK: bxle %r0, %r0, 4095 +0x87 0x00 0x0f 0xff + +# CHECK: bxle %r0, %r0, 1 +0x87 0x00 0x00 0x01 + +# CHECK: bxle %r0, %r0, 0(%r1) +0x87 0x00 0x10 0x00 + +# CHECK: bxle %r0, %r0, 0(%r15) +0x87 0x00 0xf0 0x00 + +# CHECK: bxle %r0, %r0, 4095(%r1) +0x87 0x00 0x1f 0xff + +# CHECK: bxle %r0, %r0, 4095(%r15) +0x87 0x00 0xff 0xff + +# CHECK: bxleg %r0, %r0, 0 +0xeb 0x00 0x00 0x00 0x00 0x45 + +# CHECK: bxleg %r0, %r15, 0 +0xeb 0x0f 0x00 0x00 0x00 0x45 + +# CHECK: bxleg %r14, %r15, 0 +0xeb 0xef 0x00 0x00 0x00 0x45 + +# CHECK: bxleg %r15, %r15, 0 +0xeb 0xff 0x00 0x00 0x00 0x45 + +# CHECK: bxleg %r0, %r0, -524288 +0xeb 0x00 0x00 0x00 0x80 0x45 + +# CHECK: bxleg %r0, %r0, -1 +0xeb 0x00 0x0f 0xff 0xff 0x45 + +# CHECK: bxleg %r0, %r0, 0 +0xeb 0x00 0x00 0x00 0x00 0x45 + +# CHECK: bxleg %r0, %r0, 1 +0xeb 0x00 0x00 0x01 0x00 0x45 + +# CHECK: bxleg %r0, %r0, 524287 +0xeb 0x00 0x0f 0xff 0x7f 0x45 + +# CHECK: bxleg %r0, %r0, 0(%r1) +0xeb 0x00 0x10 0x00 0x00 0x45 + +# CHECK: bxleg %r0, %r0, 0(%r15) +0xeb 0x00 0xf0 0x00 0x00 0x45 + +# CHECK: bxleg %r0, %r0, 524287(%r1) +0xeb 0x00 0x1f 0xff 0x7f 0x45 + +# CHECK: bxleg %r0, %r0, 524287(%r15) +0xeb 0x00 0xff 0xff 0x7f 0x45 + # CHECK: cdbr %f0, %f0 0xb3 0x19 0x00 0x00 diff --git a/llvm/test/MC/SystemZ/insn-bad-z196.s b/llvm/test/MC/SystemZ/insn-bad-z196.s index b2c37e172a8..f2771d2d690 100644 --- a/llvm/test/MC/SystemZ/insn-bad-z196.s +++ b/llvm/test/MC/SystemZ/insn-bad-z196.s @@ -34,6 +34,20 @@ aih %r0, (-1 << 31) - 1 aih %r0, (1 << 31) +#CHECK: error: offset out of range +#CHECK: brcth %r0, -0x1000000002 +#CHECK: error: offset out of range +#CHECK: brcth %r0, -1 +#CHECK: error: offset out of range +#CHECK: brcth %r0, 1 +#CHECK: error: offset out of range +#CHECK: brcth %r0, 0x100000000 + + brcth %r0, -0x1000000002 + brcth %r0, -1 + brcth %r0, 1 + brcth %r0, 0x100000000 + #CHECK: error: invalid operand #CHECK: cdfbra %f0, 0, %r0, -1 #CHECK: error: invalid operand diff --git a/llvm/test/MC/SystemZ/insn-bad.s b/llvm/test/MC/SystemZ/insn-bad.s index 5a2e63a5e85..b2e31bd1a13 100644 --- a/llvm/test/MC/SystemZ/insn-bad.s +++ b/llvm/test/MC/SystemZ/insn-bad.s @@ -374,6 +374,22 @@ brcl -1, bar brcl 16, bar +#CHECK: error: invalid operand +#CHECK: bct %r0, -1 +#CHECK: error: invalid operand +#CHECK: bct %r0, 4096 + + bct %r0, -1 + bct %r0, 4096 + +#CHECK: error: invalid operand +#CHECK: bctg %r0, -524289 +#CHECK: error: invalid operand +#CHECK: bctg %r0, 524288 + + bctg %r0, -524289 + bctg %r0, 524288 + #CHECK: error: offset out of range #CHECK: brct %r0, -0x100002 #CHECK: error: offset out of range @@ -402,6 +418,30 @@ brctg %r0, 1 brctg %r0, 0x10000 +#CHECK: error: instruction requires: high-word +#CHECK: brcth %r0, 0 + + brcth %r0, 0 + +#CHECK: error: invalid operand +#CHECK: bxh %r0, %r0, 4096 +#CHECK: error: invalid use of indexed addressing +#CHECK: bxh %r0, %r0, 0(%r1,%r2) + + bxh %r0, %r0, 4096 + bxh %r0, %r0, 0(%r1,%r2) + +#CHECK: error: invalid operand +#CHECK: bxhg %r0, %r0, -524289 +#CHECK: error: invalid operand +#CHECK: bxhg %r0, %r0, 524288 +#CHECK: error: invalid use of indexed addressing +#CHECK: bxhg %r0, %r0, 0(%r1,%r2) + + bxhg %r0, %r0, -524289 + bxhg %r0, %r0, 524288 + bxhg %r0, %r0, 0(%r1,%r2) + #CHECK: error: offset out of range #CHECK: brxh %r0, %r2, -0x100002 #CHECK: error: offset out of range @@ -417,6 +457,39 @@ brxh %r0, %r2, 0x10000 #CHECK: error: offset out of range +#CHECK: brxhg %r0, %r2, -0x100002 +#CHECK: error: offset out of range +#CHECK: brxhg %r0, %r2, -1 +#CHECK: error: offset out of range +#CHECK: brxhg %r0, %r2, 1 +#CHECK: error: offset out of range +#CHECK: brxhg %r0, %r2, 0x10000 + + brxhg %r0, %r2, -0x100002 + brxhg %r0, %r2, -1 + brxhg %r0, %r2, 1 + brxhg %r0, %r2, 0x10000 + +#CHECK: error: invalid operand +#CHECK: bxle %r0, %r0, 4096 +#CHECK: error: invalid use of indexed addressing +#CHECK: bxle %r0, %r0, 0(%r1,%r2) + + bxle %r0, %r0, 4096 + bxle %r0, %r0, 0(%r1,%r2) + +#CHECK: error: invalid operand +#CHECK: bxhg %r0, %r0, -524289 +#CHECK: error: invalid operand +#CHECK: bxhg %r0, %r0, 524288 +#CHECK: error: invalid use of indexed addressing +#CHECK: bxhg %r0, %r0, 0(%r1,%r2) + + bxhg %r0, %r0, -524289 + bxhg %r0, %r0, 524288 + bxhg %r0, %r0, 0(%r1,%r2) + +#CHECK: error: offset out of range #CHECK: brxle %r0, %r2, -0x100002 #CHECK: error: offset out of range #CHECK: brxle %r0, %r2, -1 @@ -430,6 +503,20 @@ brxle %r0, %r2, 1 brxle %r0, %r2, 0x10000 +#CHECK: error: offset out of range +#CHECK: brxlg %r0, %r2, -0x100002 +#CHECK: error: offset out of range +#CHECK: brxlg %r0, %r2, -1 +#CHECK: error: offset out of range +#CHECK: brxlg %r0, %r2, 1 +#CHECK: error: offset out of range +#CHECK: brxlg %r0, %r2, 0x10000 + + brxlg %r0, %r2, -0x100002 + brxlg %r0, %r2, -1 + brxlg %r0, %r2, 1 + brxlg %r0, %r2, 0x10000 + #CHECK: error: invalid operand #CHECK: c %r0, -1 #CHECK: error: invalid operand diff --git a/llvm/test/MC/SystemZ/insn-good-z196.s b/llvm/test/MC/SystemZ/insn-good-z196.s index 5ac80156ecf..318ac2b5b2a 100644 --- a/llvm/test/MC/SystemZ/insn-good-z196.s +++ b/llvm/test/MC/SystemZ/insn-good-z196.s @@ -164,6 +164,43 @@ cdgbra %f4, 5, %r6, 7 cdgbra %f15, 0, %r0, 0 +#CHECK: brcth %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xcc,0x06,A,A,A,A] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL + brcth %r0, -0x100000000 +#CHECK: brcth %r0, .[[LAB:L.*]]-2 # encoding: [0xcc,0x06,A,A,A,A] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL + brcth %r0, -2 +#CHECK: brcth %r0, .[[LAB:L.*]] # encoding: [0xcc,0x06,A,A,A,A] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL + brcth %r0, 0 +#CHECK: brcth %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xcc,0x06,A,A,A,A] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL + brcth %r0, 0xfffffffe + +#CHECK: brcth %r0, foo # encoding: [0xcc,0x06,A,A,A,A] +# fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL +#CHECK: brcth %r15, foo # encoding: [0xcc,0xf6,A,A,A,A] +# fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL + + brcth %r0,foo + brcth %r15,foo + +#CHECK: brcth %r3, bar+100 # encoding: [0xcc,0x36,A,A,A,A] +# fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC32DBL +#CHECK: brcth %r4, bar+100 # encoding: [0xcc,0x46,A,A,A,A] +# fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC32DBL + + brcth %r3,bar+100 + brcth %r4,bar+100 + +#CHECK: brcth %r7, frob@PLT # encoding: [0xcc,0x76,A,A,A,A] +# fixup A - offset: 2, value: frob@PLT+2, kind: FK_390_PC32DBL +#CHECK: brcth %r8, frob@PLT # encoding: [0xcc,0x86,A,A,A,A] +# fixup A - offset: 2, value: frob@PLT+2, kind: FK_390_PC32DBL + + brcth %r7,frob@PLT + brcth %r8,frob@PLT + #CHECK: cdlfbr %f0, 0, %r0, 0 # encoding: [0xb3,0x91,0x00,0x00] #CHECK: cdlfbr %f0, 0, %r0, 15 # encoding: [0xb3,0x91,0x0f,0x00] #CHECK: cdlfbr %f0, 0, %r15, 0 # encoding: [0xb3,0x91,0x00,0x0f] diff --git a/llvm/test/MC/SystemZ/insn-good.s b/llvm/test/MC/SystemZ/insn-good.s index 39274b44bec..5e8a93c012a 100644 --- a/llvm/test/MC/SystemZ/insn-good.s +++ b/llvm/test/MC/SystemZ/insn-good.s @@ -1421,6 +1421,64 @@ #CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC32DBL jg bar@PLT +#CHECK: bct %r0, 0 # encoding: [0x46,0x00,0x00,0x00] +#CHECK: bct %r0, 4095 # encoding: [0x46,0x00,0x0f,0xff] +#CHECK: bct %r0, 0(%r1) # encoding: [0x46,0x00,0x10,0x00] +#CHECK: bct %r0, 0(%r15) # encoding: [0x46,0x00,0xf0,0x00] +#CHECK: bct %r0, 4095(%r1,%r15) # encoding: [0x46,0x01,0xff,0xff] +#CHECK: bct %r0, 4095(%r15,%r1) # encoding: [0x46,0x0f,0x1f,0xff] +#CHECK: bct %r15, 0 # encoding: [0x46,0xf0,0x00,0x00] + + bct %r0, 0 + bct %r0, 4095 + bct %r0, 0(%r1) + bct %r0, 0(%r15) + bct %r0, 4095(%r1,%r15) + bct %r0, 4095(%r15,%r1) + bct %r15, 0 + +#CHECK: bctr %r0, %r9 # encoding: [0x06,0x09] +#CHECK: bctr %r0, %r15 # encoding: [0x06,0x0f] +#CHECK: bctr %r15, %r0 # encoding: [0x06,0xf0] +#CHECK: bctr %r15, %r9 # encoding: [0x06,0xf9] + + bctr %r0,%r9 + bctr %r0,%r15 + bctr %r15,%r0 + bctr %r15,%r9 + +#CHECK: bctg %r0, -524288 # encoding: [0xe3,0x00,0x00,0x00,0x80,0x46] +#CHECK: bctg %r0, -1 # encoding: [0xe3,0x00,0x0f,0xff,0xff,0x46] +#CHECK: bctg %r0, 0 # encoding: [0xe3,0x00,0x00,0x00,0x00,0x46] +#CHECK: bctg %r0, 1 # encoding: [0xe3,0x00,0x00,0x01,0x00,0x46] +#CHECK: bctg %r0, 524287 # encoding: [0xe3,0x00,0x0f,0xff,0x7f,0x46] +#CHECK: bctg %r0, 0(%r1) # encoding: [0xe3,0x00,0x10,0x00,0x00,0x46] +#CHECK: bctg %r0, 0(%r15) # encoding: [0xe3,0x00,0xf0,0x00,0x00,0x46] +#CHECK: bctg %r0, 524287(%r1,%r15) # encoding: [0xe3,0x01,0xff,0xff,0x7f,0x46] +#CHECK: bctg %r0, 524287(%r15,%r1) # encoding: [0xe3,0x0f,0x1f,0xff,0x7f,0x46] +#CHECK: bctg %r15, 0 # encoding: [0xe3,0xf0,0x00,0x00,0x00,0x46] + + bctg %r0, -524288 + bctg %r0, -1 + bctg %r0, 0 + bctg %r0, 1 + bctg %r0, 524287 + bctg %r0, 0(%r1) + bctg %r0, 0(%r15) + bctg %r0, 524287(%r1,%r15) + bctg %r0, 524287(%r15,%r1) + bctg %r15, 0 + +#CHECK: bctgr %r0, %r9 # encoding: [0xb9,0x46,0x00,0x09] +#CHECK: bctgr %r0, %r15 # encoding: [0xb9,0x46,0x00,0x0f] +#CHECK: bctgr %r15, %r0 # encoding: [0xb9,0x46,0x00,0xf0] +#CHECK: bctgr %r15, %r9 # encoding: [0xb9,0x46,0x00,0xf9] + + bctgr %r0,%r9 + bctgr %r0,%r15 + bctgr %r15,%r0 + bctgr %r15,%r9 + #CHECK: brct %r0, .[[LAB:L.*]]-65536 # encoding: [0xa7,0x06,A,A] #CHECK: fixup A - offset: 2, value: (.[[LAB]]-65536)+2, kind: FK_390_PC16DBL brct %r0, -0x10000 @@ -1453,6 +1511,56 @@ #CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL brctg %r15, 0 +#CHECK: bxh %r0, %r0, 0 # encoding: [0x86,0x00,0x00,0x00] +#CHECK: bxh %r0, %r15, 0 # encoding: [0x86,0x0f,0x00,0x00] +#CHECK: bxh %r14, %r15, 0 # encoding: [0x86,0xef,0x00,0x00] +#CHECK: bxh %r15, %r15, 0 # encoding: [0x86,0xff,0x00,0x00] +#CHECK: bxh %r0, %r0, 4095 # encoding: [0x86,0x00,0x0f,0xff] +#CHECK: bxh %r0, %r0, 1 # encoding: [0x86,0x00,0x00,0x01] +#CHECK: bxh %r0, %r0, 0(%r1) # encoding: [0x86,0x00,0x10,0x00] +#CHECK: bxh %r0, %r0, 0(%r15) # encoding: [0x86,0x00,0xf0,0x00] +#CHECK: bxh %r0, %r0, 4095(%r1) # encoding: [0x86,0x00,0x1f,0xff] +#CHECK: bxh %r0, %r0, 4095(%r15) # encoding: [0x86,0x00,0xff,0xff] + + bxh %r0,%r0,0 + bxh %r0,%r15,0 + bxh %r14,%r15,0 + bxh %r15,%r15,0 + bxh %r0,%r0,4095 + bxh %r0,%r0,1 + bxh %r0,%r0,0(%r1) + bxh %r0,%r0,0(%r15) + bxh %r0,%r0,4095(%r1) + bxh %r0,%r0,4095(%r15) + +#CHECK: bxhg %r0, %r0, 0 # encoding: [0xeb,0x00,0x00,0x00,0x00,0x44] +#CHECK: bxhg %r0, %r15, 0 # encoding: [0xeb,0x0f,0x00,0x00,0x00,0x44] +#CHECK: bxhg %r14, %r15, 0 # encoding: [0xeb,0xef,0x00,0x00,0x00,0x44] +#CHECK: bxhg %r15, %r15, 0 # encoding: [0xeb,0xff,0x00,0x00,0x00,0x44] +#CHECK: bxhg %r0, %r0, -524288 # encoding: [0xeb,0x00,0x00,0x00,0x80,0x44] +#CHECK: bxhg %r0, %r0, -1 # encoding: [0xeb,0x00,0x0f,0xff,0xff,0x44] +#CHECK: bxhg %r0, %r0, 0 # encoding: [0xeb,0x00,0x00,0x00,0x00,0x44] +#CHECK: bxhg %r0, %r0, 1 # encoding: [0xeb,0x00,0x00,0x01,0x00,0x44] +#CHECK: bxhg %r0, %r0, 524287 # encoding: [0xeb,0x00,0x0f,0xff,0x7f,0x44] +#CHECK: bxhg %r0, %r0, 0(%r1) # encoding: [0xeb,0x00,0x10,0x00,0x00,0x44] +#CHECK: bxhg %r0, %r0, 0(%r15) # encoding: [0xeb,0x00,0xf0,0x00,0x00,0x44] +#CHECK: bxhg %r0, %r0, 524287(%r1) # encoding: [0xeb,0x00,0x1f,0xff,0x7f,0x44] +#CHECK: bxhg %r0, %r0, 524287(%r15) # encoding: [0xeb,0x00,0xff,0xff,0x7f,0x44] + + bxhg %r0,%r0,0 + bxhg %r0,%r15,0 + bxhg %r14,%r15,0 + bxhg %r15,%r15,0 + bxhg %r0,%r0,-524288 + bxhg %r0,%r0,-1 + bxhg %r0,%r0,0 + bxhg %r0,%r0,1 + bxhg %r0,%r0,524287 + bxhg %r0,%r0,0(%r1) + bxhg %r0,%r0,0(%r15) + bxhg %r0,%r0,524287(%r1) + bxhg %r0,%r0,524287(%r15) + #CHECK: brxh %r0, %r2, .[[LAB:L.*]]-65536 # encoding: [0x84,0x02,A,A] #CHECK: fixup A - offset: 2, value: (.[[LAB]]-65536)+2, kind: FK_390_PC16DBL brxh %r0,%r2, -0x10000 @@ -1496,6 +1604,99 @@ brxh %r14,%r2,bar@PLT brxh %r15,%r2,bar@PLT +#CHECK: brxhg %r0, %r2, .[[LAB:L.*]]-65536 # encoding: [0xec,0x02,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]-65536)+2, kind: FK_390_PC16DBL + brxhg %r0,%r2, -0x10000 +#CHECK: brxhg %r0, %r2, .[[LAB:L.*]]-2 # encoding: [0xec,0x02,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC16DBL + brxhg %r0, %r2, -2 +#CHECK: brxhg %r0, %r2, .[[LAB:L.*]] # encoding: [0xec,0x02,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL + brxhg %r0,%r2, 0 +#CHECK: brxhg %r0, %r2, .[[LAB:L.*]]+65534 # encoding: [0xec,0x02,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]+65534)+2, kind: FK_390_PC16DBL + brxhg %r0,%r2, 0xfffe + +#CHECK: brxhg %r0, %r2, foo # encoding: [0xec,0x02,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: brxhg %r14, %r2, foo # encoding: [0xec,0xe2,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: brxhg %r15, %r2, foo # encoding: [0xec,0xf2,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + brxhg %r0,%r2,foo + brxhg %r14,%r2,foo + brxhg %r15,%r2,foo + +#CHECK: brxhg %r0, %r2, bar+100 # encoding: [0xec,0x02,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL +#CHECK: brxhg %r14, %r2, bar+100 # encoding: [0xec,0xe2,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL +#CHECK: brxhg %r15, %r2, bar+100 # encoding: [0xec,0xf2,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + brxhg %r0,%r2,bar+100 + brxhg %r14,%r2,bar+100 + brxhg %r15,%r2,bar+100 + +#CHECK: brxhg %r0, %r2, bar@PLT # encoding: [0xec,0x02,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL +#CHECK: brxhg %r14, %r2, bar@PLT # encoding: [0xec,0xe2,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL +#CHECK: brxhg %r15, %r2, bar@PLT # encoding: [0xec,0xf2,A,A,0x00,0x44] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + brxhg %r0,%r2,bar@PLT + brxhg %r14,%r2,bar@PLT + brxhg %r15,%r2,bar@PLT + +#CHECK: bxle %r0, %r0, 0 # encoding: [0x87,0x00,0x00,0x00] +#CHECK: bxle %r0, %r15, 0 # encoding: [0x87,0x0f,0x00,0x00] +#CHECK: bxle %r14, %r15, 0 # encoding: [0x87,0xef,0x00,0x00] +#CHECK: bxle %r15, %r15, 0 # encoding: [0x87,0xff,0x00,0x00] +#CHECK: bxle %r0, %r0, 4095 # encoding: [0x87,0x00,0x0f,0xff] +#CHECK: bxle %r0, %r0, 1 # encoding: [0x87,0x00,0x00,0x01] +#CHECK: bxle %r0, %r0, 0(%r1) # encoding: [0x87,0x00,0x10,0x00] +#CHECK: bxle %r0, %r0, 0(%r15) # encoding: [0x87,0x00,0xf0,0x00] +#CHECK: bxle %r0, %r0, 4095(%r1) # encoding: [0x87,0x00,0x1f,0xff] +#CHECK: bxle %r0, %r0, 4095(%r15) # encoding: [0x87,0x00,0xff,0xff] + + bxle %r0,%r0,0 + bxle %r0,%r15,0 + bxle %r14,%r15,0 + bxle %r15,%r15,0 + bxle %r0,%r0,4095 + bxle %r0,%r0,1 + bxle %r0,%r0,0(%r1) + bxle %r0,%r0,0(%r15) + bxle %r0,%r0,4095(%r1) + bxle %r0,%r0,4095(%r15) + +#CHECK: bxleg %r0, %r0, 0 # encoding: [0xeb,0x00,0x00,0x00,0x00,0x45] +#CHECK: bxleg %r0, %r15, 0 # encoding: [0xeb,0x0f,0x00,0x00,0x00,0x45] +#CHECK: bxleg %r14, %r15, 0 # encoding: [0xeb,0xef,0x00,0x00,0x00,0x45] +#CHECK: bxleg %r15, %r15, 0 # encoding: [0xeb,0xff,0x00,0x00,0x00,0x45] +#CHECK: bxleg %r0, %r0, -524288 # encoding: [0xeb,0x00,0x00,0x00,0x80,0x45] +#CHECK: bxleg %r0, %r0, -1 # encoding: [0xeb,0x00,0x0f,0xff,0xff,0x45] +#CHECK: bxleg %r0, %r0, 0 # encoding: [0xeb,0x00,0x00,0x00,0x00,0x45] +#CHECK: bxleg %r0, %r0, 1 # encoding: [0xeb,0x00,0x00,0x01,0x00,0x45] +#CHECK: bxleg %r0, %r0, 524287 # encoding: [0xeb,0x00,0x0f,0xff,0x7f,0x45] +#CHECK: bxleg %r0, %r0, 0(%r1) # encoding: [0xeb,0x00,0x10,0x00,0x00,0x45] +#CHECK: bxleg %r0, %r0, 0(%r15) # encoding: [0xeb,0x00,0xf0,0x00,0x00,0x45] +#CHECK: bxleg %r0, %r0, 524287(%r1) # encoding: [0xeb,0x00,0x1f,0xff,0x7f,0x45] +#CHECK: bxleg %r0, %r0, 524287(%r15) # encoding: [0xeb,0x00,0xff,0xff,0x7f,0x45] + + bxleg %r0,%r0,0 + bxleg %r0,%r15,0 + bxleg %r14,%r15,0 + bxleg %r15,%r15,0 + bxleg %r0,%r0,-524288 + bxleg %r0,%r0,-1 + bxleg %r0,%r0,0 + bxleg %r0,%r0,1 + bxleg %r0,%r0,524287 + bxleg %r0,%r0,0(%r1) + bxleg %r0,%r0,0(%r15) + bxleg %r0,%r0,524287(%r1) + bxleg %r0,%r0,524287(%r15) + #CHECK: brxle %r0, %r2, .[[LAB:L.*]]-65536 # encoding: [0x85,0x02,A,A] #CHECK: fixup A - offset: 2, value: (.[[LAB]]-65536)+2, kind: FK_390_PC16DBL brxle %r0,%r2, -0x10000 @@ -1539,6 +1740,49 @@ brxle %r14,%r2,bar@PLT brxle %r15,%r2,bar@PLT +#CHECK: brxlg %r0, %r2, .[[LAB:L.*]]-65536 # encoding: [0xec,0x02,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]-65536)+2, kind: FK_390_PC16DBL + brxlg %r0,%r2, -0x10000 +#CHECK: brxlg %r0, %r2, .[[LAB:L.*]]-2 # encoding: [0xec,0x02,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC16DBL + brxlg %r0, %r2, -2 +#CHECK: brxlg %r0, %r2, .[[LAB:L.*]] # encoding: [0xec,0x02,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL + brxlg %r0,%r2, 0 +#CHECK: brxlg %r0, %r2, .[[LAB:L.*]]+65534 # encoding: [0xec,0x02,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]+65534)+2, kind: FK_390_PC16DBL + brxlg %r0,%r2, 0xfffe + +#CHECK: brxlg %r0, %r2, foo # encoding: [0xec,0x02,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: brxlg %r14, %r2, foo # encoding: [0xec,0xe2,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: brxlg %r15, %r2, foo # encoding: [0xec,0xf2,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + brxlg %r0,%r2,foo + brxlg %r14,%r2,foo + brxlg %r15,%r2,foo + +#CHECK: brxlg %r0, %r2, bar+100 # encoding: [0xec,0x02,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL +#CHECK: brxlg %r14, %r2, bar+100 # encoding: [0xec,0xe2,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL +#CHECK: brxlg %r15, %r2, bar+100 # encoding: [0xec,0xf2,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + brxlg %r0,%r2,bar+100 + brxlg %r14,%r2,bar+100 + brxlg %r15,%r2,bar+100 + +#CHECK: brxlg %r0, %r2, bar@PLT # encoding: [0xec,0x02,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL +#CHECK: brxlg %r14, %r2, bar@PLT # encoding: [0xec,0xe2,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL +#CHECK: brxlg %r15, %r2, bar@PLT # encoding: [0xec,0xf2,A,A,0x00,0x45] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + brxlg %r0,%r2,bar@PLT + brxlg %r14,%r2,bar@PLT + brxlg %r15,%r2,bar@PLT + #CHECK: c %r0, 0 # encoding: [0x59,0x00,0x00,0x00] #CHECK: c %r0, 4095 # encoding: [0x59,0x00,0x0f,0xff] #CHECK: c %r0, 0(%r1) # encoding: [0x59,0x00,0x10,0x00] |