Skip to content

Commit 4679583

Browse files
authored
[LLVM][AArch64] Add register classes for Armv9.6 assembly (#111717)
Add new register classes/operands and their encoder/decoder behaviour required for the new Armv9.6 instructions (see https://developer.arm.com/documentation/109697/2024_09/Feature-descriptions/The-Armv9-6-architecture-extension). This work is the basis ofthe 2024 Armv9.6 architecture update effort for SME. Co-authored-by: Caroline Concatto [email protected] Co-authored-by: Marian Lukac [email protected] Co-authored-by: Momchil Velikov [email protected]
1 parent 1e07c48 commit 4679583

File tree

9 files changed

+294
-79
lines changed

9 files changed

+294
-79
lines changed

llvm/lib/Target/AArch64/AArch64RegisterInfo.td

Lines changed: 121 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -923,10 +923,9 @@ class ZPRRegOp <string Suffix, AsmOperandClass C, ElementSizeEnum Size,
923923
//******************************************************************************
924924

925925
// SVE predicate register classes.
926-
class PPRClass<int firstreg, int lastreg> : RegisterClass<
927-
"AArch64",
926+
class PPRClass<int firstreg, int lastreg, int step = 1> : RegisterClass<"AArch64",
928927
[ nxv16i1, nxv8i1, nxv4i1, nxv2i1, nxv1i1 ], 16,
929-
(sequence "P%u", firstreg, lastreg)> {
928+
(sequence "P%u", firstreg, lastreg, step)> {
930929
let Size = 16;
931930
}
932931

@@ -940,6 +939,8 @@ def PPR_p8to15 : PPRClass<8, 15> {
940939
let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PNRRegClassID, 8, 8>";
941940
}
942941

942+
def PPRMul2 : PPRClass<0, 14, 2>;
943+
943944
class PPRAsmOperand <string name, string RegClass, int Width>: AsmOperandClass {
944945
let Name = "SVE" # name # "Reg";
945946
let PredicateMethod = "isSVEPredicateVectorRegOfWidth<"
@@ -1098,10 +1099,11 @@ class PPRVectorListMul<int ElementWidth, int NumRegs> : PPRVectorList<ElementWid
10981099
let DiagnosticType = "Invalid" # Name;
10991100
let PredicateMethod =
11001101
"isTypedVectorListMultiple<RegKind::SVEPredicateVector, " # NumRegs # ", 0, "
1101-
# ElementWidth # ">";
1102+
# ElementWidth #
1103+
", AArch64::PPRMul2RegClassID>";
11021104
}
11031105

1104-
let EncoderMethod = "EncodeRegAsMultipleOf<2>",
1106+
let EncoderMethod = "EncodeRegMul_MinMax<2, 0, 14>",
11051107
DecoderMethod = "DecodePPR2Mul2RegisterClass" in {
11061108
def PP_b_mul_r : RegisterOperand<PPR2Mul2, "printTypedVectorList<0,'b'>"> {
11071109
let ParserMatchClass = PPRVectorListMul<8, 2>;
@@ -1124,23 +1126,28 @@ let EncoderMethod = "EncodeRegAsMultipleOf<2>",
11241126
//******************************************************************************
11251127

11261128
// SVE vector register classes
1127-
class ZPRClass<int lastreg> : RegisterClass<"AArch64",
1129+
class ZPRClass<int firstreg, int lastreg, int step = 1> : RegisterClass<"AArch64",
11281130
[nxv16i8, nxv8i16, nxv4i32, nxv2i64,
11291131
nxv2f16, nxv4f16, nxv8f16,
11301132
nxv2bf16, nxv4bf16, nxv8bf16,
11311133
nxv2f32, nxv4f32,
11321134
nxv2f64],
1133-
128, (sequence "Z%u", 0, lastreg)> {
1135+
128, (sequence "Z%u", firstreg, lastreg, step)> {
11341136
let Size = 128;
11351137
}
11361138

1137-
def ZPR : ZPRClass<31> {
1139+
def ZPRMul2 : ZPRClass<0, 30, 2>;
1140+
def ZPRMul4 : ZPRClass<0, 28, 4>;
1141+
def ZPRMul2_Lo : ZPRClass<0, 14, 2>;
1142+
def ZPRMul2_Hi : ZPRClass<16, 30, 2>;
1143+
1144+
def ZPR : ZPRClass<0, 31> {
11381145
let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPRRegClassID, 0, 32>";
11391146
}
1140-
def ZPR_4b : ZPRClass<15> { // Restricted 4 bit SVE vector register class.
1147+
def ZPR_4b : ZPRClass<0, 15> { // Restricted 4 bit SVE vector register class.
11411148
let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPRRegClassID, 0, 16>";
11421149
}
1143-
def ZPR_3b : ZPRClass<7> { // Restricted 3 bit SVE vector register class.
1150+
def ZPR_3b : ZPRClass<0, 7> { // Restricted 3 bit SVE vector register class.
11441151
let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPRRegClassID, 0, 8>";
11451152
}
11461153

@@ -1188,6 +1195,39 @@ def ZPR4b16 : ZPRRegOp<"h", ZPRAsmOp4b16, ElementSizeH, ZPR_4b>;
11881195
def ZPR4b32 : ZPRRegOp<"s", ZPRAsmOp4b32, ElementSizeS, ZPR_4b>;
11891196
def ZPR4b64 : ZPRRegOp<"d", ZPRAsmOp4b64, ElementSizeD, ZPR_4b>;
11901197

1198+
class ZPRMul2_MinToMaxRegOp<string Suffix, AsmOperandClass C, int Min, int Max, ElementSizeEnum Width, RegisterClass RC>
1199+
: ZPRRegOp<Suffix, C, Width, RC> {
1200+
let EncoderMethod = "EncodeRegMul_MinMax<2," # Min # ", " # Max # ">";
1201+
let DecoderMethod = "DecodeZPRMul2_MinMax<" # Min # ", " # Max # ">";
1202+
}
1203+
1204+
def ZPRMul2AsmOp8_Lo : ZPRAsmOperand<"VectorB_Lo", 8, "Mul2_Lo">;
1205+
def ZPRMul2AsmOp8_Hi : ZPRAsmOperand<"VectorB_Hi", 8, "Mul2_Hi">;
1206+
def ZPRMul2AsmOp16_Lo : ZPRAsmOperand<"VectorH_Lo", 16, "Mul2_Lo">;
1207+
def ZPRMul2AsmOp16_Hi : ZPRAsmOperand<"VectorH_Hi", 16, "Mul2_Hi">;
1208+
def ZPRMul2AsmOp32_Lo : ZPRAsmOperand<"VectorS_Lo", 32, "Mul2_Lo">;
1209+
def ZPRMul2AsmOp32_Hi : ZPRAsmOperand<"VectorS_Hi", 32, "Mul2_Hi">;
1210+
def ZPRMul2AsmOp64_Lo : ZPRAsmOperand<"VectorD_Lo", 64, "Mul2_Lo">;
1211+
def ZPRMul2AsmOp64_Hi : ZPRAsmOperand<"VectorD_Hi", 64, "Mul2_Hi">;
1212+
1213+
def ZPR_K : RegisterClass<"AArch64", [untyped], 128,
1214+
(add Z20, Z21, Z22, Z23, Z28, Z29, Z30, Z31)>;
1215+
1216+
def ZK : RegisterOperand<ZPR_K, "printSVERegOp<>">{
1217+
let EncoderMethod = "EncodeZK";
1218+
let DecoderMethod = "DecodeZK";
1219+
let ParserMatchClass = ZPRAsmOperand<"Vector_20to23or28to31", 0, "_K">;
1220+
}
1221+
1222+
def ZPR8Mul2_Lo : ZPRMul2_MinToMaxRegOp<"b", ZPRMul2AsmOp8_Lo, 0, 14, ElementSizeB, ZPRMul2_Lo>;
1223+
def ZPR8Mul2_Hi : ZPRMul2_MinToMaxRegOp<"b", ZPRMul2AsmOp8_Hi, 16, 30, ElementSizeB, ZPRMul2_Hi>;
1224+
def ZPR16Mul2_Lo : ZPRMul2_MinToMaxRegOp<"h", ZPRMul2AsmOp16_Lo, 0, 14, ElementSizeH, ZPRMul2_Lo>;
1225+
def ZPR16Mul2_Hi : ZPRMul2_MinToMaxRegOp<"h", ZPRMul2AsmOp16_Hi, 16, 30, ElementSizeH, ZPRMul2_Hi>;
1226+
def ZPR32Mul2_Lo : ZPRMul2_MinToMaxRegOp<"s", ZPRMul2AsmOp32_Lo, 0, 14, ElementSizeS, ZPRMul2_Lo>;
1227+
def ZPR32Mul2_Hi : ZPRMul2_MinToMaxRegOp<"s", ZPRMul2AsmOp32_Hi, 16, 30, ElementSizeS, ZPRMul2_Hi>;
1228+
def ZPR64Mul2_Lo : ZPRMul2_MinToMaxRegOp<"d", ZPRMul2AsmOp64_Lo, 0, 14, ElementSizeD, ZPRMul2_Lo>;
1229+
def ZPR64Mul2_Hi : ZPRMul2_MinToMaxRegOp<"d", ZPRMul2AsmOp64_Hi, 16, 30, ElementSizeD, ZPRMul2_Hi>;
1230+
11911231
class FPRasZPR<int Width> : AsmOperandClass{
11921232
let Name = "FPR" # Width # "asZPR";
11931233
let PredicateMethod = "isFPRasZPR<AArch64::FPR" # Width # "RegClassID>";
@@ -1327,64 +1367,117 @@ def ZPR4Mul4 : RegisterClass<"AArch64", [untyped], 128, (add (decimate ZSeqQuads
13271367
let Size = 512;
13281368
}
13291369

1330-
class ZPRVectorListMul<int ElementWidth, int NumRegs> : ZPRVectorList<ElementWidth, NumRegs> {
1331-
let Name = "SVEVectorListMul" # NumRegs # "x" # ElementWidth;
1370+
class ZPRVectorListMul<int ElementWidth, int NumRegs, string RegClassSuffix = "">
1371+
: ZPRVectorList<ElementWidth, NumRegs> {
1372+
let Name = "SVEVectorList" # NumRegs # "x" # ElementWidth # RegClassSuffix;
13321373
let DiagnosticType = "Invalid" # Name;
13331374
let PredicateMethod =
1334-
"isTypedVectorListMultiple<RegKind::SVEDataVector, " # NumRegs # ", 0, "
1335-
# ElementWidth # ">";
1375+
"isTypedVectorListMultiple<RegKind::SVEDataVector, "
1376+
# NumRegs # ", 0, "
1377+
# ElementWidth # ", "
1378+
# "AArch64::ZPR" # RegClassSuffix # "RegClassID" # ">";
13361379
}
13371380

1338-
let EncoderMethod = "EncodeRegAsMultipleOf<2>",
1339-
DecoderMethod = "DecodeZPR2Mul2RegisterClass" in {
1381+
let EncoderMethod = "EncodeRegMul_MinMax<2, 0, 30>",
1382+
DecoderMethod = "DecodeZPR2Mul2RegisterClass<0, 30>" in {
13401383
def ZZ_mul_r : RegisterOperand<ZPR2Mul2, "printTypedVectorList<0,0>"> {
1341-
let ParserMatchClass = ZPRVectorListMul<0, 2>;
1384+
let ParserMatchClass = ZPRVectorListMul<0, 2, "Mul2">;
13421385
}
13431386

13441387
def ZZ_b_mul_r : RegisterOperand<ZPR2Mul2, "printTypedVectorList<0,'b'>"> {
1345-
let ParserMatchClass = ZPRVectorListMul<8, 2>;
1388+
let ParserMatchClass = ZPRVectorListMul<8, 2, "Mul2">;
13461389
}
13471390

13481391
def ZZ_h_mul_r : RegisterOperand<ZPR2Mul2, "printTypedVectorList<0,'h'>"> {
1349-
let ParserMatchClass = ZPRVectorListMul<16, 2>;
1392+
let ParserMatchClass = ZPRVectorListMul<16, 2, "Mul2">;
13501393
}
13511394

13521395
def ZZ_s_mul_r : RegisterOperand<ZPR2Mul2, "printTypedVectorList<0,'s'>"> {
1353-
let ParserMatchClass = ZPRVectorListMul<32, 2>;
1396+
let ParserMatchClass = ZPRVectorListMul<32, 2, "Mul2">;
13541397
}
13551398

13561399
def ZZ_d_mul_r : RegisterOperand<ZPR2Mul2, "printTypedVectorList<0,'d'>"> {
1357-
let ParserMatchClass = ZPRVectorListMul<64, 2>;
1400+
let ParserMatchClass = ZPRVectorListMul<64, 2, "Mul2">;
13581401
}
13591402

13601403
def ZZ_q_mul_r : RegisterOperand<ZPR2Mul2, "printTypedVectorList<0,'q'>"> {
1361-
let ParserMatchClass = ZPRVectorListMul<128, 2>;
1404+
let ParserMatchClass = ZPRVectorListMul<128, 2, "Mul2">;
13621405
}
13631406
} // end let EncoderMethod/DecoderMethod
13641407

1365-
let EncoderMethod = "EncodeRegAsMultipleOf<4>",
1408+
let EncoderMethod = "EncodeRegMul_MinMax<4, 0, 28>",
13661409
DecoderMethod = "DecodeZPR4Mul4RegisterClass" in {
13671410
def ZZZZ_b_mul_r : RegisterOperand<ZPR4Mul4, "printTypedVectorList<0,'b'>"> {
1368-
let ParserMatchClass = ZPRVectorListMul<8, 4>;
1411+
let ParserMatchClass = ZPRVectorListMul<8, 4, "Mul4">;
13691412
}
13701413

13711414
def ZZZZ_h_mul_r : RegisterOperand<ZPR4Mul4, "printTypedVectorList<0,'h'>"> {
1372-
let ParserMatchClass = ZPRVectorListMul<16, 4>;
1415+
let ParserMatchClass = ZPRVectorListMul<16, 4, "Mul4">;
13731416
}
13741417

13751418
def ZZZZ_s_mul_r : RegisterOperand<ZPR4Mul4, "printTypedVectorList<0,'s'>"> {
1376-
let ParserMatchClass = ZPRVectorListMul<32, 4>;
1419+
let ParserMatchClass = ZPRVectorListMul<32, 4, "Mul4">;
13771420
}
13781421

13791422
def ZZZZ_d_mul_r : RegisterOperand<ZPR4Mul4, "printTypedVectorList<0,'d'>"> {
1380-
let ParserMatchClass = ZPRVectorListMul<64, 4>;
1423+
let ParserMatchClass = ZPRVectorListMul<64, 4, "Mul4">;
13811424
}
13821425

13831426
def ZZZZ_q_mul_r : RegisterOperand<ZPR4Mul4, "printTypedVectorList<0,'q'>"> {
1384-
let ParserMatchClass = ZPRVectorListMul<128, 4>;
1427+
let ParserMatchClass = ZPRVectorListMul<128, 4, "Mul4">;
13851428
}
13861429
} // end let EncoderMethod/DecoderMethod
13871430

1431+
// Pairs of consecutive ZPR, starting with an even register, split into
1432+
// Lo=0-14 and Hi=16-30.
1433+
def ZPR2Mul2_Lo : RegisterClass<"AArch64", [untyped], 128,
1434+
(trunc (decimate ZSeqPairs, 2), 8)> {
1435+
let Size = 256;
1436+
}
1437+
1438+
def ZPR2Mul2_Hi : RegisterClass<"AArch64", [untyped], 128,
1439+
(trunc (rotr (decimate ZSeqPairs, 2), 8), 8)> {
1440+
let Size = 256;
1441+
}
1442+
1443+
let EncoderMethod = "EncodeRegMul_MinMax<2, 0, 14>",
1444+
DecoderMethod = "DecodeZPR2Mul2RegisterClass<0, 16>" in {
1445+
def ZZ_b_mul_r_Lo : RegisterOperand<ZPR2Mul2_Lo, "printTypedVectorList<0,'b'>"> {
1446+
let ParserMatchClass = ZPRVectorListMul<8, 2, "Mul2_Lo">;
1447+
}
1448+
1449+
def ZZ_h_mul_r_Lo : RegisterOperand<ZPR2Mul2_Lo, "printTypedVectorList<0,'h'>"> {
1450+
let ParserMatchClass = ZPRVectorListMul<16, 2, "Mul2_Lo">;
1451+
}
1452+
1453+
def ZZ_s_mul_r_Lo : RegisterOperand<ZPR2Mul2_Lo, "printTypedVectorList<0,'s'>"> {
1454+
let ParserMatchClass = ZPRVectorListMul<32, 2, "Mul2_Lo">;
1455+
}
1456+
1457+
def ZZ_d_mul_r_Lo : RegisterOperand<ZPR2Mul2_Lo, "printTypedVectorList<0,'d'>"> {
1458+
let ParserMatchClass = ZPRVectorListMul<64, 2, "Mul2_Lo">;
1459+
}
1460+
}
1461+
1462+
let EncoderMethod = "EncodeRegMul_MinMax<2, 16, 30>",
1463+
DecoderMethod = "DecodeZPR2Mul2RegisterClass<16, 31>" in {
1464+
def ZZ_b_mul_r_Hi : RegisterOperand<ZPR2Mul2_Hi, "printTypedVectorList<0,'b'>"> {
1465+
let ParserMatchClass = ZPRVectorListMul<8, 2, "Mul2_Hi">;
1466+
}
1467+
1468+
def ZZ_h_mul_r_Hi : RegisterOperand<ZPR2Mul2_Hi, "printTypedVectorList<0,'h'>"> {
1469+
let ParserMatchClass = ZPRVectorListMul<16, 2, "Mul2_Hi">;
1470+
}
1471+
1472+
def ZZ_s_mul_r_Hi : RegisterOperand<ZPR2Mul2_Hi, "printTypedVectorList<0,'s'>"> {
1473+
let ParserMatchClass = ZPRVectorListMul<32, 2, "Mul2_Hi">;
1474+
}
1475+
1476+
def ZZ_d_mul_r_Hi : RegisterOperand<ZPR2Mul2_Hi, "printTypedVectorList<0,'d'>"> {
1477+
let ParserMatchClass = ZPRVectorListMul<64, 2, "Mul2_Hi">;
1478+
}
1479+
} // end let EncoderMethod/DecoderMethod
1480+
13881481
// SME2 strided multi-vector operands
13891482

13901483
// ZStridedPairs

llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp

Lines changed: 86 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1262,6 +1262,9 @@ class AArch64Operand : public MCParsedAsmOperand {
12621262
case AArch64::ZPRRegClassID:
12631263
case AArch64::ZPR_3bRegClassID:
12641264
case AArch64::ZPR_4bRegClassID:
1265+
case AArch64::ZPRMul2_LoRegClassID:
1266+
case AArch64::ZPRMul2_HiRegClassID:
1267+
case AArch64::ZPR_KRegClassID:
12651268
RK = RegKind::SVEDataVector;
12661269
break;
12671270
case AArch64::PPRRegClassID:
@@ -1442,13 +1445,13 @@ class AArch64Operand : public MCParsedAsmOperand {
14421445
}
14431446

14441447
template <RegKind VectorKind, unsigned NumRegs, unsigned NumElements,
1445-
unsigned ElementWidth>
1448+
unsigned ElementWidth, unsigned RegClass>
14461449
DiagnosticPredicate isTypedVectorListMultiple() const {
14471450
bool Res =
14481451
isTypedVectorList<VectorKind, NumRegs, NumElements, ElementWidth>();
14491452
if (!Res)
14501453
return DiagnosticPredicateTy::NoMatch;
1451-
if (((VectorList.RegNum - AArch64::Z0) % NumRegs) != 0)
1454+
if (!AArch64MCRegisterClasses[RegClass].contains(VectorList.RegNum))
14521455
return DiagnosticPredicateTy::NearMatch;
14531456
return DiagnosticPredicateTy::Match;
14541457
}
@@ -6092,6 +6095,33 @@ bool AArch64AsmParser::showMatchError(SMLoc Loc, unsigned ErrCode,
60926095
return Error(Loc, "Invalid restricted vector register, expected z0.s..z15.s");
60936096
case Match_InvalidZPR_4b64:
60946097
return Error(Loc, "Invalid restricted vector register, expected z0.d..z15.d");
6098+
case Match_InvalidZPRMul2_Lo8:
6099+
return Error(Loc, "Invalid restricted vector register, expected even "
6100+
"register in z0.b..z14.b");
6101+
case Match_InvalidZPRMul2_Hi8:
6102+
return Error(Loc, "Invalid restricted vector register, expected even "
6103+
"register in z16.b..z30.b");
6104+
case Match_InvalidZPRMul2_Lo16:
6105+
return Error(Loc, "Invalid restricted vector register, expected even "
6106+
"register in z0.h..z14.h");
6107+
case Match_InvalidZPRMul2_Hi16:
6108+
return Error(Loc, "Invalid restricted vector register, expected even "
6109+
"register in z16.h..z30.h");
6110+
case Match_InvalidZPRMul2_Lo32:
6111+
return Error(Loc, "Invalid restricted vector register, expected even "
6112+
"register in z0.s..z14.s");
6113+
case Match_InvalidZPRMul2_Hi32:
6114+
return Error(Loc, "Invalid restricted vector register, expected even "
6115+
"register in z16.s..z30.s");
6116+
case Match_InvalidZPRMul2_Lo64:
6117+
return Error(Loc, "Invalid restricted vector register, expected even "
6118+
"register in z0.d..z14.d");
6119+
case Match_InvalidZPRMul2_Hi64:
6120+
return Error(Loc, "Invalid restricted vector register, expected even "
6121+
"register in z16.d..z30.d");
6122+
case Match_InvalidZPR_K0:
6123+
return Error(Loc, "invalid restricted vector register, expected register "
6124+
"in z20..z23 or z28..z31");
60956125
case Match_InvalidSVEPattern:
60966126
return Error(Loc, "invalid predicate pattern");
60976127
case Match_InvalidSVEPPRorPNRAnyReg:
@@ -6171,19 +6201,36 @@ bool AArch64AsmParser::showMatchError(SMLoc Loc, unsigned ErrCode,
61716201
return Error(Loc, "operand must be a register in range [w12, w15]");
61726202
case Match_InvalidMatrixIndexGPR32_8_11:
61736203
return Error(Loc, "operand must be a register in range [w8, w11]");
6174-
case Match_InvalidSVEVectorListMul2x8:
6175-
case Match_InvalidSVEVectorListMul2x16:
6176-
case Match_InvalidSVEVectorListMul2x32:
6177-
case Match_InvalidSVEVectorListMul2x64:
6178-
case Match_InvalidSVEVectorListMul2x128:
6204+
case Match_InvalidSVEVectorList2x8Mul2:
6205+
case Match_InvalidSVEVectorList2x16Mul2:
6206+
case Match_InvalidSVEVectorList2x32Mul2:
6207+
case Match_InvalidSVEVectorList2x64Mul2:
6208+
case Match_InvalidSVEVectorList2x128Mul2:
61796209
return Error(Loc, "Invalid vector list, expected list with 2 consecutive "
61806210
"SVE vectors, where the first vector is a multiple of 2 "
61816211
"and with matching element types");
6182-
case Match_InvalidSVEVectorListMul4x8:
6183-
case Match_InvalidSVEVectorListMul4x16:
6184-
case Match_InvalidSVEVectorListMul4x32:
6185-
case Match_InvalidSVEVectorListMul4x64:
6186-
case Match_InvalidSVEVectorListMul4x128:
6212+
case Match_InvalidSVEVectorList2x8Mul2_Lo:
6213+
case Match_InvalidSVEVectorList2x16Mul2_Lo:
6214+
case Match_InvalidSVEVectorList2x32Mul2_Lo:
6215+
case Match_InvalidSVEVectorList2x64Mul2_Lo:
6216+
return Error(Loc, "Invalid vector list, expected list with 2 consecutive "
6217+
"SVE vectors in the range z0-z14, where the first vector "
6218+
"is a multiple of 2 "
6219+
"and with matching element types");
6220+
case Match_InvalidSVEVectorList2x8Mul2_Hi:
6221+
case Match_InvalidSVEVectorList2x16Mul2_Hi:
6222+
case Match_InvalidSVEVectorList2x32Mul2_Hi:
6223+
case Match_InvalidSVEVectorList2x64Mul2_Hi:
6224+
return Error(Loc,
6225+
"Invalid vector list, expected list with 2 consecutive "
6226+
"SVE vectors in the range z16-z30, where the first vector "
6227+
"is a multiple of 2 "
6228+
"and with matching element types");
6229+
case Match_InvalidSVEVectorList4x8Mul4:
6230+
case Match_InvalidSVEVectorList4x16Mul4:
6231+
case Match_InvalidSVEVectorList4x32Mul4:
6232+
case Match_InvalidSVEVectorList4x64Mul4:
6233+
case Match_InvalidSVEVectorList4x128Mul4:
61876234
return Error(Loc, "Invalid vector list, expected list with 4 consecutive "
61886235
"SVE vectors, where the first vector is a multiple of 4 "
61896236
"and with matching element types");
@@ -6776,16 +6823,33 @@ bool AArch64AsmParser::matchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
67766823
case Match_InvalidMatrixIndexGPR32_12_15:
67776824
case Match_InvalidMatrixIndexGPR32_8_11:
67786825
case Match_InvalidLookupTable:
6779-
case Match_InvalidSVEVectorListMul2x8:
6780-
case Match_InvalidSVEVectorListMul2x16:
6781-
case Match_InvalidSVEVectorListMul2x32:
6782-
case Match_InvalidSVEVectorListMul2x64:
6783-
case Match_InvalidSVEVectorListMul2x128:
6784-
case Match_InvalidSVEVectorListMul4x8:
6785-
case Match_InvalidSVEVectorListMul4x16:
6786-
case Match_InvalidSVEVectorListMul4x32:
6787-
case Match_InvalidSVEVectorListMul4x64:
6788-
case Match_InvalidSVEVectorListMul4x128:
6826+
case Match_InvalidZPRMul2_Lo8:
6827+
case Match_InvalidZPRMul2_Hi8:
6828+
case Match_InvalidZPRMul2_Lo16:
6829+
case Match_InvalidZPRMul2_Hi16:
6830+
case Match_InvalidZPRMul2_Lo32:
6831+
case Match_InvalidZPRMul2_Hi32:
6832+
case Match_InvalidZPRMul2_Lo64:
6833+
case Match_InvalidZPRMul2_Hi64:
6834+
case Match_InvalidZPR_K0:
6835+
case Match_InvalidSVEVectorList2x8Mul2:
6836+
case Match_InvalidSVEVectorList2x16Mul2:
6837+
case Match_InvalidSVEVectorList2x32Mul2:
6838+
case Match_InvalidSVEVectorList2x64Mul2:
6839+
case Match_InvalidSVEVectorList2x128Mul2:
6840+
case Match_InvalidSVEVectorList4x8Mul4:
6841+
case Match_InvalidSVEVectorList4x16Mul4:
6842+
case Match_InvalidSVEVectorList4x32Mul4:
6843+
case Match_InvalidSVEVectorList4x64Mul4:
6844+
case Match_InvalidSVEVectorList4x128Mul4:
6845+
case Match_InvalidSVEVectorList2x8Mul2_Lo:
6846+
case Match_InvalidSVEVectorList2x16Mul2_Lo:
6847+
case Match_InvalidSVEVectorList2x32Mul2_Lo:
6848+
case Match_InvalidSVEVectorList2x64Mul2_Lo:
6849+
case Match_InvalidSVEVectorList2x8Mul2_Hi:
6850+
case Match_InvalidSVEVectorList2x16Mul2_Hi:
6851+
case Match_InvalidSVEVectorList2x32Mul2_Hi:
6852+
case Match_InvalidSVEVectorList2x64Mul2_Hi:
67896853
case Match_InvalidSVEVectorListStrided2x8:
67906854
case Match_InvalidSVEVectorListStrided2x16:
67916855
case Match_InvalidSVEVectorListStrided2x32:

0 commit comments

Comments
 (0)