forked from OSchip/llvm-project
[AArch64][SVE2] Asm: support SVE2 Narrowing Group
Summary: Patch adds support for the following instructions: SVE2 bitwise shift right narrow: * SQSHRUNB, SQSHRUNT, SQRSHRUNB, SQRSHRUNT, SHRNB, SHRNT, RSHRNB, RSHRNT, SQSHRNB, SQSHRNT, SQRSHRNB, SQRSHRNT, UQSHRNB, UQSHRNT, UQRSHRNB, UQRSHRNT SVE2 integer add/subtract narrow high part: * ADDHNB, ADDHNT, RADDHNB, RADDHNT, SUBHNB, SUBHNT, RSUBHNB, RSUBHNT SVE2 saturating extract narrow: * SQXTNB, SQXTNT, UQXTNB, UQXTNT, SQXTUNB, SQXTUNT The specification can be found here: https://developer.arm.com/docs/ddi0602/latest Reviewed By: SjoerdMeijer Differential Revision: https://reviews.llvm.org/D62205 llvm-svn: 361624
This commit is contained in:
parent
cabab29af2
commit
adb1d74bf9
|
@ -1228,6 +1228,42 @@ let Predicates = [HasSVE2] in {
|
|||
defm SBCLB_ZZZ : sve2_int_addsub_long_carry<0b10, "sbclb">;
|
||||
defm SBCLT_ZZZ : sve2_int_addsub_long_carry<0b11, "sbclt">;
|
||||
|
||||
// SVE2 bitwise shift right narrow
|
||||
defm SQSHRUNB_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b0000, "sqshrunb">;
|
||||
defm SQSHRUNT_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b0001, "sqshrunt">;
|
||||
defm SQRSHRUNB_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b0010, "sqrshrunb">;
|
||||
defm SQRSHRUNT_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b0011, "sqrshrunt">;
|
||||
defm SHRNB_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b0100, "shrnb">;
|
||||
defm SHRNT_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b0101, "shrnt">;
|
||||
defm RSHRNB_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b0110, "rshrnb">;
|
||||
defm RSHRNT_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b0111, "rshrnt">;
|
||||
defm SQSHRNB_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b1000, "sqshrnb">;
|
||||
defm SQSHRNT_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b1001, "sqshrnt">;
|
||||
defm SQRSHRNB_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b1010, "sqrshrnb">;
|
||||
defm SQRSHRNT_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b1011, "sqrshrnt">;
|
||||
defm UQSHRNB_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b1100, "uqshrnb">;
|
||||
defm UQSHRNT_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b1101, "uqshrnt">;
|
||||
defm UQRSHRNB_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b1110, "uqrshrnb">;
|
||||
defm UQRSHRNT_ZZI : sve2_int_bin_cons_shift_imm_right_narrow<0b1111, "uqrshrnt">;
|
||||
|
||||
// SVE2 integer add/subtract narrow high part
|
||||
defm ADDHNB_ZZZ : sve2_int_addsub_narrow_high<0b000, "addhnb">;
|
||||
defm ADDHNT_ZZZ : sve2_int_addsub_narrow_high<0b001, "addhnt">;
|
||||
defm RADDHNB_ZZZ : sve2_int_addsub_narrow_high<0b010, "raddhnb">;
|
||||
defm RADDHNT_ZZZ : sve2_int_addsub_narrow_high<0b011, "raddhnt">;
|
||||
defm SUBHNB_ZZZ : sve2_int_addsub_narrow_high<0b100, "subhnb">;
|
||||
defm SUBHNT_ZZZ : sve2_int_addsub_narrow_high<0b101, "subhnt">;
|
||||
defm RSUBHNB_ZZZ : sve2_int_addsub_narrow_high<0b110, "rsubhnb">;
|
||||
defm RSUBHNT_ZZZ : sve2_int_addsub_narrow_high<0b111, "rsubhnt">;
|
||||
|
||||
// SVE2 saturating extract narrow
|
||||
defm SQXTNB_ZZ : sve2_int_sat_extract_narrow<0b000, "sqxtnb">;
|
||||
defm SQXTNT_ZZ : sve2_int_sat_extract_narrow<0b001, "sqxtnt">;
|
||||
defm UQXTNB_ZZ : sve2_int_sat_extract_narrow<0b010, "uqxtnb">;
|
||||
defm UQXTNT_ZZ : sve2_int_sat_extract_narrow<0b011, "uqxtnt">;
|
||||
defm SQXTUNB_ZZ : sve2_int_sat_extract_narrow<0b100, "sqxtunb">;
|
||||
defm SQXTUNT_ZZ : sve2_int_sat_extract_narrow<0b101, "sqxtunt">;
|
||||
|
||||
// Predicated shifts
|
||||
defm SQSHL_ZPmI : sve_int_bin_pred_shift_imm_left< 0b0110, "sqshl">;
|
||||
defm UQSHL_ZPmI : sve_int_bin_pred_shift_imm_left< 0b0111, "uqshl">;
|
||||
|
|
|
@ -2347,6 +2347,88 @@ multiclass sve2_int_addsub_long_carry<bits<2> opc, string asm> {
|
|||
ZPR64, ZPR64>;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// SVE2 Narrowing Group
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
class sve2_int_bin_cons_shift_imm_narrow<bits<3> tsz8_64, bits<4> opc,
|
||||
string asm, ZPRRegOp zprty1,
|
||||
ZPRRegOp zprty2, Operand immtype>
|
||||
: I<(outs zprty1:$Zd), (ins zprty2:$Zn, immtype:$imm),
|
||||
asm, "\t$Zd, $Zn, $imm",
|
||||
"", []>, Sched<[]> {
|
||||
bits<5> Zd;
|
||||
bits<5> Zn;
|
||||
bits<5> imm;
|
||||
let Inst{31-23} = 0b010001010;
|
||||
let Inst{22} = tsz8_64{2};
|
||||
let Inst{21} = 0b1;
|
||||
let Inst{20-19} = tsz8_64{1-0};
|
||||
let Inst{18-16} = imm{2-0}; // imm3
|
||||
let Inst{15-14} = 0b00;
|
||||
let Inst{13-10} = opc;
|
||||
let Inst{9-5} = Zn;
|
||||
let Inst{4-0} = Zd;
|
||||
}
|
||||
|
||||
multiclass sve2_int_bin_cons_shift_imm_right_narrow<bits<4> opc, string asm> {
|
||||
def _B : sve2_int_bin_cons_shift_imm_narrow<{0,0,1}, opc, asm, ZPR8, ZPR16,
|
||||
vecshiftR8>;
|
||||
def _H : sve2_int_bin_cons_shift_imm_narrow<{0,1,?}, opc, asm, ZPR16, ZPR32,
|
||||
vecshiftR16> {
|
||||
let Inst{19} = imm{3};
|
||||
}
|
||||
def _S : sve2_int_bin_cons_shift_imm_narrow<{1,?,?}, opc, asm, ZPR32, ZPR64,
|
||||
vecshiftR32> {
|
||||
let Inst{20-19} = imm{4-3};
|
||||
}
|
||||
}
|
||||
|
||||
class sve2_int_addsub_narrow_high<bits<2> sz, bits<3> opc, string asm,
|
||||
ZPRRegOp zprty1, ZPRRegOp zprty2>
|
||||
: I<(outs zprty1:$Zd), (ins zprty2:$Zn, zprty2:$Zm),
|
||||
asm, "\t$Zd, $Zn, $Zm", "", []>, Sched<[]> {
|
||||
bits<5> Zd;
|
||||
bits<5> Zn;
|
||||
bits<5> Zm;
|
||||
let Inst{31-24} = 0b01000101;
|
||||
let Inst{23-22} = sz;
|
||||
let Inst{21} = 0b1;
|
||||
let Inst{20-16} = Zm;
|
||||
let Inst{15-13} = 0b011;
|
||||
let Inst{12-10} = opc; // S, R, T
|
||||
let Inst{9-5} = Zn;
|
||||
let Inst{4-0} = Zd;
|
||||
}
|
||||
|
||||
multiclass sve2_int_addsub_narrow_high<bits<3> opc, string asm> {
|
||||
def _B : sve2_int_addsub_narrow_high<0b01, opc, asm, ZPR8, ZPR16>;
|
||||
def _H : sve2_int_addsub_narrow_high<0b10, opc, asm, ZPR16, ZPR32>;
|
||||
def _S : sve2_int_addsub_narrow_high<0b11, opc, asm, ZPR32, ZPR64>;
|
||||
}
|
||||
|
||||
class sve2_int_sat_extract_narrow<bits<3> tsz8_64, bits<3> opc, string asm,
|
||||
ZPRRegOp zprty1, ZPRRegOp zprty2>
|
||||
: I<(outs zprty1:$Zd), (ins zprty2:$Zn),
|
||||
asm, "\t$Zd, $Zn", "", []>, Sched<[]> {
|
||||
bits<5> Zd;
|
||||
bits<5> Zn;
|
||||
let Inst{31-23} = 0b010001010;
|
||||
let Inst{22} = tsz8_64{2};
|
||||
let Inst{21} = 0b1;
|
||||
let Inst{20-19} = tsz8_64{1-0};
|
||||
let Inst{18-13} = 0b000010;
|
||||
let Inst{12-10} = opc;
|
||||
let Inst{9-5} = Zn;
|
||||
let Inst{4-0} = Zd;
|
||||
}
|
||||
|
||||
multiclass sve2_int_sat_extract_narrow<bits<3> opc, string asm> {
|
||||
def _B : sve2_int_sat_extract_narrow<0b001, opc, asm, ZPR8, ZPR16>;
|
||||
def _H : sve2_int_sat_extract_narrow<0b010, opc, asm, ZPR16, ZPR32>;
|
||||
def _S : sve2_int_sat_extract_narrow<0b100, opc, asm, ZPR32, ZPR64>;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// SVE Integer Arithmetic - Unary Predicated Group
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
addhnb z0.b, z1.b, z2.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: addhnb z0.b, z1.b, z2.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
addhnb z0.h, z1.h, z2.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: addhnb z0.h, z1.h, z2.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
addhnb z0.s, z1.s, z2.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: addhnb z0.s, z1.s, z2.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
addhnb z0.d, z1.d, z2.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: addhnb z0.d, z1.d, z2.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
addhnb z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: addhnb z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
addhnb z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: addhnb z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
addhnb z0.b, z1.h, z31.h
|
||||
// CHECK-INST: addhnb z0.b, z1.h, z31.h
|
||||
// CHECK-ENCODING: [0x20,0x60,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 60 7f 45 <unknown>
|
||||
|
||||
addhnb z0.h, z1.s, z31.s
|
||||
// CHECK-INST: addhnb z0.h, z1.s, z31.s
|
||||
// CHECK-ENCODING: [0x20,0x60,0xbf,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 60 bf 45 <unknown>
|
||||
|
||||
addhnb z0.s, z1.d, z31.d
|
||||
// CHECK-INST: addhnb z0.s, z1.d, z31.d
|
||||
// CHECK-ENCODING: [0x20,0x60,0xff,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 60 ff 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
addhnt z0.b, z1.b, z2.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: addhnt z0.b, z1.b, z2.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
addhnt z0.h, z1.h, z2.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: addhnt z0.h, z1.h, z2.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
addhnt z0.s, z1.s, z2.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: addhnt z0.s, z1.s, z2.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
addhnt z0.d, z1.d, z2.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: addhnt z0.d, z1.d, z2.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
addhnt z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: addhnt z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
addhnt z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: addhnt z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
addhnt z0.b, z1.h, z31.h
|
||||
// CHECK-INST: addhnt z0.b, z1.h, z31.h
|
||||
// CHECK-ENCODING: [0x20,0x64,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 64 7f 45 <unknown>
|
||||
|
||||
addhnt z0.h, z1.s, z31.s
|
||||
// CHECK-INST: addhnt z0.h, z1.s, z31.s
|
||||
// CHECK-ENCODING: [0x20,0x64,0xbf,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 64 bf 45 <unknown>
|
||||
|
||||
addhnt z0.s, z1.d, z31.d
|
||||
// CHECK-INST: addhnt z0.s, z1.d, z31.d
|
||||
// CHECK-ENCODING: [0x20,0x64,0xff,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 64 ff 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
raddhnb z0.b, z1.b, z2.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: raddhnb z0.b, z1.b, z2.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
raddhnb z0.h, z1.h, z2.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: raddhnb z0.h, z1.h, z2.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
raddhnb z0.s, z1.s, z2.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: raddhnb z0.s, z1.s, z2.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
raddhnb z0.d, z1.d, z2.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: raddhnb z0.d, z1.d, z2.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
raddhnb z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: raddhnb z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
raddhnb z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: raddhnb z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
raddhnb z0.b, z1.h, z31.h
|
||||
// CHECK-INST: raddhnb z0.b, z1.h, z31.h
|
||||
// CHECK-ENCODING: [0x20,0x68,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 68 7f 45 <unknown>
|
||||
|
||||
raddhnb z0.h, z1.s, z31.s
|
||||
// CHECK-INST: raddhnb z0.h, z1.s, z31.s
|
||||
// CHECK-ENCODING: [0x20,0x68,0xbf,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 68 bf 45 <unknown>
|
||||
|
||||
raddhnb z0.s, z1.d, z31.d
|
||||
// CHECK-INST: raddhnb z0.s, z1.d, z31.d
|
||||
// CHECK-ENCODING: [0x20,0x68,0xff,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 68 ff 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
raddhnt z0.b, z1.b, z2.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: raddhnt z0.b, z1.b, z2.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
raddhnt z0.h, z1.h, z2.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: raddhnt z0.h, z1.h, z2.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
raddhnt z0.s, z1.s, z2.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: raddhnt z0.s, z1.s, z2.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
raddhnt z0.d, z1.d, z2.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: raddhnt z0.d, z1.d, z2.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
raddhnt z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: raddhnt z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
raddhnt z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: raddhnt z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
raddhnt z0.b, z1.h, z31.h
|
||||
// CHECK-INST: raddhnt z0.b, z1.h, z31.h
|
||||
// CHECK-ENCODING: [0x20,0x6c,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 6c 7f 45 <unknown>
|
||||
|
||||
raddhnt z0.h, z1.s, z31.s
|
||||
// CHECK-INST: raddhnt z0.h, z1.s, z31.s
|
||||
// CHECK-ENCODING: [0x20,0x6c,0xbf,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 6c bf 45 <unknown>
|
||||
|
||||
raddhnt z0.s, z1.d, z31.d
|
||||
// CHECK-INST: raddhnt z0.s, z1.d, z31.d
|
||||
// CHECK-ENCODING: [0x20,0x6c,0xff,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 6c ff 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
rshrnb z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: rshrnb z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnb z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: rshrnb z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnb z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: rshrnb z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnb z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: rshrnb z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnb z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: rshrnb z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnb z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: rshrnb z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
rshrnb z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rshrnb z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnb z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rshrnb z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnb z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rshrnb z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnb z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rshrnb z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
rshrnb z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: rshrnb z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
rshrnb z0.b, z0.h, #1
|
||||
// CHECK-INST: rshrnb z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x18,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 18 2f 45 <unknown>
|
||||
|
||||
rshrnb z31.b, z31.h, #8
|
||||
// CHECK-INST: rshrnb z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x1b,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 1b 28 45 <unknown>
|
||||
|
||||
rshrnb z0.h, z0.s, #1
|
||||
// CHECK-INST: rshrnb z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x18,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 18 3f 45 <unknown>
|
||||
|
||||
rshrnb z31.h, z31.s, #16
|
||||
// CHECK-INST: rshrnb z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x1b,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 1b 30 45 <unknown>
|
||||
|
||||
rshrnb z0.s, z0.d, #1
|
||||
// CHECK-INST: rshrnb z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x18,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 18 7f 45 <unknown>
|
||||
|
||||
rshrnb z31.s, z31.d, #32
|
||||
// CHECK-INST: rshrnb z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x1b,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 1b 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
rshrnt z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: rshrnt z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnt z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: rshrnt z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnt z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: rshrnt z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnt z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: rshrnt z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnt z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: rshrnt z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnt z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: rshrnt z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
rshrnt z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rshrnt z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnt z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rshrnt z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnt z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rshrnt z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rshrnt z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rshrnt z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
rshrnt z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: rshrnt z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
rshrnt z0.b, z0.h, #1
|
||||
// CHECK-INST: rshrnt z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x1c,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 1c 2f 45 <unknown>
|
||||
|
||||
rshrnt z31.b, z31.h, #8
|
||||
// CHECK-INST: rshrnt z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x1f,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 1f 28 45 <unknown>
|
||||
|
||||
rshrnt z0.h, z0.s, #1
|
||||
// CHECK-INST: rshrnt z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x1c,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 1c 3f 45 <unknown>
|
||||
|
||||
rshrnt z31.h, z31.s, #16
|
||||
// CHECK-INST: rshrnt z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x1f,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 1f 30 45 <unknown>
|
||||
|
||||
rshrnt z0.s, z0.d, #1
|
||||
// CHECK-INST: rshrnt z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x1c,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 1c 7f 45 <unknown>
|
||||
|
||||
rshrnt z31.s, z31.d, #32
|
||||
// CHECK-INST: rshrnt z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x1f,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 1f 60 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
rsubhnb z0.b, z1.b, z2.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rsubhnb z0.b, z1.b, z2.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rsubhnb z0.h, z1.h, z2.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rsubhnb z0.h, z1.h, z2.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rsubhnb z0.s, z1.s, z2.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rsubhnb z0.s, z1.s, z2.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rsubhnb z0.d, z1.d, z2.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rsubhnb z0.d, z1.d, z2.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
rsubhnb z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: rsubhnb z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
rsubhnb z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: rsubhnb z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
rsubhnb z0.b, z1.h, z31.h
|
||||
// CHECK-INST: rsubhnb z0.b, z1.h, z31.h
|
||||
// CHECK-ENCODING: [0x20,0x78,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 78 7f 45 <unknown>
|
||||
|
||||
rsubhnb z0.h, z1.s, z31.s
|
||||
// CHECK-INST: rsubhnb z0.h, z1.s, z31.s
|
||||
// CHECK-ENCODING: [0x20,0x78,0xbf,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 78 bf 45 <unknown>
|
||||
|
||||
rsubhnb z0.s, z1.d, z31.d
|
||||
// CHECK-INST: rsubhnb z0.s, z1.d, z31.d
|
||||
// CHECK-ENCODING: [0x20,0x78,0xff,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 78 ff 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
rsubhnt z0.b, z1.b, z2.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rsubhnt z0.b, z1.b, z2.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rsubhnt z0.h, z1.h, z2.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rsubhnt z0.h, z1.h, z2.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rsubhnt z0.s, z1.s, z2.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rsubhnt z0.s, z1.s, z2.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
rsubhnt z0.d, z1.d, z2.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: rsubhnt z0.d, z1.d, z2.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
rsubhnt z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: rsubhnt z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
rsubhnt z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: rsubhnt z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
rsubhnt z0.b, z1.h, z31.h
|
||||
// CHECK-INST: rsubhnt z0.b, z1.h, z31.h
|
||||
// CHECK-ENCODING: [0x20,0x7c,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 7c 7f 45 <unknown>
|
||||
|
||||
rsubhnt z0.h, z1.s, z31.s
|
||||
// CHECK-INST: rsubhnt z0.h, z1.s, z31.s
|
||||
// CHECK-ENCODING: [0x20,0x7c,0xbf,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 7c bf 45 <unknown>
|
||||
|
||||
rsubhnt z0.s, z1.d, z31.d
|
||||
// CHECK-INST: rsubhnt z0.s, z1.d, z31.d
|
||||
// CHECK-ENCODING: [0x20,0x7c,0xff,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 7c ff 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
shrnb z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: shrnb z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnb z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: shrnb z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnb z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: shrnb z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnb z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: shrnb z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnb z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: shrnb z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnb z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: shrnb z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
shrnb z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: shrnb z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnb z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: shrnb z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnb z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: shrnb z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnb z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: shrnb z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
shrnb z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: shrnb z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
shrnb z0.b, z0.h, #1
|
||||
// CHECK-INST: shrnb z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x10,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 10 2f 45 <unknown>
|
||||
|
||||
shrnb z31.b, z31.h, #8
|
||||
// CHECK-INST: shrnb z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x13,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 13 28 45 <unknown>
|
||||
|
||||
shrnb z0.h, z0.s, #1
|
||||
// CHECK-INST: shrnb z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x10,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 10 3f 45 <unknown>
|
||||
|
||||
shrnb z31.h, z31.s, #16
|
||||
// CHECK-INST: shrnb z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x13,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 13 30 45 <unknown>
|
||||
|
||||
shrnb z0.s, z0.d, #1
|
||||
// CHECK-INST: shrnb z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x10,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 10 7f 45 <unknown>
|
||||
|
||||
shrnb z31.s, z31.d, #32
|
||||
// CHECK-INST: shrnb z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x13,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 13 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
shrnt z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: shrnt z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnt z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: shrnt z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnt z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: shrnt z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnt z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: shrnt z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnt z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: shrnt z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnt z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: shrnt z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
shrnt z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: shrnt z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnt z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: shrnt z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnt z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: shrnt z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
shrnt z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: shrnt z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
shrnt z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: shrnt z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
shrnt z0.b, z0.h, #1
|
||||
// CHECK-INST: shrnt z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x14,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 14 2f 45 <unknown>
|
||||
|
||||
shrnt z31.b, z31.h, #8
|
||||
// CHECK-INST: shrnt z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x17,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 17 28 45 <unknown>
|
||||
|
||||
shrnt z0.h, z0.s, #1
|
||||
// CHECK-INST: shrnt z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x14,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 14 3f 45 <unknown>
|
||||
|
||||
shrnt z31.h, z31.s, #16
|
||||
// CHECK-INST: shrnt z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x17,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 17 30 45 <unknown>
|
||||
|
||||
shrnt z0.s, z0.d, #1
|
||||
// CHECK-INST: shrnt z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x14,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 14 7f 45 <unknown>
|
||||
|
||||
shrnt z31.s, z31.d, #32
|
||||
// CHECK-INST: shrnt z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x17,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 17 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
sqrshrnb z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqrshrnb z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnb z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqrshrnb z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnb z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqrshrnb z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnb z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqrshrnb z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnb z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqrshrnb z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnb z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqrshrnb z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
sqrshrnb z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrnb z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnb z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrnb z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnb z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrnb z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnb z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrnb z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
sqrshrnb z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqrshrnb z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
sqrshrnb z0.b, z0.h, #1
|
||||
// CHECK-INST: sqrshrnb z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x28,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 28 2f 45 <unknown>
|
||||
|
||||
sqrshrnb z31.b, z31.h, #8
|
||||
// CHECK-INST: sqrshrnb z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x2b,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 2b 28 45 <unknown>
|
||||
|
||||
sqrshrnb z0.h, z0.s, #1
|
||||
// CHECK-INST: sqrshrnb z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x28,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 28 3f 45 <unknown>
|
||||
|
||||
sqrshrnb z31.h, z31.s, #16
|
||||
// CHECK-INST: sqrshrnb z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x2b,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 2b 30 45 <unknown>
|
||||
|
||||
sqrshrnb z0.s, z0.d, #1
|
||||
// CHECK-INST: sqrshrnb z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x28,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 28 7f 45 <unknown>
|
||||
|
||||
sqrshrnb z31.s, z31.d, #32
|
||||
// CHECK-INST: sqrshrnb z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x2b,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 2b 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
sqrshrnt z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqrshrnt z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnt z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqrshrnt z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnt z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqrshrnt z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnt z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqrshrnt z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnt z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqrshrnt z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnt z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqrshrnt z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
sqrshrnt z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrnt z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnt z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrnt z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnt z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrnt z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrnt z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrnt z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
sqrshrnt z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqrshrnt z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
sqrshrnt z0.b, z0.h, #1
|
||||
// CHECK-INST: sqrshrnt z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x2c,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 2c 2f 45 <unknown>
|
||||
|
||||
sqrshrnt z31.b, z31.h, #8
|
||||
// CHECK-INST: sqrshrnt z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x2f,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 2f 28 45 <unknown>
|
||||
|
||||
sqrshrnt z0.h, z0.s, #1
|
||||
// CHECK-INST: sqrshrnt z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x2c,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 2c 3f 45 <unknown>
|
||||
|
||||
sqrshrnt z31.h, z31.s, #16
|
||||
// CHECK-INST: sqrshrnt z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x2f,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 2f 30 45 <unknown>
|
||||
|
||||
sqrshrnt z0.s, z0.d, #1
|
||||
// CHECK-INST: sqrshrnt z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x2c,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 2c 7f 45 <unknown>
|
||||
|
||||
sqrshrnt z31.s, z31.d, #32
|
||||
// CHECK-INST: sqrshrnt z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x2f,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 2f 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
sqrshrunb z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqrshrunb z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunb z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqrshrunb z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunb z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqrshrunb z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunb z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqrshrunb z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunb z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqrshrunb z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunb z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqrshrunb z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
sqrshrunb z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrunb z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunb z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrunb z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunb z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrunb z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunb z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrunb z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
sqrshrunb z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqrshrunb z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
sqrshrunb z0.b, z0.h, #1
|
||||
// CHECK-INST: sqrshrunb z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x08,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 08 2f 45 <unknown>
|
||||
|
||||
sqrshrunb z31.b, z31.h, #8
|
||||
// CHECK-INST: sqrshrunb z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x0b,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 0b 28 45 <unknown>
|
||||
|
||||
sqrshrunb z0.h, z0.s, #1
|
||||
// CHECK-INST: sqrshrunb z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x08,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 08 3f 45 <unknown>
|
||||
|
||||
sqrshrunb z31.h, z31.s, #16
|
||||
// CHECK-INST: sqrshrunb z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x0b,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 0b 30 45 <unknown>
|
||||
|
||||
sqrshrunb z0.s, z0.d, #1
|
||||
// CHECK-INST: sqrshrunb z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x08,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 08 7f 45 <unknown>
|
||||
|
||||
sqrshrunb z31.s, z31.d, #32
|
||||
// CHECK-INST: sqrshrunb z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x0b,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 0b 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
sqrshrunt z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqrshrunt z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunt z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqrshrunt z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunt z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqrshrunt z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunt z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqrshrunt z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunt z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqrshrunt z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunt z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqrshrunt z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
sqrshrunt z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrunt z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunt z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrunt z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunt z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrunt z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqrshrunt z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqrshrunt z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
sqrshrunt z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqrshrunt z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
sqrshrunt z0.b, z0.h, #1
|
||||
// CHECK-INST: sqrshrunt z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x0c,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 0c 2f 45 <unknown>
|
||||
|
||||
sqrshrunt z31.b, z31.h, #8
|
||||
// CHECK-INST: sqrshrunt z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x0f,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 0f 28 45 <unknown>
|
||||
|
||||
sqrshrunt z0.h, z0.s, #1
|
||||
// CHECK-INST: sqrshrunt z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x0c,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 0c 3f 45 <unknown>
|
||||
|
||||
sqrshrunt z31.h, z31.s, #16
|
||||
// CHECK-INST: sqrshrunt z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x0f,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 0f 30 45 <unknown>
|
||||
|
||||
sqrshrunt z0.s, z0.d, #1
|
||||
// CHECK-INST: sqrshrunt z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x0c,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 0c 7f 45 <unknown>
|
||||
|
||||
sqrshrunt z31.s, z31.d, #32
|
||||
// CHECK-INST: sqrshrunt z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x0f,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 0f 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
sqshrnb z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqshrnb z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnb z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqshrnb z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnb z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqshrnb z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnb z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqshrnb z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnb z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqshrnb z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnb z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqshrnb z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
sqshrnb z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrnb z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnb z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrnb z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnb z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrnb z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnb z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrnb z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
sqshrnb z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqshrnb z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
sqshrnb z0.b, z0.h, #1
|
||||
// CHECK-INST: sqshrnb z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x20,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 20 2f 45 <unknown>
|
||||
|
||||
sqshrnb z31.b, z31.h, #8
|
||||
// CHECK-INST: sqshrnb z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x23,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 23 28 45 <unknown>
|
||||
|
||||
sqshrnb z0.h, z0.s, #1
|
||||
// CHECK-INST: sqshrnb z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x20,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 20 3f 45 <unknown>
|
||||
|
||||
sqshrnb z31.h, z31.s, #16
|
||||
// CHECK-INST: sqshrnb z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x23,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 23 30 45 <unknown>
|
||||
|
||||
sqshrnb z0.s, z0.d, #1
|
||||
// CHECK-INST: sqshrnb z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x20,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 20 7f 45 <unknown>
|
||||
|
||||
sqshrnb z31.s, z31.d, #32
|
||||
// CHECK-INST: sqshrnb z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x23,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 23 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
sqshrnt z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqshrnt z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnt z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqshrnt z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnt z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqshrnt z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnt z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqshrnt z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnt z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqshrnt z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnt z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqshrnt z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
sqshrnt z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrnt z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnt z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrnt z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnt z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrnt z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrnt z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrnt z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
sqshrnt z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqshrnt z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
sqshrnt z0.b, z0.h, #1
|
||||
// CHECK-INST: sqshrnt z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x24,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 24 2f 45 <unknown>
|
||||
|
||||
sqshrnt z31.b, z31.h, #8
|
||||
// CHECK-INST: sqshrnt z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x27,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 27 28 45 <unknown>
|
||||
|
||||
sqshrnt z0.h, z0.s, #1
|
||||
// CHECK-INST: sqshrnt z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x24,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 24 3f 45 <unknown>
|
||||
|
||||
sqshrnt z31.h, z31.s, #16
|
||||
// CHECK-INST: sqshrnt z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x27,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 27 30 45 <unknown>
|
||||
|
||||
sqshrnt z0.s, z0.d, #1
|
||||
// CHECK-INST: sqshrnt z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x24,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 24 7f 45 <unknown>
|
||||
|
||||
sqshrnt z31.s, z31.d, #32
|
||||
// CHECK-INST: sqshrnt z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x27,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 27 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
sqshrunb z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqshrunb z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunb z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqshrunb z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunb z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqshrunb z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunb z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqshrunb z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunb z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqshrunb z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunb z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqshrunb z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
sqshrunb z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrunb z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunb z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrunb z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunb z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrunb z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunb z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrunb z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
sqshrunb z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqshrunb z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
sqshrunb z0.b, z0.h, #1
|
||||
// CHECK-INST: sqshrunb z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x00,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 00 2f 45 <unknown>
|
||||
|
||||
sqshrunb z31.b, z31.h, #8
|
||||
// CHECK-INST: sqshrunb z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x03,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 03 28 45 <unknown>
|
||||
|
||||
sqshrunb z0.h, z0.s, #1
|
||||
// CHECK-INST: sqshrunb z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x00,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 00 3f 45 <unknown>
|
||||
|
||||
sqshrunb z31.h, z31.s, #16
|
||||
// CHECK-INST: sqshrunb z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x03,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 03 30 45 <unknown>
|
||||
|
||||
sqshrunb z0.s, z0.d, #1
|
||||
// CHECK-INST: sqshrunb z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x00,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 00 7f 45 <unknown>
|
||||
|
||||
sqshrunb z31.s, z31.d, #32
|
||||
// CHECK-INST: sqshrunb z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x03,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 03 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
sqshrunt z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqshrunt z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunt z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: sqshrunt z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunt z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqshrunt z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunt z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: sqshrunt z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunt z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqshrunt z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunt z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: sqshrunt z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
sqshrunt z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrunt z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunt z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrunt z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunt z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrunt z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqshrunt z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqshrunt z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
sqshrunt z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqshrunt z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
sqshrunt z0.b, z0.h, #1
|
||||
// CHECK-INST: sqshrunt z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x04,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 04 2f 45 <unknown>
|
||||
|
||||
sqshrunt z31.b, z31.h, #8
|
||||
// CHECK-INST: sqshrunt z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x07,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 07 28 45 <unknown>
|
||||
|
||||
sqshrunt z0.h, z0.s, #1
|
||||
// CHECK-INST: sqshrunt z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x04,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 04 3f 45 <unknown>
|
||||
|
||||
sqshrunt z31.h, z31.s, #16
|
||||
// CHECK-INST: sqshrunt z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x07,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 07 30 45 <unknown>
|
||||
|
||||
sqshrunt z0.s, z0.d, #1
|
||||
// CHECK-INST: sqshrunt z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x04,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 04 7f 45 <unknown>
|
||||
|
||||
sqshrunt z31.s, z31.d, #32
|
||||
// CHECK-INST: sqshrunt z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x07,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 07 60 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
sqxtnb z0.b, z1.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtnb z0.b, z1.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtnb z0.h, z1.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtnb z0.h, z1.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtnb z0.s, z1.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtnb z0.s, z1.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtnb z0.d, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtnb z0.d, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
sqxtnb z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqxtnb z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
sqxtnb z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqxtnb z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
sqxtnb z0.b, z31.h
|
||||
// CHECK-INST: sqxtnb z0.b, z31.h
|
||||
// CHECK-ENCODING: [0xe0,0x43,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 43 28 45 <unknown>
|
||||
|
||||
sqxtnb z0.h, z31.s
|
||||
// CHECK-INST: sqxtnb z0.h, z31.s
|
||||
// CHECK-ENCODING: [0xe0,0x43,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 43 30 45 <unknown>
|
||||
|
||||
sqxtnb z0.s, z31.d
|
||||
// CHECK-INST: sqxtnb z0.s, z31.d
|
||||
// CHECK-ENCODING: [0xe0,0x43,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 43 60 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
sqxtnt z0.b, z1.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtnt z0.b, z1.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtnt z0.h, z1.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtnt z0.h, z1.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtnt z0.s, z1.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtnt z0.s, z1.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtnt z0.d, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtnt z0.d, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
sqxtnt z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqxtnt z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
sqxtnt z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqxtnt z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
sqxtnt z0.b, z31.h
|
||||
// CHECK-INST: sqxtnt z0.b, z31.h
|
||||
// CHECK-ENCODING: [0xe0,0x47,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 47 28 45 <unknown>
|
||||
|
||||
sqxtnt z0.h, z31.s
|
||||
// CHECK-INST: sqxtnt z0.h, z31.s
|
||||
// CHECK-ENCODING: [0xe0,0x47,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 47 30 45 <unknown>
|
||||
|
||||
sqxtnt z0.s, z31.d
|
||||
// CHECK-INST: sqxtnt z0.s, z31.d
|
||||
// CHECK-ENCODING: [0xe0,0x47,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 47 60 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
sqxtunb z0.b, z1.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtunb z0.b, z1.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtunb z0.h, z1.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtunb z0.h, z1.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtunb z0.s, z1.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtunb z0.s, z1.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtunb z0.d, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtunb z0.d, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
sqxtunb z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqxtunb z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
sqxtunb z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqxtunb z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
sqxtunb z0.b, z31.h
|
||||
// CHECK-INST: sqxtunb z0.b, z31.h
|
||||
// CHECK-ENCODING: [0xe0,0x53,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 53 28 45 <unknown>
|
||||
|
||||
sqxtunb z0.h, z31.s
|
||||
// CHECK-INST: sqxtunb z0.h, z31.s
|
||||
// CHECK-ENCODING: [0xe0,0x53,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 53 30 45 <unknown>
|
||||
|
||||
sqxtunb z0.s, z31.d
|
||||
// CHECK-INST: sqxtunb z0.s, z31.d
|
||||
// CHECK-ENCODING: [0xe0,0x53,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 53 60 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
sqxtunt z0.b, z1.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtunt z0.b, z1.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtunt z0.h, z1.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtunt z0.h, z1.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtunt z0.s, z1.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtunt z0.s, z1.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
sqxtunt z0.d, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: sqxtunt z0.d, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
sqxtunt z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqxtunt z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
sqxtunt z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: sqxtunt z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
sqxtunt z0.b, z31.h
|
||||
// CHECK-INST: sqxtunt z0.b, z31.h
|
||||
// CHECK-ENCODING: [0xe0,0x57,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 57 28 45 <unknown>
|
||||
|
||||
sqxtunt z0.h, z31.s
|
||||
// CHECK-INST: sqxtunt z0.h, z31.s
|
||||
// CHECK-ENCODING: [0xe0,0x57,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 57 30 45 <unknown>
|
||||
|
||||
sqxtunt z0.s, z31.d
|
||||
// CHECK-INST: sqxtunt z0.s, z31.d
|
||||
// CHECK-ENCODING: [0xe0,0x57,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 57 60 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
subhnb z0.b, z1.b, z2.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: subhnb z0.b, z1.b, z2.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
subhnb z0.h, z1.h, z2.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: subhnb z0.h, z1.h, z2.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
subhnb z0.s, z1.s, z2.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: subhnb z0.s, z1.s, z2.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
subhnb z0.d, z1.d, z2.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: subhnb z0.d, z1.d, z2.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
subhnb z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: subhnb z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
subhnb z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: subhnb z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
subhnb z0.b, z1.h, z31.h
|
||||
// CHECK-INST: subhnb z0.b, z1.h, z31.h
|
||||
// CHECK-ENCODING: [0x20,0x70,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 70 7f 45 <unknown>
|
||||
|
||||
subhnb z0.h, z1.s, z31.s
|
||||
// CHECK-INST: subhnb z0.h, z1.s, z31.s
|
||||
// CHECK-ENCODING: [0x20,0x70,0xbf,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 70 bf 45 <unknown>
|
||||
|
||||
subhnb z0.s, z1.d, z31.d
|
||||
// CHECK-INST: subhnb z0.s, z1.d, z31.d
|
||||
// CHECK-ENCODING: [0x20,0x70,0xff,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 70 ff 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
subhnt z0.b, z1.b, z2.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: subhnt z0.b, z1.b, z2.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
subhnt z0.h, z1.h, z2.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: subhnt z0.h, z1.h, z2.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
subhnt z0.s, z1.s, z2.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: subhnt z0.s, z1.s, z2.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
subhnt z0.d, z1.d, z2.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: subhnt z0.d, z1.d, z2.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
subhnt z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: subhnt z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
subhnt z0.s, z1.d, z31.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: subhnt z0.s, z1.d, z31.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
subhnt z0.b, z1.h, z31.h
|
||||
// CHECK-INST: subhnt z0.b, z1.h, z31.h
|
||||
// CHECK-ENCODING: [0x20,0x74,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 74 7f 45 <unknown>
|
||||
|
||||
subhnt z0.h, z1.s, z31.s
|
||||
// CHECK-INST: subhnt z0.h, z1.s, z31.s
|
||||
// CHECK-ENCODING: [0x20,0x74,0xbf,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 74 bf 45 <unknown>
|
||||
|
||||
subhnt z0.s, z1.d, z31.d
|
||||
// CHECK-INST: subhnt z0.s, z1.d, z31.d
|
||||
// CHECK-ENCODING: [0x20,0x74,0xff,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 20 74 ff 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
uqrshrnb z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: uqrshrnb z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnb z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: uqrshrnb z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnb z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: uqrshrnb z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnb z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: uqrshrnb z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnb z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: uqrshrnb z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnb z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: uqrshrnb z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
uqrshrnb z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqrshrnb z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnb z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqrshrnb z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnb z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqrshrnb z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnb z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqrshrnb z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
uqrshrnb z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: uqrshrnb z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
uqrshrnb z0.b, z0.h, #1
|
||||
// CHECK-INST: uqrshrnb z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x38,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 38 2f 45 <unknown>
|
||||
|
||||
uqrshrnb z31.b, z31.h, #8
|
||||
// CHECK-INST: uqrshrnb z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x3b,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 3b 28 45 <unknown>
|
||||
|
||||
uqrshrnb z0.h, z0.s, #1
|
||||
// CHECK-INST: uqrshrnb z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x38,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 38 3f 45 <unknown>
|
||||
|
||||
uqrshrnb z31.h, z31.s, #16
|
||||
// CHECK-INST: uqrshrnb z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x3b,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 3b 30 45 <unknown>
|
||||
|
||||
uqrshrnb z0.s, z0.d, #1
|
||||
// CHECK-INST: uqrshrnb z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x38,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 38 7f 45 <unknown>
|
||||
|
||||
uqrshrnb z31.s, z31.d, #32
|
||||
// CHECK-INST: uqrshrnb z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x3b,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 3b 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
uqrshrnt z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: uqrshrnt z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnt z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: uqrshrnt z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnt z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: uqrshrnt z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnt z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: uqrshrnt z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnt z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: uqrshrnt z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnt z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: uqrshrnt z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
uqrshrnt z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqrshrnt z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnt z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqrshrnt z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnt z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqrshrnt z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqrshrnt z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqrshrnt z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
uqrshrnt z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: uqrshrnt z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
uqrshrnt z0.b, z0.h, #1
|
||||
// CHECK-INST: uqrshrnt z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x3c,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 3c 2f 45 <unknown>
|
||||
|
||||
uqrshrnt z31.b, z31.h, #8
|
||||
// CHECK-INST: uqrshrnt z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x3f,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 3f 28 45 <unknown>
|
||||
|
||||
uqrshrnt z0.h, z0.s, #1
|
||||
// CHECK-INST: uqrshrnt z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x3c,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 3c 3f 45 <unknown>
|
||||
|
||||
uqrshrnt z31.h, z31.s, #16
|
||||
// CHECK-INST: uqrshrnt z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x3f,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 3f 30 45 <unknown>
|
||||
|
||||
uqrshrnt z0.s, z0.d, #1
|
||||
// CHECK-INST: uqrshrnt z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x3c,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 3c 7f 45 <unknown>
|
||||
|
||||
uqrshrnt z31.s, z31.d, #32
|
||||
// CHECK-INST: uqrshrnt z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x3f,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 3f 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
uqshrnb z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: uqshrnb z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnb z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: uqshrnb z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnb z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: uqshrnb z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnb z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: uqshrnb z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnb z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: uqshrnb z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnb z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: uqshrnb z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
uqshrnb z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqshrnb z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnb z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqshrnb z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnb z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqshrnb z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnb z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqshrnb z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
uqshrnb z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: uqshrnb z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
uqshrnb z0.b, z0.h, #1
|
||||
// CHECK-INST: uqshrnb z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x30,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 30 2f 45 <unknown>
|
||||
|
||||
uqshrnb z31.b, z31.h, #8
|
||||
// CHECK-INST: uqshrnb z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x33,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 33 28 45 <unknown>
|
||||
|
||||
uqshrnb z0.h, z0.s, #1
|
||||
// CHECK-INST: uqshrnb z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x30,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 30 3f 45 <unknown>
|
||||
|
||||
uqshrnb z31.h, z31.s, #16
|
||||
// CHECK-INST: uqshrnb z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x33,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 33 30 45 <unknown>
|
||||
|
||||
uqshrnb z0.s, z0.d, #1
|
||||
// CHECK-INST: uqshrnb z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x30,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 30 7f 45 <unknown>
|
||||
|
||||
uqshrnb z31.s, z31.d, #32
|
||||
// CHECK-INST: uqshrnb z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x33,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 33 60 45 <unknown>
|
|
@ -0,0 +1,65 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
uqshrnt z30.b, z10.h, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: uqshrnt z30.b, z10.h, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnt z18.b, z27.h, #9
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 8]
|
||||
// CHECK-NEXT: uqshrnt z18.b, z27.h, #9
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnt z26.h, z4.s, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: uqshrnt z26.h, z4.s, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnt z25.h, z10.s, #17
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 16]
|
||||
// CHECK-NEXT: uqshrnt z25.h, z10.s, #17
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnt z17.s, z0.d, #0
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: uqshrnt z17.s, z0.d, #0
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnt z0.s, z15.d, #33
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [1, 32]
|
||||
// CHECK-NEXT: uqshrnt z0.s, z15.d, #33
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Invalid element width
|
||||
|
||||
uqshrnt z0.b, z0.b, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqshrnt z0.b, z0.b, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnt z0.h, z0.h, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqshrnt z0.h, z0.h, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnt z0.s, z0.s, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqshrnt z0.s, z0.s, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqshrnt z0.d, z0.d, #1
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqshrnt z0.d, z0.d, #1
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z31, z6
|
||||
uqshrnt z31.s, z31.d, #32
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: uqshrnt z31.s, z31.d, #32
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,44 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
uqshrnt z0.b, z0.h, #1
|
||||
// CHECK-INST: uqshrnt z0.b, z0.h, #1
|
||||
// CHECK-ENCODING: [0x00,0x34,0x2f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 34 2f 45 <unknown>
|
||||
|
||||
uqshrnt z31.b, z31.h, #8
|
||||
// CHECK-INST: uqshrnt z31.b, z31.h, #8
|
||||
// CHECK-ENCODING: [0xff,0x37,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 37 28 45 <unknown>
|
||||
|
||||
uqshrnt z0.h, z0.s, #1
|
||||
// CHECK-INST: uqshrnt z0.h, z0.s, #1
|
||||
// CHECK-ENCODING: [0x00,0x34,0x3f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 34 3f 45 <unknown>
|
||||
|
||||
uqshrnt z31.h, z31.s, #16
|
||||
// CHECK-INST: uqshrnt z31.h, z31.s, #16
|
||||
// CHECK-ENCODING: [0xff,0x37,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 37 30 45 <unknown>
|
||||
|
||||
uqshrnt z0.s, z0.d, #1
|
||||
// CHECK-INST: uqshrnt z0.s, z0.d, #1
|
||||
// CHECK-ENCODING: [0x00,0x34,0x7f,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: 00 34 7f 45 <unknown>
|
||||
|
||||
uqshrnt z31.s, z31.d, #32
|
||||
// CHECK-INST: uqshrnt z31.s, z31.d, #32
|
||||
// CHECK-ENCODING: [0xff,0x37,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: ff 37 60 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
uqxtnb z0.b, z1.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqxtnb z0.b, z1.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqxtnb z0.h, z1.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqxtnb z0.h, z1.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqxtnb z0.s, z1.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqxtnb z0.s, z1.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqxtnb z0.d, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqxtnb z0.d, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
uqxtnb z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: uqxtnb z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
uqxtnb z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: uqxtnb z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
uqxtnb z0.b, z31.h
|
||||
// CHECK-INST: uqxtnb z0.b, z31.h
|
||||
// CHECK-ENCODING: [0xe0,0x4b,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 4b 28 45 <unknown>
|
||||
|
||||
uqxtnb z0.h, z31.s
|
||||
// CHECK-INST: uqxtnb z0.h, z31.s
|
||||
// CHECK-ENCODING: [0xe0,0x4b,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 4b 30 45 <unknown>
|
||||
|
||||
uqxtnb z0.s, z31.d
|
||||
// CHECK-INST: uqxtnb z0.s, z31.d
|
||||
// CHECK-ENCODING: [0xe0,0x4b,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 4b 60 45 <unknown>
|
|
@ -0,0 +1,40 @@
|
|||
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 2>&1 < %s| FileCheck %s
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------- //
|
||||
// Invalid element width
|
||||
|
||||
uqxtnt z0.b, z1.b
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqxtnt z0.b, z1.b
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqxtnt z0.h, z1.h
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqxtnt z0.h, z1.h
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqxtnt z0.s, z1.s
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqxtnt z0.s, z1.s
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
uqxtnt z0.d, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
|
||||
// CHECK-NEXT: uqxtnt z0.d, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
// --------------------------------------------------------------------------//
|
||||
// Negative tests for instructions that are incompatible with movprfx
|
||||
|
||||
movprfx z0, z7
|
||||
uqxtnt z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: uqxtnt z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
||||
|
||||
movprfx z0.s, p0/z, z7.s
|
||||
uqxtnt z0.s, z1.d
|
||||
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
|
||||
// CHECK-NEXT: uqxtnt z0.s, z1.d
|
||||
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2 < %s \
|
||||
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
|
||||
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d -mattr=+sve2 - | FileCheck %s --check-prefix=CHECK-INST
|
||||
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2 < %s \
|
||||
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
|
||||
|
||||
|
||||
uqxtnt z0.b, z31.h
|
||||
// CHECK-INST: uqxtnt z0.b, z31.h
|
||||
// CHECK-ENCODING: [0xe0,0x4f,0x28,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 4f 28 45 <unknown>
|
||||
|
||||
uqxtnt z0.h, z31.s
|
||||
// CHECK-INST: uqxtnt z0.h, z31.s
|
||||
// CHECK-ENCODING: [0xe0,0x4f,0x30,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 4f 30 45 <unknown>
|
||||
|
||||
uqxtnt z0.s, z31.d
|
||||
// CHECK-INST: uqxtnt z0.s, z31.d
|
||||
// CHECK-ENCODING: [0xe0,0x4f,0x60,0x45]
|
||||
// CHECK-ERROR: instruction requires: sve2
|
||||
// CHECK-UNKNOWN: e0 4f 60 45 <unknown>
|
Loading…
Reference in New Issue