From 2d664abbfca8b9fa3d99e8a2f74bd52faf007f12 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 29 May 2013 11:58:52 +0000 Subject: [SystemZ] Immediate compare-and-branch support This patch adds support for the CIJ and CGIJ instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182846 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/SystemZ/int-cmp-09.ll | 91 ++++-- test/CodeGen/SystemZ/int-cmp-11.ll | 91 ++++-- test/CodeGen/SystemZ/int-cmp-13.ll | 96 ++++-- test/CodeGen/SystemZ/int-cmp-14.ll | 96 ++++-- test/MC/Disassembler/SystemZ/insns-pcrel.txt | 192 +++++++++++ test/MC/SystemZ/insn-bad.s | 60 ++++ test/MC/SystemZ/insn-good.s | 466 +++++++++++++++++++++++++++ 7 files changed, 992 insertions(+), 100 deletions(-) (limited to 'test') diff --git a/test/CodeGen/SystemZ/int-cmp-09.ll b/test/CodeGen/SystemZ/int-cmp-09.ll index 06ebee250b..8fb0e7c41a 100644 --- a/test/CodeGen/SystemZ/int-cmp-09.ll +++ b/test/CodeGen/SystemZ/int-cmp-09.ll @@ -5,8 +5,7 @@ ; Check comparisons with 0. define double @f1(double %a, double %b, i32 %i1) { ; CHECK: f1: -; CHECK: chi %r2, 0 -; CHECK-NEXT: jl +; CHECK: cijl %r2, 0 ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 %cond = icmp slt i32 %i1, 0 @@ -17,8 +16,7 @@ define double @f1(double %a, double %b, i32 %i1) { ; Check comparisons with 1. define double @f2(double %a, double %b, i32 %i1) { ; CHECK: f2: -; CHECK: chi %r2, 1 -; CHECK-NEXT: jl +; CHECK: cijl %r2, 1 ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 %cond = icmp slt i32 %i1, 1 @@ -26,9 +24,32 @@ define double @f2(double %a, double %b, i32 %i1) { ret double %res } -; Check the high end of the CHI range. +; Check the high end of the CIJ range. define double @f3(double %a, double %b, i32 %i1) { ; CHECK: f3: +; CHECK: cijl %r2, 127 +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp slt i32 %i1, 127 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the next value up, which must use CHI instead. +define double @f4(double %a, double %b, i32 %i1) { +; CHECK: f4: +; CHECK: chi %r2, 128 +; CHECK-NEXT: jl +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp slt i32 %i1, 128 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the high end of the CHI range. +define double @f5(double %a, double %b, i32 %i1) { +; CHECK: f5: ; CHECK: chi %r2, 32767 ; CHECK-NEXT: jl ; CHECK: ldr %f0, %f2 @@ -39,8 +60,8 @@ define double @f3(double %a, double %b, i32 %i1) { } ; Check the next value up, which must use CFI. -define double @f4(double %a, double %b, i32 %i1) { -; CHECK: f4: +define double @f6(double %a, double %b, i32 %i1) { +; CHECK: f6: ; CHECK: cfi %r2, 32768 ; CHECK-NEXT: jl ; CHECK: ldr %f0, %f2 @@ -51,8 +72,8 @@ define double @f4(double %a, double %b, i32 %i1) { } ; Check the high end of the signed 32-bit range. -define double @f5(double %a, double %b, i32 %i1) { -; CHECK: f5: +define double @f7(double %a, double %b, i32 %i1) { +; CHECK: f7: ; CHECK: cfi %r2, 2147483647 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 @@ -63,8 +84,8 @@ define double @f5(double %a, double %b, i32 %i1) { } ; Check the next value up, which should be treated as a negative value. -define double @f6(double %a, double %b, i32 %i1) { -; CHECK: f6: +define double @f8(double %a, double %b, i32 %i1) { +; CHECK: f8: ; CHECK: cfi %r2, -2147483648 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 @@ -74,11 +95,10 @@ define double @f6(double %a, double %b, i32 %i1) { ret double %res } -; Check the high end of the negative CHI range. -define double @f7(double %a, double %b, i32 %i1) { -; CHECK: f7: -; CHECK: chi %r2, -1 -; CHECK-NEXT: jl +; Check the high end of the negative CIJ range. +define double @f9(double %a, double %b, i32 %i1) { +; CHECK: f9: +; CHECK: cijl %r2, -1 ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 %cond = icmp slt i32 %i1, -1 @@ -86,9 +106,32 @@ define double @f7(double %a, double %b, i32 %i1) { ret double %res } +; Check the low end of the CIJ range. +define double @f10(double %a, double %b, i32 %i1) { +; CHECK: f10: +; CHECK: cijl %r2, -128 +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp slt i32 %i1, -128 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the next value down, which must use CHI instead. +define double @f11(double %a, double %b, i32 %i1) { +; CHECK: f11: +; CHECK: chi %r2, -129 +; CHECK-NEXT: jl +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp slt i32 %i1, -129 + %res = select i1 %cond, double %a, double %b + ret double %res +} + ; Check the low end of the CHI range. -define double @f8(double %a, double %b, i32 %i1) { -; CHECK: f8: +define double @f12(double %a, double %b, i32 %i1) { +; CHECK: f12: ; CHECK: chi %r2, -32768 ; CHECK-NEXT: jl ; CHECK: ldr %f0, %f2 @@ -99,8 +142,8 @@ define double @f8(double %a, double %b, i32 %i1) { } ; Check the next value down, which must use CFI instead. -define double @f9(double %a, double %b, i32 %i1) { -; CHECK: f9: +define double @f13(double %a, double %b, i32 %i1) { +; CHECK: f13: ; CHECK: cfi %r2, -32769 ; CHECK-NEXT: jl ; CHECK: ldr %f0, %f2 @@ -111,8 +154,8 @@ define double @f9(double %a, double %b, i32 %i1) { } ; Check the low end of the signed 32-bit range. -define double @f10(double %a, double %b, i32 %i1) { -; CHECK: f10: +define double @f14(double %a, double %b, i32 %i1) { +; CHECK: f14: ; CHECK: cfi %r2, -2147483648 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 @@ -123,8 +166,8 @@ define double @f10(double %a, double %b, i32 %i1) { } ; Check the next value down, which should be treated as a positive value. -define double @f11(double %a, double %b, i32 %i1) { -; CHECK: f11: +define double @f15(double %a, double %b, i32 %i1) { +; CHECK: f15: ; CHECK: cfi %r2, 2147483647 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 diff --git a/test/CodeGen/SystemZ/int-cmp-11.ll b/test/CodeGen/SystemZ/int-cmp-11.ll index 64386f05d1..a0f598e9d0 100644 --- a/test/CodeGen/SystemZ/int-cmp-11.ll +++ b/test/CodeGen/SystemZ/int-cmp-11.ll @@ -5,8 +5,7 @@ ; Check comparisons with 0. define double @f1(double %a, double %b, i64 %i1) { ; CHECK: f1: -; CHECK: cghi %r2, 0 -; CHECK-NEXT: jl +; CHECK: cgijl %r2, 0 ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 %cond = icmp slt i64 %i1, 0 @@ -17,8 +16,7 @@ define double @f1(double %a, double %b, i64 %i1) { ; Check comparisons with 1. define double @f2(double %a, double %b, i64 %i1) { ; CHECK: f2: -; CHECK: cghi %r2, 1 -; CHECK-NEXT: jl +; CHECK: cgijl %r2, 1 ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 %cond = icmp slt i64 %i1, 1 @@ -26,9 +24,32 @@ define double @f2(double %a, double %b, i64 %i1) { ret double %res } -; Check the high end of the CGHI range. +; Check the high end of the CGIJ range. define double @f3(double %a, double %b, i64 %i1) { ; CHECK: f3: +; CHECK: cgijl %r2, 127 +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp slt i64 %i1, 127 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the next value up, which must use CGHI instead. +define double @f4(double %a, double %b, i64 %i1) { +; CHECK: f4: +; CHECK: cghi %r2, 128 +; CHECK-NEXT: jl +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp slt i64 %i1, 128 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the high end of the CGHI range. +define double @f5(double %a, double %b, i64 %i1) { +; CHECK: f5: ; CHECK: cghi %r2, 32767 ; CHECK-NEXT: jl ; CHECK: ldr %f0, %f2 @@ -39,8 +60,8 @@ define double @f3(double %a, double %b, i64 %i1) { } ; Check the next value up, which must use CGFI. -define double @f4(double %a, double %b, i64 %i1) { -; CHECK: f4: +define double @f6(double %a, double %b, i64 %i1) { +; CHECK: f6: ; CHECK: cgfi %r2, 32768 ; CHECK-NEXT: jl ; CHECK: ldr %f0, %f2 @@ -51,8 +72,8 @@ define double @f4(double %a, double %b, i64 %i1) { } ; Check the high end of the CGFI range. -define double @f5(double %a, double %b, i64 %i1) { -; CHECK: f5: +define double @f7(double %a, double %b, i64 %i1) { +; CHECK: f7: ; CHECK: cgfi %r2, 2147483647 ; CHECK-NEXT: jl ; CHECK: ldr %f0, %f2 @@ -63,8 +84,8 @@ define double @f5(double %a, double %b, i64 %i1) { } ; Check the next value up, which must use register comparison. -define double @f6(double %a, double %b, i64 %i1) { -; CHECK: f6: +define double @f8(double %a, double %b, i64 %i1) { +; CHECK: f8: ; CHECK: cgrjl ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 @@ -73,11 +94,10 @@ define double @f6(double %a, double %b, i64 %i1) { ret double %res } -; Check the high end of the negative CGHI range. -define double @f7(double %a, double %b, i64 %i1) { -; CHECK: f7: -; CHECK: cghi %r2, -1 -; CHECK-NEXT: jl +; Check the high end of the negative CGIJ range. +define double @f9(double %a, double %b, i64 %i1) { +; CHECK: f9: +; CHECK: cgijl %r2, -1 ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 %cond = icmp slt i64 %i1, -1 @@ -85,9 +105,32 @@ define double @f7(double %a, double %b, i64 %i1) { ret double %res } +; Check the low end of the CGIJ range. +define double @f10(double %a, double %b, i64 %i1) { +; CHECK: f10: +; CHECK: cgijl %r2, -128 +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp slt i64 %i1, -128 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the next value down, which must use CGHI instead. +define double @f11(double %a, double %b, i64 %i1) { +; CHECK: f11: +; CHECK: cghi %r2, -129 +; CHECK-NEXT: jl +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp slt i64 %i1, -129 + %res = select i1 %cond, double %a, double %b + ret double %res +} + ; Check the low end of the CGHI range. -define double @f8(double %a, double %b, i64 %i1) { -; CHECK: f8: +define double @f12(double %a, double %b, i64 %i1) { +; CHECK: f12: ; CHECK: cghi %r2, -32768 ; CHECK-NEXT: jl ; CHECK: ldr %f0, %f2 @@ -98,8 +141,8 @@ define double @f8(double %a, double %b, i64 %i1) { } ; Check the next value down, which must use CGFI instead. -define double @f9(double %a, double %b, i64 %i1) { -; CHECK: f9: +define double @f13(double %a, double %b, i64 %i1) { +; CHECK: f13: ; CHECK: cgfi %r2, -32769 ; CHECK-NEXT: jl ; CHECK: ldr %f0, %f2 @@ -110,8 +153,8 @@ define double @f9(double %a, double %b, i64 %i1) { } ; Check the low end of the CGFI range. -define double @f10(double %a, double %b, i64 %i1) { -; CHECK: f10: +define double @f14(double %a, double %b, i64 %i1) { +; CHECK: f14: ; CHECK: cgfi %r2, -2147483648 ; CHECK-NEXT: jl ; CHECK: ldr %f0, %f2 @@ -122,8 +165,8 @@ define double @f10(double %a, double %b, i64 %i1) { } ; Check the next value down, which must use register comparison. -define double @f11(double %a, double %b, i64 %i1) { -; CHECK: f11: +define double @f15(double %a, double %b, i64 %i1) { +; CHECK: f15: ; CHECK: cgrjl ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 diff --git a/test/CodeGen/SystemZ/int-cmp-13.ll b/test/CodeGen/SystemZ/int-cmp-13.ll index aab95473a0..19bceecb62 100644 --- a/test/CodeGen/SystemZ/int-cmp-13.ll +++ b/test/CodeGen/SystemZ/int-cmp-13.ll @@ -5,8 +5,7 @@ ; Check comparisons with 0. define double @f1(double %a, double %b, i64 %i1) { ; CHECK: f1: -; CHECK: cghi %r2, 0 -; CHECK-NEXT: je +; CHECK: cgije %r2, 0 ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 %cond = icmp eq i64 %i1, 0 @@ -14,9 +13,32 @@ define double @f1(double %a, double %b, i64 %i1) { ret double %res } -; Check the high end of the CGHI range. +; Check the high end of the CGIJ range. define double @f2(double %a, double %b, i64 %i1) { ; CHECK: f2: +; CHECK: cgije %r2, 127 +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp eq i64 %i1, 127 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the next value up, which must use CGHI instead. +define double @f3(double %a, double %b, i64 %i1) { +; CHECK: f3: +; CHECK: cghi %r2, 128 +; CHECK-NEXT: je +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp eq i64 %i1, 128 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the high end of the CGHI range. +define double @f4(double %a, double %b, i64 %i1) { +; CHECK: f4: ; CHECK: cghi %r2, 32767 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 @@ -27,8 +49,8 @@ define double @f2(double %a, double %b, i64 %i1) { } ; Check the next value up, which must use CGFI. -define double @f3(double %a, double %b, i64 %i1) { -; CHECK: f3: +define double @f5(double %a, double %b, i64 %i1) { +; CHECK: f5: ; CHECK: cgfi %r2, 32768 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 @@ -39,8 +61,8 @@ define double @f3(double %a, double %b, i64 %i1) { } ; Check the high end of the CGFI range. -define double @f4(double %a, double %b, i64 %i1) { -; CHECK: f4: +define double @f6(double %a, double %b, i64 %i1) { +; CHECK: f6: ; CHECK: cgfi %r2, 2147483647 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 @@ -51,8 +73,8 @@ define double @f4(double %a, double %b, i64 %i1) { } ; Check the next value up, which should use CLGFI instead. -define double @f5(double %a, double %b, i64 %i1) { -; CHECK: f5: +define double @f7(double %a, double %b, i64 %i1) { +; CHECK: f7: ; CHECK: clgfi %r2, 2147483648 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 @@ -63,8 +85,8 @@ define double @f5(double %a, double %b, i64 %i1) { } ; Check the high end of the CLGFI range. -define double @f6(double %a, double %b, i64 %i1) { -; CHECK: f6: +define double @f8(double %a, double %b, i64 %i1) { +; CHECK: f8: ; CHECK: clgfi %r2, 4294967295 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 @@ -75,8 +97,8 @@ define double @f6(double %a, double %b, i64 %i1) { } ; Check the next value up, which must use a register comparison. -define double @f7(double %a, double %b, i64 %i1) { -; CHECK: f7: +define double @f9(double %a, double %b, i64 %i1) { +; CHECK: f9: ; CHECK: cgrje %r2, ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 @@ -85,11 +107,10 @@ define double @f7(double %a, double %b, i64 %i1) { ret double %res } -; Check the high end of the negative CGHI range. -define double @f8(double %a, double %b, i64 %i1) { -; CHECK: f8: -; CHECK: cghi %r2, -1 -; CHECK-NEXT: je +; Check the high end of the negative CGIJ range. +define double @f10(double %a, double %b, i64 %i1) { +; CHECK: f10: +; CHECK: cgije %r2, -1 ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 %cond = icmp eq i64 %i1, -1 @@ -97,9 +118,32 @@ define double @f8(double %a, double %b, i64 %i1) { ret double %res } +; Check the low end of the CGIJ range. +define double @f11(double %a, double %b, i64 %i1) { +; CHECK: f11: +; CHECK: cgije %r2, -128 +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp eq i64 %i1, -128 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the next value down, which must use CGHI instead. +define double @f12(double %a, double %b, i64 %i1) { +; CHECK: f12: +; CHECK: cghi %r2, -129 +; CHECK-NEXT: je +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp eq i64 %i1, -129 + %res = select i1 %cond, double %a, double %b + ret double %res +} + ; Check the low end of the CGHI range. -define double @f9(double %a, double %b, i64 %i1) { -; CHECK: f9: +define double @f13(double %a, double %b, i64 %i1) { +; CHECK: f13: ; CHECK: cghi %r2, -32768 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 @@ -110,8 +154,8 @@ define double @f9(double %a, double %b, i64 %i1) { } ; Check the next value down, which must use CGFI instead. -define double @f10(double %a, double %b, i64 %i1) { -; CHECK: f10: +define double @f14(double %a, double %b, i64 %i1) { +; CHECK: f14: ; CHECK: cgfi %r2, -32769 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 @@ -122,8 +166,8 @@ define double @f10(double %a, double %b, i64 %i1) { } ; Check the low end of the CGFI range. -define double @f11(double %a, double %b, i64 %i1) { -; CHECK: f11: +define double @f15(double %a, double %b, i64 %i1) { +; CHECK: f15: ; CHECK: cgfi %r2, -2147483648 ; CHECK-NEXT: je ; CHECK: ldr %f0, %f2 @@ -134,8 +178,8 @@ define double @f11(double %a, double %b, i64 %i1) { } ; Check the next value down, which must use register comparison. -define double @f12(double %a, double %b, i64 %i1) { -; CHECK: f12: +define double @f16(double %a, double %b, i64 %i1) { +; CHECK: f16: ; CHECK: cgrje ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 diff --git a/test/CodeGen/SystemZ/int-cmp-14.ll b/test/CodeGen/SystemZ/int-cmp-14.ll index 28c325c005..11b56adcdc 100644 --- a/test/CodeGen/SystemZ/int-cmp-14.ll +++ b/test/CodeGen/SystemZ/int-cmp-14.ll @@ -5,8 +5,7 @@ ; Check comparisons with 0. define double @f1(double %a, double %b, i64 %i1) { ; CHECK: f1: -; CHECK: cghi %r2, 0 -; CHECK-NEXT: jlh +; CHECK: cgijlh %r2, 0 ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 %cond = icmp ne i64 %i1, 0 @@ -14,9 +13,32 @@ define double @f1(double %a, double %b, i64 %i1) { ret double %res } -; Check the high end of the CGHI range. +; Check the high end of the CGIJ range. define double @f2(double %a, double %b, i64 %i1) { ; CHECK: f2: +; CHECK: cgijlh %r2, 127 +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp ne i64 %i1, 127 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the next value up, which must use CGHI instead. +define double @f3(double %a, double %b, i64 %i1) { +; CHECK: f3: +; CHECK: cghi %r2, 128 +; CHECK-NEXT: jlh +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp ne i64 %i1, 128 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the high end of the CGHI range. +define double @f4(double %a, double %b, i64 %i1) { +; CHECK: f4: ; CHECK: cghi %r2, 32767 ; CHECK-NEXT: jlh ; CHECK: ldr %f0, %f2 @@ -27,8 +49,8 @@ define double @f2(double %a, double %b, i64 %i1) { } ; Check the next value up, which must use CGFI. -define double @f3(double %a, double %b, i64 %i1) { -; CHECK: f3: +define double @f5(double %a, double %b, i64 %i1) { +; CHECK: f5: ; CHECK: cgfi %r2, 32768 ; CHECK-NEXT: jlh ; CHECK: ldr %f0, %f2 @@ -39,8 +61,8 @@ define double @f3(double %a, double %b, i64 %i1) { } ; Check the high end of the CGFI range. -define double @f4(double %a, double %b, i64 %i1) { -; CHECK: f4: +define double @f6(double %a, double %b, i64 %i1) { +; CHECK: f6: ; CHECK: cgfi %r2, 2147483647 ; CHECK-NEXT: jlh ; CHECK: ldr %f0, %f2 @@ -51,8 +73,8 @@ define double @f4(double %a, double %b, i64 %i1) { } ; Check the next value up, which should use CLGFI instead. -define double @f5(double %a, double %b, i64 %i1) { -; CHECK: f5: +define double @f7(double %a, double %b, i64 %i1) { +; CHECK: f7: ; CHECK: clgfi %r2, 2147483648 ; CHECK-NEXT: jlh ; CHECK: ldr %f0, %f2 @@ -63,8 +85,8 @@ define double @f5(double %a, double %b, i64 %i1) { } ; Check the high end of the CLGFI range. -define double @f6(double %a, double %b, i64 %i1) { -; CHECK: f6: +define double @f8(double %a, double %b, i64 %i1) { +; CHECK: f8: ; CHECK: clgfi %r2, 4294967295 ; CHECK-NEXT: jlh ; CHECK: ldr %f0, %f2 @@ -75,8 +97,8 @@ define double @f6(double %a, double %b, i64 %i1) { } ; Check the next value up, which must use a register comparison. -define double @f7(double %a, double %b, i64 %i1) { -; CHECK: f7: +define double @f9(double %a, double %b, i64 %i1) { +; CHECK: f9: ; CHECK: cgrjlh %r2, ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 @@ -85,11 +107,10 @@ define double @f7(double %a, double %b, i64 %i1) { ret double %res } -; Check the high end of the negative CGHI range. -define double @f8(double %a, double %b, i64 %i1) { -; CHECK: f8: -; CHECK: cghi %r2, -1 -; CHECK-NEXT: jlh +; Check the high end of the negative CGIJ range. +define double @f10(double %a, double %b, i64 %i1) { +; CHECK: f10: +; CHECK: cgijlh %r2, -1 ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 %cond = icmp ne i64 %i1, -1 @@ -97,9 +118,32 @@ define double @f8(double %a, double %b, i64 %i1) { ret double %res } +; Check the low end of the CGIJ range. +define double @f11(double %a, double %b, i64 %i1) { +; CHECK: f11: +; CHECK: cgijlh %r2, -128 +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp ne i64 %i1, -128 + %res = select i1 %cond, double %a, double %b + ret double %res +} + +; Check the next value down, which must use CGHI instead. +define double @f12(double %a, double %b, i64 %i1) { +; CHECK: f12: +; CHECK: cghi %r2, -129 +; CHECK-NEXT: jlh +; CHECK: ldr %f0, %f2 +; CHECK: br %r14 + %cond = icmp ne i64 %i1, -129 + %res = select i1 %cond, double %a, double %b + ret double %res +} + ; Check the low end of the CGHI range. -define double @f9(double %a, double %b, i64 %i1) { -; CHECK: f9: +define double @f13(double %a, double %b, i64 %i1) { +; CHECK: f13: ; CHECK: cghi %r2, -32768 ; CHECK-NEXT: jlh ; CHECK: ldr %f0, %f2 @@ -110,8 +154,8 @@ define double @f9(double %a, double %b, i64 %i1) { } ; Check the next value down, which must use CGFI instead. -define double @f10(double %a, double %b, i64 %i1) { -; CHECK: f10: +define double @f14(double %a, double %b, i64 %i1) { +; CHECK: f14: ; CHECK: cgfi %r2, -32769 ; CHECK-NEXT: jlh ; CHECK: ldr %f0, %f2 @@ -122,8 +166,8 @@ define double @f10(double %a, double %b, i64 %i1) { } ; Check the low end of the CGFI range. -define double @f11(double %a, double %b, i64 %i1) { -; CHECK: f11: +define double @f15(double %a, double %b, i64 %i1) { +; CHECK: f15: ; CHECK: cgfi %r2, -2147483648 ; CHECK-NEXT: jlh ; CHECK: ldr %f0, %f2 @@ -134,8 +178,8 @@ define double @f11(double %a, double %b, i64 %i1) { } ; Check the next value down, which must use register comparison. -define double @f12(double %a, double %b, i64 %i1) { -; CHECK: f12: +define double @f16(double %a, double %b, i64 %i1) { +; CHECK: f16: ; CHECK: cgrjlh ; CHECK: ldr %f0, %f2 ; CHECK: br %r14 diff --git a/test/MC/Disassembler/SystemZ/insns-pcrel.txt b/test/MC/Disassembler/SystemZ/insns-pcrel.txt index 0b135377f3..f9e7774cbd 100644 --- a/test/MC/Disassembler/SystemZ/insns-pcrel.txt +++ b/test/MC/Disassembler/SystemZ/insns-pcrel.txt @@ -1106,3 +1106,195 @@ # 0x0000063a: # CHECK: crj %r0, %r0, 15, 0x63a 0xec 0x00 0x00 0x00 0xf0 0x76 + +# 0x00000640: +# CHECK: cgij %r0, 0, 0, 0x640 +0xec 0x00 0x00 0x00 0x00 0x7c + +# 0x00000646: +# CHECK: cgij %r0, -128, 0, 0x646 +0xec 0x00 0x00 0x00 0x80 0x7c + +# 0x0000064c: +# CHECK: cgij %r0, -1, 0, 0x64c +0xec 0x00 0x00 0x00 0xff 0x7c + +# 0x00000652: +# CHECK: cgij %r0, 127, 0, 0x652 +0xec 0x00 0x00 0x00 0x7f 0x7c + +# 0x00000658: +# CHECK: cgij %r15, 0, 0, 0x658 +0xec 0xf0 0x00 0x00 0x00 0x7c + +# 0x0000065e: +# CHECK: cgij %r7, 100, 0, 0x65e +0xec 0x70 0x00 0x00 0x64 0x7c + +# 0x00000664: +# CHECK: cgij %r0, 0, 0, 0x662 +0xec 0x00 0xff 0xff 0x00 0x7c + +# 0x0000066a: +# CHECK: cgij %r0, 0, 0, 0xffffffffffff066a +0xec 0x00 0x80 0x00 0x00 0x7c + +# 0x00000670: +# CHECK: cgij %r0, 0, 0, 0x1066e +0xec 0x00 0x7f 0xff 0x00 0x7c + +# 0x00000676: +# CHECK: cgij %r0, 0, 1, 0x676 +0xec 0x01 0x00 0x00 0x00 0x7c + +# 0x0000067c: +# CHECK: cgijh %r0, 0, 0x67c +0xec 0x02 0x00 0x00 0x00 0x7c + +# 0x00000682: +# CHECK: cgij %r0, 0, 3, 0x682 +0xec 0x03 0x00 0x00 0x00 0x7c + +# 0x00000688: +# CHECK: cgijl %r0, 0, 0x688 +0xec 0x04 0x00 0x00 0x00 0x7c + +# 0x0000068e: +# CHECK: cgij %r0, 0, 5, 0x68e +0xec 0x05 0x00 0x00 0x00 0x7c + +# 0x00000694: +# CHECK: cgijlh %r0, 0, 0x694 +0xec 0x06 0x00 0x00 0x00 0x7c + +# 0x0000069a: +# CHECK: cgij %r0, 0, 7, 0x69a +0xec 0x07 0x00 0x00 0x00 0x7c + +# 0x000006a0: +# CHECK: cgije %r0, 0, 0x6a0 +0xec 0x08 0x00 0x00 0x00 0x7c + +# 0x000006a6: +# CHECK: cgij %r0, 0, 9, 0x6a6 +0xec 0x09 0x00 0x00 0x00 0x7c + +# 0x000006ac: +# CHECK: cgijhe %r0, 0, 0x6ac +0xec 0x0a 0x00 0x00 0x00 0x7c + +# 0x000006b2: +# CHECK: cgij %r0, 0, 11, 0x6b2 +0xec 0x0b 0x00 0x00 0x00 0x7c + +# 0x000006b8: +# CHECK: cgijle %r0, 0, 0x6b8 +0xec 0x0c 0x00 0x00 0x00 0x7c + +# 0x000006be: +# CHECK: cgij %r0, 0, 13, 0x6be +0xec 0x0d 0x00 0x00 0x00 0x7c + +# 0x000006c4: +# CHECK: cgij %r0, 0, 14, 0x6c4 +0xec 0x0e 0x00 0x00 0x00 0x7c + +# 0x000006ca: +# CHECK: cgij %r0, 0, 15, 0x6ca +0xec 0x0f 0x00 0x00 0x00 0x7c + +# 0x000006d0: +# CHECK: cij %r0, 0, 0, 0x6d0 +0xec 0x00 0x00 0x00 0x00 0x7e + +# 0x000006d6: +# CHECK: cij %r0, -128, 0, 0x6d6 +0xec 0x00 0x00 0x00 0x80 0x7e + +# 0x000006dc: +# CHECK: cij %r0, -1, 0, 0x6dc +0xec 0x00 0x00 0x00 0xff 0x7e + +# 0x000006e2: +# CHECK: cij %r0, 127, 0, 0x6e2 +0xec 0x00 0x00 0x00 0x7f 0x7e + +# 0x000006e8: +# CHECK: cij %r15, 0, 0, 0x6e8 +0xec 0xf0 0x00 0x00 0x00 0x7e + +# 0x000006ee: +# CHECK: cij %r7, 100, 0, 0x6ee +0xec 0x70 0x00 0x00 0x64 0x7e + +# 0x000006f4: +# CHECK: cij %r0, 0, 0, 0x6f2 +0xec 0x00 0xff 0xff 0x00 0x7e + +# 0x000006fa: +# CHECK: cij %r0, 0, 0, 0xffffffffffff06fa +0xec 0x00 0x80 0x00 0x00 0x7e + +# 0x00000700: +# CHECK: cij %r0, 0, 0, 0x106fe +0xec 0x00 0x7f 0xff 0x00 0x7e + +# 0x00000706: +# CHECK: cij %r0, 0, 1, 0x706 +0xec 0x01 0x00 0x00 0x00 0x7e + +# 0x0000070c: +# CHECK: cijh %r0, 0, 0x70c +0xec 0x02 0x00 0x00 0x00 0x7e + +# 0x00000712: +# CHECK: cij %r0, 0, 3, 0x712 +0xec 0x03 0x00 0x00 0x00 0x7e + +# 0x00000718: +# CHECK: cijl %r0, 0, 0x718 +0xec 0x04 0x00 0x00 0x00 0x7e + +# 0x0000071e: +# CHECK: cij %r0, 0, 5, 0x71e +0xec 0x05 0x00 0x00 0x00 0x7e + +# 0x00000724: +# CHECK: cijlh %r0, 0, 0x724 +0xec 0x06 0x00 0x00 0x00 0x7e + +# 0x0000072a: +# CHECK: cij %r0, 0, 7, 0x72a +0xec 0x07 0x00 0x00 0x00 0x7e + +# 0x00000730: +# CHECK: cije %r0, 0, 0x730 +0xec 0x08 0x00 0x00 0x00 0x7e + +# 0x00000736: +# CHECK: cij %r0, 0, 9, 0x736 +0xec 0x09 0x00 0x00 0x00 0x7e + +# 0x0000073c: +# CHECK: cijhe %r0, 0, 0x73c +0xec 0x0a 0x00 0x00 0x00 0x7e + +# 0x00000742: +# CHECK: cij %r0, 0, 11, 0x742 +0xec 0x0b 0x00 0x00 0x00 0x7e + +# 0x00000748: +# CHECK: cijle %r0, 0, 0x748 +0xec 0x0c 0x00 0x00 0x00 0x7e + +# 0x0000074e: +# CHECK: cij %r0, 0, 13, 0x74e +0xec 0x0d 0x00 0x00 0x00 0x7e + +# 0x00000754: +# CHECK: cij %r0, 0, 14, 0x754 +0xec 0x0e 0x00 0x00 0x00 0x7e + +# 0x0000075a: +# CHECK: cij %r0, 0, 15, 0x75a +0xec 0x0f 0x00 0x00 0x00 0x7e diff --git a/test/MC/SystemZ/insn-bad.s b/test/MC/SystemZ/insn-bad.s index ea249119c7..8dbe718371 100644 --- a/test/MC/SystemZ/insn-bad.s +++ b/test/MC/SystemZ/insn-bad.s @@ -452,6 +452,36 @@ cghsi 0, -32769 cghsi 0, 32768 +#CHECK: error: invalid operand +#CHECK: cgij %r0, -129, 0, 0 +#CHECK: error: invalid operand +#CHECK: cgij %r0, 128, 0, 0 + + cgij %r0, -129, 0, 0 + cgij %r0, 128, 0, 0 + +#CHECK: error: offset out of range +#CHECK: cgij %r0, 0, 0, -0x100002 +#CHECK: error: offset out of range +#CHECK: cgij %r0, 0, 0, -1 +#CHECK: error: offset out of range +#CHECK: cgij %r0, 0, 0, 1 +#CHECK: error: offset out of range +#CHECK: cgij %r0, 0, 0, 0x10000 + + cgij %r0, 0, 0, -0x100002 + cgij %r0, 0, 0, -1 + cgij %r0, 0, 0, 1 + cgij %r0, 0, 0, 0x10000 + +#CHECK: error: invalid instruction +#CHECK: cgijo %r0, 0, 0, 0 +#CHECK: error: invalid instruction +#CHECK: cgijno %r0, 0, 0, 0 + + cgijo %r0, 0, 0, 0 + cgijno %r0, 0, 0, 0 + #CHECK: error: offset out of range #CHECK: cgrj %r0, %r0, 0, -0x100002 #CHECK: error: offset out of range @@ -575,6 +605,36 @@ chy %r0, -524289 chy %r0, 524288 +#CHECK: error: invalid operand +#CHECK: cij %r0, -129, 0, 0 +#CHECK: error: invalid operand +#CHECK: cij %r0, 128, 0, 0 + + cij %r0, -129, 0, 0 + cij %r0, 128, 0, 0 + +#CHECK: error: offset out of range +#CHECK: cij %r0, 0, 0, -0x100002 +#CHECK: error: offset out of range +#CHECK: cij %r0, 0, 0, -1 +#CHECK: error: offset out of range +#CHECK: cij %r0, 0, 0, 1 +#CHECK: error: offset out of range +#CHECK: cij %r0, 0, 0, 0x10000 + + cij %r0, 0, 0, -0x100002 + cij %r0, 0, 0, -1 + cij %r0, 0, 0, 1 + cij %r0, 0, 0, 0x10000 + +#CHECK: error: invalid instruction +#CHECK: cijo %r0, 0, 0, 0 +#CHECK: error: invalid instruction +#CHECK: cijno %r0, 0, 0, 0 + + cijo %r0, 0, 0, 0 + cijno %r0, 0, 0, 0 + #CHECK: error: invalid operand #CHECK: cl %r0, -1 #CHECK: error: invalid operand diff --git a/test/MC/SystemZ/insn-good.s b/test/MC/SystemZ/insn-good.s index 8188de3b56..17af858dab 100644 --- a/test/MC/SystemZ/insn-good.s +++ b/test/MC/SystemZ/insn-good.s @@ -1513,6 +1513,239 @@ cghsi 4095(%r1), 42 cghsi 4095(%r15), 42 +#CHECK: cgij %r0, 0, 0, .[[LAB:L.*]] # encoding: [0xec,0x00,A,A,0x00,0x7c] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL +#CHECK: cgij %r0, -128, 0, .[[LAB:L.*]] # encoding: [0xec,0x00,A,A,0x80,0x7c] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL +#CHECK: cgij %r0, 127, 0, .[[LAB:L.*]] # encoding: [0xec,0x00,A,A,0x7f,0x7c] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL +#CHECK: cgij %r15, 0, 0, .[[LAB:L.*]] # encoding: [0xec,0xf0,A,A,0x00,0x7c] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL +#CHECK: cgij %r7, -1, 0, .[[LAB:L.*]] # encoding: [0xec,0x70,A,A,0xff,0x7c] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL + cgij %r0, 0, 0, 0 + cgij %r0, -128, 0, 0 + cgij %r0, 127, 0, 0 + cgij %r15, 0, 0, 0 + cgij %r7, -1, 0, 0 + +#CHECK: cgij %r1, -66, 0, .[[LAB:L.*]]-65536 # encoding: [0xec,0x10,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]-65536)+2, kind: FK_390_PC16DBL + cgij %r1, -66, 0, -0x10000 +#CHECK: cgij %r1, -66, 0, .[[LAB:L.*]]-2 # encoding: [0xec,0x10,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC16DBL + cgij %r1, -66, 0, -2 +#CHECK: cgij %r1, -66, 0, .[[LAB:L.*]] # encoding: [0xec,0x10,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL + cgij %r1, -66, 0, 0 +#CHECK: cgij %r1, -66, 0, .[[LAB:L.*]]+65534 # encoding: [0xec,0x10,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]+65534)+2, kind: FK_390_PC16DBL + cgij %r1, -66, 0, 0xfffe + +#CHECK: cgij %r1, -66, 0, foo # encoding: [0xec,0x10,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 0, foo + +#CHECK: cgij %r1, -66, 1, foo # encoding: [0xec,0x11,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 1, foo + +#CHECK: cgij %r1, -66, 2, foo # encoding: [0xec,0x12,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgijh %r1, -66, foo # encoding: [0xec,0x12,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgijnle %r1, -66, foo # encoding: [0xec,0x12,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 2, foo + cgijh %r1, -66, foo + cgijnle %r1, -66, foo + +#CHECK: cgij %r1, -66, 3, foo # encoding: [0xec,0x13,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 3, foo + +#CHECK: cgij %r1, -66, 4, foo # encoding: [0xec,0x14,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgijl %r1, -66, foo # encoding: [0xec,0x14,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgijnhe %r1, -66, foo # encoding: [0xec,0x14,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 4, foo + cgijl %r1, -66, foo + cgijnhe %r1, -66, foo + +#CHECK: cgij %r1, -66, 5, foo # encoding: [0xec,0x15,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 5, foo + +#CHECK: cgij %r1, -66, 6, foo # encoding: [0xec,0x16,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgijlh %r1, -66, foo # encoding: [0xec,0x16,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgijne %r1, -66, foo # encoding: [0xec,0x16,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 6, foo + cgijlh %r1, -66, foo + cgijne %r1, -66, foo + +#CHECK: cgij %r1, -66, 7, foo # encoding: [0xec,0x17,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 7, foo + +#CHECK: cgij %r1, -66, 8, foo # encoding: [0xec,0x18,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgije %r1, -66, foo # encoding: [0xec,0x18,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgijnlh %r1, -66, foo # encoding: [0xec,0x18,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 8, foo + cgije %r1, -66, foo + cgijnlh %r1, -66, foo + +#CHECK: cgij %r1, -66, 9, foo # encoding: [0xec,0x19,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 9, foo + +#CHECK: cgij %r1, -66, 10, foo # encoding: [0xec,0x1a,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgijhe %r1, -66, foo # encoding: [0xec,0x1a,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgijnl %r1, -66, foo # encoding: [0xec,0x1a,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 10, foo + cgijhe %r1, -66, foo + cgijnl %r1, -66, foo + +#CHECK: cgij %r1, -66, 11, foo # encoding: [0xec,0x1b,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 11, foo + +#CHECK: cgij %r1, -66, 12, foo # encoding: [0xec,0x1c,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgijle %r1, -66, foo # encoding: [0xec,0x1c,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cgijnh %r1, -66, foo # encoding: [0xec,0x1c,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 12, foo + cgijle %r1, -66, foo + cgijnh %r1, -66, foo + +#CHECK: cgij %r1, -66, 13, foo # encoding: [0xec,0x1d,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 13, foo + +#CHECK: cgij %r1, -66, 14, foo # encoding: [0xec,0x1e,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 14, foo + +#CHECK: cgij %r1, -66, 15, foo # encoding: [0xec,0x1f,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cgij %r1, -66, 15, foo + +#CHECK: cgij %r1, -66, 0, bar+100 # encoding: [0xec,0x10,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgij %r1, -66, 0, bar+100 + +#CHECK: cgijh %r1, -66, bar+100 # encoding: [0xec,0x12,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgijh %r1, -66, bar+100 + +#CHECK: cgijnle %r1, -66, bar+100 # encoding: [0xec,0x12,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgijnle %r1, -66, bar+100 + +#CHECK: cgijl %r1, -66, bar+100 # encoding: [0xec,0x14,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgijl %r1, -66, bar+100 + +#CHECK: cgijnhe %r1, -66, bar+100 # encoding: [0xec,0x14,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgijnhe %r1, -66, bar+100 + +#CHECK: cgijlh %r1, -66, bar+100 # encoding: [0xec,0x16,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgijlh %r1, -66, bar+100 + +#CHECK: cgijne %r1, -66, bar+100 # encoding: [0xec,0x16,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgijne %r1, -66, bar+100 + +#CHECK: cgije %r1, -66, bar+100 # encoding: [0xec,0x18,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgije %r1, -66, bar+100 + +#CHECK: cgijnlh %r1, -66, bar+100 # encoding: [0xec,0x18,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgijnlh %r1, -66, bar+100 + +#CHECK: cgijhe %r1, -66, bar+100 # encoding: [0xec,0x1a,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgijhe %r1, -66, bar+100 + +#CHECK: cgijnl %r1, -66, bar+100 # encoding: [0xec,0x1a,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgijnl %r1, -66, bar+100 + +#CHECK: cgijle %r1, -66, bar+100 # encoding: [0xec,0x1c,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgijle %r1, -66, bar+100 + +#CHECK: cgijnh %r1, -66, bar+100 # encoding: [0xec,0x1c,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cgijnh %r1, -66, bar+100 + +#CHECK: cgij %r1, -66, 0, bar@PLT # encoding: [0xec,0x10,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgij %r1, -66, 0, bar@PLT + +#CHECK: cgijh %r1, -66, bar@PLT # encoding: [0xec,0x12,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgijh %r1, -66, bar@PLT + +#CHECK: cgijnle %r1, -66, bar@PLT # encoding: [0xec,0x12,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgijnle %r1, -66, bar@PLT + +#CHECK: cgijl %r1, -66, bar@PLT # encoding: [0xec,0x14,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgijl %r1, -66, bar@PLT + +#CHECK: cgijnhe %r1, -66, bar@PLT # encoding: [0xec,0x14,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgijnhe %r1, -66, bar@PLT + +#CHECK: cgijlh %r1, -66, bar@PLT # encoding: [0xec,0x16,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgijlh %r1, -66, bar@PLT + +#CHECK: cgijne %r1, -66, bar@PLT # encoding: [0xec,0x16,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgijne %r1, -66, bar@PLT + +#CHECK: cgije %r1, -66, bar@PLT # encoding: [0xec,0x18,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgije %r1, -66, bar@PLT + +#CHECK: cgijnlh %r1, -66, bar@PLT # encoding: [0xec,0x18,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgijnlh %r1, -66, bar@PLT + +#CHECK: cgijhe %r1, -66, bar@PLT # encoding: [0xec,0x1a,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgijhe %r1, -66, bar@PLT + +#CHECK: cgijnl %r1, -66, bar@PLT # encoding: [0xec,0x1a,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgijnl %r1, -66, bar@PLT + +#CHECK: cgijle %r1, -66, bar@PLT # encoding: [0xec,0x1c,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgijle %r1, -66, bar@PLT + +#CHECK: cgijnh %r1, -66, bar@PLT # encoding: [0xec,0x1c,A,A,0xbe,0x7c] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cgijnh %r1, -66, bar@PLT + #CHECK: cgr %r0, %r0 # encoding: [0xb9,0x20,0x00,0x00] #CHECK: cgr %r0, %r15 # encoding: [0xb9,0x20,0x00,0x0f] #CHECK: cgr %r15, %r0 # encoding: [0xb9,0x20,0x00,0xf0] @@ -1939,6 +2172,239 @@ chy %r0, 524287(%r15,%r1) chy %r15, 0 +#CHECK: cij %r0, 0, 0, .[[LAB:L.*]] # encoding: [0xec,0x00,A,A,0x00,0x7e] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL +#CHECK: cij %r0, -128, 0, .[[LAB:L.*]] # encoding: [0xec,0x00,A,A,0x80,0x7e] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL +#CHECK: cij %r0, 127, 0, .[[LAB:L.*]] # encoding: [0xec,0x00,A,A,0x7f,0x7e] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL +#CHECK: cij %r15, 0, 0, .[[LAB:L.*]] # encoding: [0xec,0xf0,A,A,0x00,0x7e] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL +#CHECK: cij %r7, -1, 0, .[[LAB:L.*]] # encoding: [0xec,0x70,A,A,0xff,0x7e] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL + cij %r0, 0, 0, 0 + cij %r0, -128, 0, 0 + cij %r0, 127, 0, 0 + cij %r15, 0, 0, 0 + cij %r7, -1, 0, 0 + +#CHECK: cij %r1, -66, 0, .[[LAB:L.*]]-65536 # encoding: [0xec,0x10,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]-65536)+2, kind: FK_390_PC16DBL + cij %r1, -66, 0, -0x10000 +#CHECK: cij %r1, -66, 0, .[[LAB:L.*]]-2 # encoding: [0xec,0x10,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC16DBL + cij %r1, -66, 0, -2 +#CHECK: cij %r1, -66, 0, .[[LAB:L.*]] # encoding: [0xec,0x10,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL + cij %r1, -66, 0, 0 +#CHECK: cij %r1, -66, 0, .[[LAB:L.*]]+65534 # encoding: [0xec,0x10,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (.[[LAB]]+65534)+2, kind: FK_390_PC16DBL + cij %r1, -66, 0, 0xfffe + +#CHECK: cij %r1, -66, 0, foo # encoding: [0xec,0x10,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 0, foo + +#CHECK: cij %r1, -66, 1, foo # encoding: [0xec,0x11,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 1, foo + +#CHECK: cij %r1, -66, 2, foo # encoding: [0xec,0x12,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cijh %r1, -66, foo # encoding: [0xec,0x12,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cijnle %r1, -66, foo # encoding: [0xec,0x12,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 2, foo + cijh %r1, -66, foo + cijnle %r1, -66, foo + +#CHECK: cij %r1, -66, 3, foo # encoding: [0xec,0x13,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 3, foo + +#CHECK: cij %r1, -66, 4, foo # encoding: [0xec,0x14,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cijl %r1, -66, foo # encoding: [0xec,0x14,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cijnhe %r1, -66, foo # encoding: [0xec,0x14,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 4, foo + cijl %r1, -66, foo + cijnhe %r1, -66, foo + +#CHECK: cij %r1, -66, 5, foo # encoding: [0xec,0x15,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 5, foo + +#CHECK: cij %r1, -66, 6, foo # encoding: [0xec,0x16,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cijlh %r1, -66, foo # encoding: [0xec,0x16,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cijne %r1, -66, foo # encoding: [0xec,0x16,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 6, foo + cijlh %r1, -66, foo + cijne %r1, -66, foo + +#CHECK: cij %r1, -66, 7, foo # encoding: [0xec,0x17,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 7, foo + +#CHECK: cij %r1, -66, 8, foo # encoding: [0xec,0x18,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cije %r1, -66, foo # encoding: [0xec,0x18,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cijnlh %r1, -66, foo # encoding: [0xec,0x18,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 8, foo + cije %r1, -66, foo + cijnlh %r1, -66, foo + +#CHECK: cij %r1, -66, 9, foo # encoding: [0xec,0x19,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 9, foo + +#CHECK: cij %r1, -66, 10, foo # encoding: [0xec,0x1a,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cijhe %r1, -66, foo # encoding: [0xec,0x1a,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cijnl %r1, -66, foo # encoding: [0xec,0x1a,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 10, foo + cijhe %r1, -66, foo + cijnl %r1, -66, foo + +#CHECK: cij %r1, -66, 11, foo # encoding: [0xec,0x1b,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 11, foo + +#CHECK: cij %r1, -66, 12, foo # encoding: [0xec,0x1c,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cijle %r1, -66, foo # encoding: [0xec,0x1c,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL +#CHECK: cijnh %r1, -66, foo # encoding: [0xec,0x1c,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 12, foo + cijle %r1, -66, foo + cijnh %r1, -66, foo + +#CHECK: cij %r1, -66, 13, foo # encoding: [0xec,0x1d,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 13, foo + +#CHECK: cij %r1, -66, 14, foo # encoding: [0xec,0x1e,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 14, foo + +#CHECK: cij %r1, -66, 15, foo # encoding: [0xec,0x1f,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL + cij %r1, -66, 15, foo + +#CHECK: cij %r1, -66, 0, bar+100 # encoding: [0xec,0x10,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cij %r1, -66, 0, bar+100 + +#CHECK: cijh %r1, -66, bar+100 # encoding: [0xec,0x12,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cijh %r1, -66, bar+100 + +#CHECK: cijnle %r1, -66, bar+100 # encoding: [0xec,0x12,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cijnle %r1, -66, bar+100 + +#CHECK: cijl %r1, -66, bar+100 # encoding: [0xec,0x14,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cijl %r1, -66, bar+100 + +#CHECK: cijnhe %r1, -66, bar+100 # encoding: [0xec,0x14,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cijnhe %r1, -66, bar+100 + +#CHECK: cijlh %r1, -66, bar+100 # encoding: [0xec,0x16,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cijlh %r1, -66, bar+100 + +#CHECK: cijne %r1, -66, bar+100 # encoding: [0xec,0x16,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cijne %r1, -66, bar+100 + +#CHECK: cije %r1, -66, bar+100 # encoding: [0xec,0x18,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cije %r1, -66, bar+100 + +#CHECK: cijnlh %r1, -66, bar+100 # encoding: [0xec,0x18,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cijnlh %r1, -66, bar+100 + +#CHECK: cijhe %r1, -66, bar+100 # encoding: [0xec,0x1a,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cijhe %r1, -66, bar+100 + +#CHECK: cijnl %r1, -66, bar+100 # encoding: [0xec,0x1a,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cijnl %r1, -66, bar+100 + +#CHECK: cijle %r1, -66, bar+100 # encoding: [0xec,0x1c,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cijle %r1, -66, bar+100 + +#CHECK: cijnh %r1, -66, bar+100 # encoding: [0xec,0x1c,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: (bar+100)+2, kind: FK_390_PC16DBL + cijnh %r1, -66, bar+100 + +#CHECK: cij %r1, -66, 0, bar@PLT # encoding: [0xec,0x10,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cij %r1, -66, 0, bar@PLT + +#CHECK: cijh %r1, -66, bar@PLT # encoding: [0xec,0x12,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cijh %r1, -66, bar@PLT + +#CHECK: cijnle %r1, -66, bar@PLT # encoding: [0xec,0x12,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cijnle %r1, -66, bar@PLT + +#CHECK: cijl %r1, -66, bar@PLT # encoding: [0xec,0x14,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cijl %r1, -66, bar@PLT + +#CHECK: cijnhe %r1, -66, bar@PLT # encoding: [0xec,0x14,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cijnhe %r1, -66, bar@PLT + +#CHECK: cijlh %r1, -66, bar@PLT # encoding: [0xec,0x16,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cijlh %r1, -66, bar@PLT + +#CHECK: cijne %r1, -66, bar@PLT # encoding: [0xec,0x16,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cijne %r1, -66, bar@PLT + +#CHECK: cije %r1, -66, bar@PLT # encoding: [0xec,0x18,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cije %r1, -66, bar@PLT + +#CHECK: cijnlh %r1, -66, bar@PLT # encoding: [0xec,0x18,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cijnlh %r1, -66, bar@PLT + +#CHECK: cijhe %r1, -66, bar@PLT # encoding: [0xec,0x1a,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cijhe %r1, -66, bar@PLT + +#CHECK: cijnl %r1, -66, bar@PLT # encoding: [0xec,0x1a,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cijnl %r1, -66, bar@PLT + +#CHECK: cijle %r1, -66, bar@PLT # encoding: [0xec,0x1c,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cijle %r1, -66, bar@PLT + +#CHECK: cijnh %r1, -66, bar@PLT # encoding: [0xec,0x1c,A,A,0xbe,0x7e] +#CHECK: fixup A - offset: 2, value: bar@PLT+2, kind: FK_390_PC16DBL + cijnh %r1, -66, bar@PLT + #CHECK: cl %r0, 0 # encoding: [0x55,0x00,0x00,0x00] #CHECK: cl %r0, 4095 # encoding: [0x55,0x00,0x0f,0xff] #CHECK: cl %r0, 0(%r1) # encoding: [0x55,0x00,0x10,0x00] -- cgit v1.2.3