From 8eea4f1c7d20d88c0d4bfb62c2447879895ce421 Mon Sep 17 00:00:00 2001 From: Sander de Smalen Date: Mon, 2 Jul 2018 08:20:59 +0000 Subject: [PATCH] [AArch64][SVE] Asm: Support for vector element compares (immediate). Compare vector elements with a signed/unsigned immediate, e.g. cmpgt p0.s, p0/z, z0.s, #-16 cmphi p0.s, p0/z, z0.s, #127 llvm-svn: 336081 --- .../lib/Target/AArch64/AArch64SVEInstrInfo.td | 11 +++ llvm/lib/Target/AArch64/SVEInstrFormats.td | 74 +++++++++++++++++++ llvm/test/MC/AArch64/SVE/cmpeq-diagnostics.s | 14 ++++ llvm/test/MC/AArch64/SVE/cmpeq.s | 48 ++++++++++++ llvm/test/MC/AArch64/SVE/cmpge-diagnostics.s | 14 ++++ llvm/test/MC/AArch64/SVE/cmpge.s | 48 ++++++++++++ llvm/test/MC/AArch64/SVE/cmpgt-diagnostics.s | 14 ++++ llvm/test/MC/AArch64/SVE/cmpgt.s | 48 ++++++++++++ llvm/test/MC/AArch64/SVE/cmphi-diagnostics.s | 14 ++++ llvm/test/MC/AArch64/SVE/cmphi.s | 48 ++++++++++++ llvm/test/MC/AArch64/SVE/cmphs-diagnostics.s | 13 ++++ llvm/test/MC/AArch64/SVE/cmphs.s | 48 ++++++++++++ llvm/test/MC/AArch64/SVE/cmple-diagnostics.s | 14 ++++ llvm/test/MC/AArch64/SVE/cmple.s | 48 ++++++++++++ llvm/test/MC/AArch64/SVE/cmplo-diagnostics.s | 14 ++++ llvm/test/MC/AArch64/SVE/cmplo.s | 48 ++++++++++++ llvm/test/MC/AArch64/SVE/cmpls-diagnostics.s | 14 ++++ llvm/test/MC/AArch64/SVE/cmpls.s | 48 ++++++++++++ llvm/test/MC/AArch64/SVE/cmplt-diagnostics.s | 14 ++++ llvm/test/MC/AArch64/SVE/cmplt.s | 48 ++++++++++++ llvm/test/MC/AArch64/SVE/cmpne-diagnostics.s | 14 ++++ llvm/test/MC/AArch64/SVE/cmpne.s | 48 ++++++++++++ 22 files changed, 704 insertions(+) diff --git a/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td b/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td index 536c55bf764a..f60ff3a4099c 100644 --- a/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td +++ b/llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td @@ -527,6 +527,17 @@ let Predicates = [HasSVE] in { defm CMPLO_WIDE_PPzZZ : sve_int_cmp_1_wide<0b110, "cmplo">; defm CMPLS_WIDE_PPzZZ : sve_int_cmp_1_wide<0b111, "cmpls">; + defm CMPGE_PPzZI : sve_int_scmp_vi<0b000, "cmpge">; + defm CMPGT_PPzZI : sve_int_scmp_vi<0b001, "cmpgt">; + defm CMPLT_PPzZI : sve_int_scmp_vi<0b010, "cmplt">; + defm CMPLE_PPzZI : sve_int_scmp_vi<0b011, "cmple">; + defm CMPEQ_PPzZI : sve_int_scmp_vi<0b100, "cmpeq">; + defm CMPNE_PPzZI : sve_int_scmp_vi<0b101, "cmpne">; + defm CMPHS_PPzZI : sve_int_ucmp_vi<0b00, "cmphs">; + defm CMPHI_PPzZI : sve_int_ucmp_vi<0b01, "cmphi">; + defm CMPLO_PPzZI : sve_int_ucmp_vi<0b10, "cmplo">; + defm CMPLS_PPzZI : sve_int_ucmp_vi<0b11, "cmpls">; + defm SQINCB_XPiWdI : sve_int_pred_pattern_b_s32<0b00000, "sqincb">; defm UQINCB_WPiI : sve_int_pred_pattern_b_u32<0b00001, "uqincb">; defm SQDECB_XPiWdI : sve_int_pred_pattern_b_s32<0b00010, "sqdecb">; diff --git a/llvm/lib/Target/AArch64/SVEInstrFormats.td b/llvm/lib/Target/AArch64/SVEInstrFormats.td index ff56d5c593aa..9acbfb293465 100644 --- a/llvm/lib/Target/AArch64/SVEInstrFormats.td +++ b/llvm/lib/Target/AArch64/SVEInstrFormats.td @@ -1051,6 +1051,80 @@ multiclass sve_int_cmp_1_wide opc, string asm> { def _S : sve_int_cmp<0b1, 0b10, opc, asm, PPR32, ZPR32, ZPR64>; } + +//===----------------------------------------------------------------------===// +// SVE Integer Compare - Signed Immediate Group +//===----------------------------------------------------------------------===// + +class sve_int_scmp_vi sz8_64, bits<3> opc, string asm, PPRRegOp pprty, + ZPRRegOp zprty, + Operand immtype> +: I<(outs pprty:$Pd), (ins PPR3bAny:$Pg, zprty:$Zn, immtype:$imm5), + asm, "\t$Pd, $Pg/z, $Zn, $imm5", + "", + []>, Sched<[]> { + bits<4> Pd; + bits<3> Pg; + bits<5> Zn; + bits<5> imm5; + let Inst{31-24} = 0b00100101; + let Inst{23-22} = sz8_64; + let Inst{21} = 0b0; + let Inst{20-16} = imm5; + let Inst{15} = opc{2}; + let Inst{14} = 0b0; + let Inst{13} = opc{1}; + let Inst{12-10} = Pg; + let Inst{9-5} = Zn; + let Inst{4} = opc{0}; + let Inst{3-0} = Pd; + + let Defs = [NZCV]; +} + +multiclass sve_int_scmp_vi opc, string asm> { + def _B : sve_int_scmp_vi<0b00, opc, asm, PPR8, ZPR8, simm5_32b>; + def _H : sve_int_scmp_vi<0b01, opc, asm, PPR16, ZPR16, simm5_32b>; + def _S : sve_int_scmp_vi<0b10, opc, asm, PPR32, ZPR32, simm5_32b>; + def _D : sve_int_scmp_vi<0b11, opc, asm, PPR64, ZPR64, simm5_64b>; +} + + +//===----------------------------------------------------------------------===// +// SVE Integer Compare - Unsigned Immediate Group +//===----------------------------------------------------------------------===// + +class sve_int_ucmp_vi sz8_64, bits<2> opc, string asm, PPRRegOp pprty, + ZPRRegOp zprty, Operand immtype> +: I<(outs pprty:$Pd), (ins PPR3bAny:$Pg, zprty:$Zn, immtype:$imm7), + asm, "\t$Pd, $Pg/z, $Zn, $imm7", + "", + []>, Sched<[]> { + bits<4> Pd; + bits<3> Pg; + bits<5> Zn; + bits<7> imm7; + let Inst{31-24} = 0b00100100; + let Inst{23-22} = sz8_64; + let Inst{21} = 1; + let Inst{20-14} = imm7; + let Inst{13} = opc{1}; + let Inst{12-10} = Pg; + let Inst{9-5} = Zn; + let Inst{4} = opc{0}; + let Inst{3-0} = Pd; + + let Defs = [NZCV]; +} + +multiclass sve_int_ucmp_vi opc, string asm> { + def _B : sve_int_ucmp_vi<0b00, opc, asm, PPR8, ZPR8, imm0_127>; + def _H : sve_int_ucmp_vi<0b01, opc, asm, PPR16, ZPR16, imm0_127>; + def _S : sve_int_ucmp_vi<0b10, opc, asm, PPR32, ZPR32, imm0_127>; + def _D : sve_int_ucmp_vi<0b11, opc, asm, PPR64, ZPR64, imm0_127>; +} + + //===----------------------------------------------------------------------===// //SVE Index Generation Group //===----------------------------------------------------------------------===// diff --git a/llvm/test/MC/AArch64/SVE/cmpeq-diagnostics.s b/llvm/test/MC/AArch64/SVE/cmpeq-diagnostics.s index 4901f1a44ba2..bcda4ac02821 100644 --- a/llvm/test/MC/AArch64/SVE/cmpeq-diagnostics.s +++ b/llvm/test/MC/AArch64/SVE/cmpeq-diagnostics.s @@ -60,3 +60,17 @@ cmpeq p0.d, p0/z, z0.s, z0.s // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width // CHECK-NEXT: cmpeq p0.d, p0/z, z0.s, z0.s // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + + +// --------------------------------------------------------------------------// +// Invalid immediate range + +cmpeq p0.s, p0/z, z0.s, #-17 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmpeq p0.s, p0/z, z0.s, #-17 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +cmpeq p0.s, p0/z, z0.s, #16 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmpeq p0.s, p0/z, z0.s, #16 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: diff --git a/llvm/test/MC/AArch64/SVE/cmpeq.s b/llvm/test/MC/AArch64/SVE/cmpeq.s index f5511d76eac3..a65404341346 100644 --- a/llvm/test/MC/AArch64/SVE/cmpeq.s +++ b/llvm/test/MC/AArch64/SVE/cmpeq.s @@ -49,3 +49,51 @@ cmpeq p0.s, p0/z, z0.s, z0.d // CHECK-ENCODING: [0x00,0x20,0x80,0x24] // CHECK-ERROR: instruction requires: sve // CHECK-UNKNOWN: 00 20 80 24 + +cmpeq p0.b, p0/z, z0.b, #-16 +// CHECK-INST: cmpeq p0.b, p0/z, z0.b, #-16 +// CHECK-ENCODING: [0x00,0x80,0x10,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 80 10 25 + +cmpeq p0.h, p0/z, z0.h, #-16 +// CHECK-INST: cmpeq p0.h, p0/z, z0.h, #-16 +// CHECK-ENCODING: [0x00,0x80,0x50,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 80 50 25 + +cmpeq p0.s, p0/z, z0.s, #-16 +// CHECK-INST: cmpeq p0.s, p0/z, z0.s, #-16 +// CHECK-ENCODING: [0x00,0x80,0x90,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 80 90 25 + +cmpeq p0.d, p0/z, z0.d, #-16 +// CHECK-INST: cmpeq p0.d, p0/z, z0.d, #-16 +// CHECK-ENCODING: [0x00,0x80,0xd0,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 80 d0 25 + +cmpeq p0.b, p0/z, z0.b, #15 +// CHECK-INST: cmpeq p0.b, p0/z, z0.b, #15 +// CHECK-ENCODING: [0x00,0x80,0x0f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 80 0f 25 + +cmpeq p0.h, p0/z, z0.h, #15 +// CHECK-INST: cmpeq p0.h, p0/z, z0.h, #15 +// CHECK-ENCODING: [0x00,0x80,0x4f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 80 4f 25 + +cmpeq p0.s, p0/z, z0.s, #15 +// CHECK-INST: cmpeq p0.s, p0/z, z0.s, #15 +// CHECK-ENCODING: [0x00,0x80,0x8f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 80 8f 25 + +cmpeq p0.d, p0/z, z0.d, #15 +// CHECK-INST: cmpeq p0.d, p0/z, z0.d, #15 +// CHECK-ENCODING: [0x00,0x80,0xcf,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 80 cf 25 diff --git a/llvm/test/MC/AArch64/SVE/cmpge-diagnostics.s b/llvm/test/MC/AArch64/SVE/cmpge-diagnostics.s index bae3eb599b53..49520ed5ecd5 100644 --- a/llvm/test/MC/AArch64/SVE/cmpge-diagnostics.s +++ b/llvm/test/MC/AArch64/SVE/cmpge-diagnostics.s @@ -60,3 +60,17 @@ cmpge p0.d, p0/z, z0.s, z0.s // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width // CHECK-NEXT: cmpge p0.d, p0/z, z0.s, z0.s // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + + +// --------------------------------------------------------------------------// +// Invalid immediate range + +cmpge p0.s, p0/z, z0.s, #-17 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmpge p0.s, p0/z, z0.s, #-17 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +cmpge p0.s, p0/z, z0.s, #16 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmpge p0.s, p0/z, z0.s, #16 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: diff --git a/llvm/test/MC/AArch64/SVE/cmpge.s b/llvm/test/MC/AArch64/SVE/cmpge.s index f9eb9b9c9f33..db670b27fb3a 100644 --- a/llvm/test/MC/AArch64/SVE/cmpge.s +++ b/llvm/test/MC/AArch64/SVE/cmpge.s @@ -48,3 +48,51 @@ cmpge p0.s, p0/z, z0.s, z0.d // CHECK-ENCODING: [0x00,0x40,0x80,0x24] // CHECK-ERROR: instruction requires: sve // CHECK-UNKNOWN: 00 40 80 24 + +cmpge p0.b, p0/z, z0.b, #-16 +// CHECK-INST: cmpge p0.b, p0/z, z0.b, #-16 +// CHECK-ENCODING: [0x00,0x00,0x10,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 10 25 + +cmpge p0.h, p0/z, z0.h, #-16 +// CHECK-INST: cmpge p0.h, p0/z, z0.h, #-16 +// CHECK-ENCODING: [0x00,0x00,0x50,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 50 25 + +cmpge p0.s, p0/z, z0.s, #-16 +// CHECK-INST: cmpge p0.s, p0/z, z0.s, #-16 +// CHECK-ENCODING: [0x00,0x00,0x90,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 90 25 + +cmpge p0.d, p0/z, z0.d, #-16 +// CHECK-INST: cmpge p0.d, p0/z, z0.d, #-16 +// CHECK-ENCODING: [0x00,0x00,0xd0,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 d0 25 + +cmpge p0.b, p0/z, z0.b, #15 +// CHECK-INST: cmpge p0.b, p0/z, z0.b, #15 +// CHECK-ENCODING: [0x00,0x00,0x0f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 0f 25 + +cmpge p0.h, p0/z, z0.h, #15 +// CHECK-INST: cmpge p0.h, p0/z, z0.h, #15 +// CHECK-ENCODING: [0x00,0x00,0x4f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 4f 25 + +cmpge p0.s, p0/z, z0.s, #15 +// CHECK-INST: cmpge p0.s, p0/z, z0.s, #15 +// CHECK-ENCODING: [0x00,0x00,0x8f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 8f 25 + +cmpge p0.d, p0/z, z0.d, #15 +// CHECK-INST: cmpge p0.d, p0/z, z0.d, #15 +// CHECK-ENCODING: [0x00,0x00,0xcf,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 cf 25 diff --git a/llvm/test/MC/AArch64/SVE/cmpgt-diagnostics.s b/llvm/test/MC/AArch64/SVE/cmpgt-diagnostics.s index 71f46637fbd4..fcc972c41011 100644 --- a/llvm/test/MC/AArch64/SVE/cmpgt-diagnostics.s +++ b/llvm/test/MC/AArch64/SVE/cmpgt-diagnostics.s @@ -60,3 +60,17 @@ cmpgt p0.d, p0/z, z0.s, z0.s // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width // CHECK-NEXT: cmpgt p0.d, p0/z, z0.s, z0.s // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + + +// --------------------------------------------------------------------------// +// Invalid immediate range + +cmpgt p0.s, p0/z, z0.s, #-17 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmpgt p0.s, p0/z, z0.s, #-17 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +cmpgt p0.s, p0/z, z0.s, #16 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmpgt p0.s, p0/z, z0.s, #16 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: diff --git a/llvm/test/MC/AArch64/SVE/cmpgt.s b/llvm/test/MC/AArch64/SVE/cmpgt.s index edc7c7e2baa0..fa0389fbc548 100644 --- a/llvm/test/MC/AArch64/SVE/cmpgt.s +++ b/llvm/test/MC/AArch64/SVE/cmpgt.s @@ -49,3 +49,51 @@ cmpgt p0.s, p0/z, z0.s, z0.d // CHECK-ENCODING: [0x10,0x40,0x80,0x24] // CHECK-ERROR: instruction requires: sve // CHECK-UNKNOWN: 10 40 80 24 + +cmpgt p0.b, p0/z, z0.b, #-16 +// CHECK-INST: cmpgt p0.b, p0/z, z0.b, #-16 +// CHECK-ENCODING: [0x10,0x00,0x10,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 10 25 + +cmpgt p0.h, p0/z, z0.h, #-16 +// CHECK-INST: cmpgt p0.h, p0/z, z0.h, #-16 +// CHECK-ENCODING: [0x10,0x00,0x50,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 50 25 + +cmpgt p0.s, p0/z, z0.s, #-16 +// CHECK-INST: cmpgt p0.s, p0/z, z0.s, #-16 +// CHECK-ENCODING: [0x10,0x00,0x90,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 90 25 + +cmpgt p0.d, p0/z, z0.d, #-16 +// CHECK-INST: cmpgt p0.d, p0/z, z0.d, #-16 +// CHECK-ENCODING: [0x10,0x00,0xd0,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 d0 25 + +cmpgt p0.b, p0/z, z0.b, #15 +// CHECK-INST: cmpgt p0.b, p0/z, z0.b, #15 +// CHECK-ENCODING: [0x10,0x00,0x0f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 0f 25 + +cmpgt p0.h, p0/z, z0.h, #15 +// CHECK-INST: cmpgt p0.h, p0/z, z0.h, #15 +// CHECK-ENCODING: [0x10,0x00,0x4f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 4f 25 + +cmpgt p0.s, p0/z, z0.s, #15 +// CHECK-INST: cmpgt p0.s, p0/z, z0.s, #15 +// CHECK-ENCODING: [0x10,0x00,0x8f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 8f 25 + +cmpgt p0.d, p0/z, z0.d, #15 +// CHECK-INST: cmpgt p0.d, p0/z, z0.d, #15 +// CHECK-ENCODING: [0x10,0x00,0xcf,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 cf 25 diff --git a/llvm/test/MC/AArch64/SVE/cmphi-diagnostics.s b/llvm/test/MC/AArch64/SVE/cmphi-diagnostics.s index f27490ebebec..b0b3010183f3 100644 --- a/llvm/test/MC/AArch64/SVE/cmphi-diagnostics.s +++ b/llvm/test/MC/AArch64/SVE/cmphi-diagnostics.s @@ -60,3 +60,17 @@ cmphi p0.d, p0/z, z0.s, z0.s // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width // CHECK-NEXT: cmphi p0.d, p0/z, z0.s, z0.s // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + + +// --------------------------------------------------------------------------// +// Invalid immediate range + +cmphi p0.s, p0/z, z0.s, #-1 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 127]. +// CHECK-NEXT: cmphi p0.s, p0/z, z0.s, #-1 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +cmphi p0.s, p0/z, z0.s, #128 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 127]. +// CHECK-NEXT: cmphi p0.s, p0/z, z0.s, #128 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: diff --git a/llvm/test/MC/AArch64/SVE/cmphi.s b/llvm/test/MC/AArch64/SVE/cmphi.s index c0afa62c33e2..aabb8da9dac6 100644 --- a/llvm/test/MC/AArch64/SVE/cmphi.s +++ b/llvm/test/MC/AArch64/SVE/cmphi.s @@ -49,3 +49,51 @@ cmphi p0.s, p0/z, z0.s, z0.d // CHECK-ENCODING: [0x10,0xc0,0x80,0x24] // CHECK-ERROR: instruction requires: sve // CHECK-UNKNOWN: 10 c0 80 24 + +cmphi p0.b, p0/z, z0.b, #0 +// CHECK-INST: cmphi p0.b, p0/z, z0.b, #0 +// CHECK-ENCODING: [0x10,0x00,0x20,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 20 24 + +cmphi p0.h, p0/z, z0.h, #0 +// CHECK-INST: cmphi p0.h, p0/z, z0.h, #0 +// CHECK-ENCODING: [0x10,0x00,0x60,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 60 24 + +cmphi p0.s, p0/z, z0.s, #0 +// CHECK-INST: cmphi p0.s, p0/z, z0.s, #0 +// CHECK-ENCODING: [0x10,0x00,0xa0,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 a0 24 + +cmphi p0.d, p0/z, z0.d, #0 +// CHECK-INST: cmphi p0.d, p0/z, z0.d, #0 +// CHECK-ENCODING: [0x10,0x00,0xe0,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 00 e0 24 + +cmphi p0.b, p0/z, z0.b, #127 +// CHECK-INST: cmphi p0.b, p0/z, z0.b, #127 +// CHECK-ENCODING: [0x10,0xc0,0x3f,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 c0 3f 24 + +cmphi p0.h, p0/z, z0.h, #127 +// CHECK-INST: cmphi p0.h, p0/z, z0.h, #127 +// CHECK-ENCODING: [0x10,0xc0,0x7f,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 c0 7f 24 + +cmphi p0.s, p0/z, z0.s, #127 +// CHECK-INST: cmphi p0.s, p0/z, z0.s, #127 +// CHECK-ENCODING: [0x10,0xc0,0xbf,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 c0 bf 24 + +cmphi p0.d, p0/z, z0.d, #127 +// CHECK-INST: cmphi p0.d, p0/z, z0.d, #127 +// CHECK-ENCODING: [0x10,0xc0,0xff,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 c0 ff 24 diff --git a/llvm/test/MC/AArch64/SVE/cmphs-diagnostics.s b/llvm/test/MC/AArch64/SVE/cmphs-diagnostics.s index 49d23ab56c4b..955c1af1b8d9 100644 --- a/llvm/test/MC/AArch64/SVE/cmphs-diagnostics.s +++ b/llvm/test/MC/AArch64/SVE/cmphs-diagnostics.s @@ -61,3 +61,16 @@ cmphs p0.d, p0/z, z0.s, z0.s // CHECK-NEXT: cmphs p0.d, p0/z, z0.s, z0.s // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +// --------------------------------------------------------------------------// +// Invalid immediate range + +cmphs p0.s, p0/z, z0.s, #-1 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 127]. +// CHECK-NEXT: cmphs p0.s, p0/z, z0.s, #-1 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +cmphs p0.s, p0/z, z0.s, #128 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 127]. +// CHECK-NEXT: cmphs p0.s, p0/z, z0.s, #128 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: diff --git a/llvm/test/MC/AArch64/SVE/cmphs.s b/llvm/test/MC/AArch64/SVE/cmphs.s index 79d4913d4a95..f0712c1e153f 100644 --- a/llvm/test/MC/AArch64/SVE/cmphs.s +++ b/llvm/test/MC/AArch64/SVE/cmphs.s @@ -49,3 +49,51 @@ cmphs p0.s, p0/z, z0.s, z0.d // CHECK-ENCODING: [0x00,0xc0,0x80,0x24] // CHECK-ERROR: instruction requires: sve // CHECK-UNKNOWN: 00 c0 80 24 + +cmphs p0.b, p0/z, z0.b, #0 +// CHECK-INST: cmphs p0.b, p0/z, z0.b, #0 +// CHECK-ENCODING: [0x00,0x00,0x20,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 20 24 + +cmphs p0.h, p0/z, z0.h, #0 +// CHECK-INST: cmphs p0.h, p0/z, z0.h, #0 +// CHECK-ENCODING: [0x00,0x00,0x60,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 60 24 + +cmphs p0.s, p0/z, z0.s, #0 +// CHECK-INST: cmphs p0.s, p0/z, z0.s, #0 +// CHECK-ENCODING: [0x00,0x00,0xa0,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 a0 24 + +cmphs p0.d, p0/z, z0.d, #0 +// CHECK-INST: cmphs p0.d, p0/z, z0.d, #0 +// CHECK-ENCODING: [0x00,0x00,0xe0,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 00 e0 24 + +cmphs p0.b, p0/z, z0.b, #127 +// CHECK-INST: cmphs p0.b, p0/z, z0.b, #127 +// CHECK-ENCODING: [0x00,0xc0,0x3f,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 c0 3f 24 + +cmphs p0.h, p0/z, z0.h, #127 +// CHECK-INST: cmphs p0.h, p0/z, z0.h, #127 +// CHECK-ENCODING: [0x00,0xc0,0x7f,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 c0 7f 24 + +cmphs p0.s, p0/z, z0.s, #127 +// CHECK-INST: cmphs p0.s, p0/z, z0.s, #127 +// CHECK-ENCODING: [0x00,0xc0,0xbf,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 c0 bf 24 + +cmphs p0.d, p0/z, z0.d, #127 +// CHECK-INST: cmphs p0.d, p0/z, z0.d, #127 +// CHECK-ENCODING: [0x00,0xc0,0xff,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 c0 ff 24 diff --git a/llvm/test/MC/AArch64/SVE/cmple-diagnostics.s b/llvm/test/MC/AArch64/SVE/cmple-diagnostics.s index bd871f3c516f..e40ab1419d5d 100644 --- a/llvm/test/MC/AArch64/SVE/cmple-diagnostics.s +++ b/llvm/test/MC/AArch64/SVE/cmple-diagnostics.s @@ -60,3 +60,17 @@ cmple p0.d, p0/z, z0.s, z0.s // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width // CHECK-NEXT: cmple p0.d, p0/z, z0.s, z0.s // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + + +// --------------------------------------------------------------------------// +// Invalid immediate range + +cmple p0.s, p0/z, z0.s, #-17 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmple p0.s, p0/z, z0.s, #-17 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +cmple p0.s, p0/z, z0.s, #16 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmple p0.s, p0/z, z0.s, #16 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: diff --git a/llvm/test/MC/AArch64/SVE/cmple.s b/llvm/test/MC/AArch64/SVE/cmple.s index a684a7e18e12..23f399b9a69b 100644 --- a/llvm/test/MC/AArch64/SVE/cmple.s +++ b/llvm/test/MC/AArch64/SVE/cmple.s @@ -48,3 +48,51 @@ cmple p0.s, p0/z, z0.s, z0.d // CHECK-ENCODING: [0x10,0x60,0x80,0x24] // CHECK-ERROR: instruction requires: sve // CHECK-UNKNOWN: 10 60 80 24 + +cmple p0.b, p0/z, z0.b, #-16 +// CHECK-INST: cmple p0.b, p0/z, z0.b, #-16 +// CHECK-ENCODING: [0x10,0x20,0x10,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 10 25 + +cmple p0.h, p0/z, z0.h, #-16 +// CHECK-INST: cmple p0.h, p0/z, z0.h, #-16 +// CHECK-ENCODING: [0x10,0x20,0x50,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 50 25 + +cmple p0.s, p0/z, z0.s, #-16 +// CHECK-INST: cmple p0.s, p0/z, z0.s, #-16 +// CHECK-ENCODING: [0x10,0x20,0x90,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 90 25 + +cmple p0.d, p0/z, z0.d, #-16 +// CHECK-INST: cmple p0.d, p0/z, z0.d, #-16 +// CHECK-ENCODING: [0x10,0x20,0xd0,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 d0 25 + +cmple p0.b, p0/z, z0.b, #15 +// CHECK-INST: cmple p0.b, p0/z, z0.b, #15 +// CHECK-ENCODING: [0x10,0x20,0x0f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 0f 25 + +cmple p0.h, p0/z, z0.h, #15 +// CHECK-INST: cmple p0.h, p0/z, z0.h, #15 +// CHECK-ENCODING: [0x10,0x20,0x4f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 4f 25 + +cmple p0.s, p0/z, z0.s, #15 +// CHECK-INST: cmple p0.s, p0/z, z0.s, #15 +// CHECK-ENCODING: [0x10,0x20,0x8f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 8f 25 + +cmple p0.d, p0/z, z0.d, #15 +// CHECK-INST: cmple p0.d, p0/z, z0.d, #15 +// CHECK-ENCODING: [0x10,0x20,0xcf,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 cf 25 diff --git a/llvm/test/MC/AArch64/SVE/cmplo-diagnostics.s b/llvm/test/MC/AArch64/SVE/cmplo-diagnostics.s index 55eb036b3ecb..825ad13b4dd7 100644 --- a/llvm/test/MC/AArch64/SVE/cmplo-diagnostics.s +++ b/llvm/test/MC/AArch64/SVE/cmplo-diagnostics.s @@ -60,3 +60,17 @@ cmplo p0.d, p0/z, z0.s, z0.s // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width // CHECK-NEXT: cmplo p0.d, p0/z, z0.s, z0.s // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + + +// --------------------------------------------------------------------------// +// Invalid immediate range + +cmplo p0.s, p0/z, z0.s, #-1 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 127]. +// CHECK-NEXT: cmplo p0.s, p0/z, z0.s, #-1 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +cmplo p0.s, p0/z, z0.s, #128 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 127]. +// CHECK-NEXT: cmplo p0.s, p0/z, z0.s, #128 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: diff --git a/llvm/test/MC/AArch64/SVE/cmplo.s b/llvm/test/MC/AArch64/SVE/cmplo.s index 434f7d6e2fd0..72d165203f19 100644 --- a/llvm/test/MC/AArch64/SVE/cmplo.s +++ b/llvm/test/MC/AArch64/SVE/cmplo.s @@ -48,3 +48,51 @@ cmplo p0.s, p0/z, z0.s, z0.d // CHECK-ENCODING: [0x00,0xe0,0x80,0x24] // CHECK-ERROR: instruction requires: sve // CHECK-UNKNOWN: 00 e0 80 24 + +cmplo p0.b, p0/z, z0.b, #0 +// CHECK-INST: cmplo p0.b, p0/z, z0.b, #0 +// CHECK-ENCODING: [0x00,0x20,0x20,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 20 24 + +cmplo p0.h, p0/z, z0.h, #0 +// CHECK-INST: cmplo p0.h, p0/z, z0.h, #0 +// CHECK-ENCODING: [0x00,0x20,0x60,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 60 24 + +cmplo p0.s, p0/z, z0.s, #0 +// CHECK-INST: cmplo p0.s, p0/z, z0.s, #0 +// CHECK-ENCODING: [0x00,0x20,0xa0,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 a0 24 + +cmplo p0.d, p0/z, z0.d, #0 +// CHECK-INST: cmplo p0.d, p0/z, z0.d, #0 +// CHECK-ENCODING: [0x00,0x20,0xe0,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 e0 24 + +cmplo p0.b, p0/z, z0.b, #127 +// CHECK-INST: cmplo p0.b, p0/z, z0.b, #127 +// CHECK-ENCODING: [0x00,0xe0,0x3f,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 e0 3f 24 + +cmplo p0.h, p0/z, z0.h, #127 +// CHECK-INST: cmplo p0.h, p0/z, z0.h, #127 +// CHECK-ENCODING: [0x00,0xe0,0x7f,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 e0 7f 24 + +cmplo p0.s, p0/z, z0.s, #127 +// CHECK-INST: cmplo p0.s, p0/z, z0.s, #127 +// CHECK-ENCODING: [0x00,0xe0,0xbf,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 e0 bf 24 + +cmplo p0.d, p0/z, z0.d, #127 +// CHECK-INST: cmplo p0.d, p0/z, z0.d, #127 +// CHECK-ENCODING: [0x00,0xe0,0xff,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 e0 ff 24 diff --git a/llvm/test/MC/AArch64/SVE/cmpls-diagnostics.s b/llvm/test/MC/AArch64/SVE/cmpls-diagnostics.s index 726cd62963c2..349a1b3ccf68 100644 --- a/llvm/test/MC/AArch64/SVE/cmpls-diagnostics.s +++ b/llvm/test/MC/AArch64/SVE/cmpls-diagnostics.s @@ -60,3 +60,17 @@ cmpls p0.d, p0/z, z0.s, z0.s // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width // CHECK-NEXT: cmpls p0.d, p0/z, z0.s, z0.s // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + + +// --------------------------------------------------------------------------// +// Invalid immediate range + +cmpls p0.s, p0/z, z0.s, #-1 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 127]. +// CHECK-NEXT: cmpls p0.s, p0/z, z0.s, #-1 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +cmpls p0.s, p0/z, z0.s, #128 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 127]. +// CHECK-NEXT: cmpls p0.s, p0/z, z0.s, #128 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: diff --git a/llvm/test/MC/AArch64/SVE/cmpls.s b/llvm/test/MC/AArch64/SVE/cmpls.s index 5ba2cf7195da..be713ee5febb 100644 --- a/llvm/test/MC/AArch64/SVE/cmpls.s +++ b/llvm/test/MC/AArch64/SVE/cmpls.s @@ -48,3 +48,51 @@ cmpls p0.s, p0/z, z0.s, z0.d // CHECK-ENCODING: [0x10,0xe0,0x80,0x24] // CHECK-ERROR: instruction requires: sve // CHECK-UNKNOWN: 10 e0 80 24 + +cmpls p0.b, p0/z, z0.b, #0 +// CHECK-INST: cmpls p0.b, p0/z, z0.b, #0 +// CHECK-ENCODING: [0x10,0x20,0x20,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 20 24 + +cmpls p0.h, p0/z, z0.h, #0 +// CHECK-INST: cmpls p0.h, p0/z, z0.h, #0 +// CHECK-ENCODING: [0x10,0x20,0x60,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 60 24 + +cmpls p0.s, p0/z, z0.s, #0 +// CHECK-INST: cmpls p0.s, p0/z, z0.s, #0 +// CHECK-ENCODING: [0x10,0x20,0xa0,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 a0 24 + +cmpls p0.d, p0/z, z0.d, #0 +// CHECK-INST: cmpls p0.d, p0/z, z0.d, #0 +// CHECK-ENCODING: [0x10,0x20,0xe0,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 20 e0 24 + +cmpls p0.b, p0/z, z0.b, #127 +// CHECK-INST: cmpls p0.b, p0/z, z0.b, #127 +// CHECK-ENCODING: [0x10,0xe0,0x3f,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 e0 3f 24 + +cmpls p0.h, p0/z, z0.h, #127 +// CHECK-INST: cmpls p0.h, p0/z, z0.h, #127 +// CHECK-ENCODING: [0x10,0xe0,0x7f,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 e0 7f 24 + +cmpls p0.s, p0/z, z0.s, #127 +// CHECK-INST: cmpls p0.s, p0/z, z0.s, #127 +// CHECK-ENCODING: [0x10,0xe0,0xbf,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 e0 bf 24 + +cmpls p0.d, p0/z, z0.d, #127 +// CHECK-INST: cmpls p0.d, p0/z, z0.d, #127 +// CHECK-ENCODING: [0x10,0xe0,0xff,0x24] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 e0 ff 24 diff --git a/llvm/test/MC/AArch64/SVE/cmplt-diagnostics.s b/llvm/test/MC/AArch64/SVE/cmplt-diagnostics.s index 9ae99414ffb7..7878ed56d409 100644 --- a/llvm/test/MC/AArch64/SVE/cmplt-diagnostics.s +++ b/llvm/test/MC/AArch64/SVE/cmplt-diagnostics.s @@ -60,3 +60,17 @@ cmplt p0.d, p0/z, z0.s, z0.s // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width // CHECK-NEXT: cmplt p0.d, p0/z, z0.s, z0.s // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + + +// --------------------------------------------------------------------------// +// Invalid immediate range + +cmplt p0.s, p0/z, z0.s, #-17 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmplt p0.s, p0/z, z0.s, #-17 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +cmplt p0.s, p0/z, z0.s, #16 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmplt p0.s, p0/z, z0.s, #16 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: diff --git a/llvm/test/MC/AArch64/SVE/cmplt.s b/llvm/test/MC/AArch64/SVE/cmplt.s index 86f3d0a80e53..c7225066a348 100644 --- a/llvm/test/MC/AArch64/SVE/cmplt.s +++ b/llvm/test/MC/AArch64/SVE/cmplt.s @@ -48,3 +48,51 @@ cmplt p0.s, p0/z, z0.s, z0.d // CHECK-ENCODING: [0x00,0x60,0x80,0x24] // CHECK-ERROR: instruction requires: sve // CHECK-UNKNOWN: 00 60 80 24 + +cmplt p0.b, p0/z, z0.b, #-16 +// CHECK-INST: cmplt p0.b, p0/z, z0.b, #-16 +// CHECK-ENCODING: [0x00,0x20,0x10,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 10 25 + +cmplt p0.h, p0/z, z0.h, #-16 +// CHECK-INST: cmplt p0.h, p0/z, z0.h, #-16 +// CHECK-ENCODING: [0x00,0x20,0x50,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 50 25 + +cmplt p0.s, p0/z, z0.s, #-16 +// CHECK-INST: cmplt p0.s, p0/z, z0.s, #-16 +// CHECK-ENCODING: [0x00,0x20,0x90,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 90 25 + +cmplt p0.d, p0/z, z0.d, #-16 +// CHECK-INST: cmplt p0.d, p0/z, z0.d, #-16 +// CHECK-ENCODING: [0x00,0x20,0xd0,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 d0 25 + +cmplt p0.b, p0/z, z0.b, #15 +// CHECK-INST: cmplt p0.b, p0/z, z0.b, #15 +// CHECK-ENCODING: [0x00,0x20,0x0f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 0f 25 + +cmplt p0.h, p0/z, z0.h, #15 +// CHECK-INST: cmplt p0.h, p0/z, z0.h, #15 +// CHECK-ENCODING: [0x00,0x20,0x4f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 4f 25 + +cmplt p0.s, p0/z, z0.s, #15 +// CHECK-INST: cmplt p0.s, p0/z, z0.s, #15 +// CHECK-ENCODING: [0x00,0x20,0x8f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 8f 25 + +cmplt p0.d, p0/z, z0.d, #15 +// CHECK-INST: cmplt p0.d, p0/z, z0.d, #15 +// CHECK-ENCODING: [0x00,0x20,0xcf,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 00 20 cf 25 diff --git a/llvm/test/MC/AArch64/SVE/cmpne-diagnostics.s b/llvm/test/MC/AArch64/SVE/cmpne-diagnostics.s index 805a319bdb54..98bd8b7857b7 100644 --- a/llvm/test/MC/AArch64/SVE/cmpne-diagnostics.s +++ b/llvm/test/MC/AArch64/SVE/cmpne-diagnostics.s @@ -60,3 +60,17 @@ cmpne p0.d, p0/z, z0.s, z0.s // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width // CHECK-NEXT: cmpne p0.d, p0/z, z0.s, z0.s // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + + +// --------------------------------------------------------------------------// +// Invalid immediate range + +cmpne p0.s, p0/z, z0.s, #-17 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #-17 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +cmpne p0.s, p0/z, z0.s, #16 +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-16, 15]. +// CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #16 +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: diff --git a/llvm/test/MC/AArch64/SVE/cmpne.s b/llvm/test/MC/AArch64/SVE/cmpne.s index ef1557cf0cdb..0dc87cc25cf1 100644 --- a/llvm/test/MC/AArch64/SVE/cmpne.s +++ b/llvm/test/MC/AArch64/SVE/cmpne.s @@ -49,3 +49,51 @@ cmpne p0.s, p0/z, z0.s, z0.d // CHECK-ENCODING: [0x10,0x20,0x80,0x24] // CHECK-ERROR: instruction requires: sve // CHECK-UNKNOWN: 10 20 80 24 + +cmpne p0.b, p0/z, z0.b, #-16 +// CHECK-INST: cmpne p0.b, p0/z, z0.b, #-16 +// CHECK-ENCODING: [0x10,0x80,0x10,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 80 10 25 + +cmpne p0.h, p0/z, z0.h, #-16 +// CHECK-INST: cmpne p0.h, p0/z, z0.h, #-16 +// CHECK-ENCODING: [0x10,0x80,0x50,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 80 50 25 + +cmpne p0.s, p0/z, z0.s, #-16 +// CHECK-INST: cmpne p0.s, p0/z, z0.s, #-16 +// CHECK-ENCODING: [0x10,0x80,0x90,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 80 90 25 + +cmpne p0.d, p0/z, z0.d, #-16 +// CHECK-INST: cmpne p0.d, p0/z, z0.d, #-16 +// CHECK-ENCODING: [0x10,0x80,0xd0,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 80 d0 25 + +cmpne p0.b, p0/z, z0.b, #15 +// CHECK-INST: cmpne p0.b, p0/z, z0.b, #15 +// CHECK-ENCODING: [0x10,0x80,0x0f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 80 0f 25 + +cmpne p0.h, p0/z, z0.h, #15 +// CHECK-INST: cmpne p0.h, p0/z, z0.h, #15 +// CHECK-ENCODING: [0x10,0x80,0x4f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 80 4f 25 + +cmpne p0.s, p0/z, z0.s, #15 +// CHECK-INST: cmpne p0.s, p0/z, z0.s, #15 +// CHECK-ENCODING: [0x10,0x80,0x8f,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 80 8f 25 + +cmpne p0.d, p0/z, z0.d, #15 +// CHECK-INST: cmpne p0.d, p0/z, z0.d, #15 +// CHECK-ENCODING: [0x10,0x80,0xcf,0x25] +// CHECK-ERROR: instruction requires: sve +// CHECK-UNKNOWN: 10 80 cf 25