@@ -160,25 +160,30 @@ def GPR64common : RegisterClass<"AArch64", [i64], 64,
160
160
(add (sequence "X%u", 0, 28), FP, LR)> {
161
161
let AltOrders = [(rotl GPR64common, 8)];
162
162
let AltOrderSelect = [{ return 1; }];
163
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::GPR64commonRegClassID, 0, 31>";
163
164
}
164
165
// GPR register classes which exclude SP/WSP.
165
166
def GPR32 : RegisterClass<"AArch64", [i32], 32, (add GPR32common, WZR)> {
166
167
let AltOrders = [(rotl GPR32, 8)];
167
168
let AltOrderSelect = [{ return 1; }];
169
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::GPR32RegClassID, 0, 32>";
168
170
}
169
171
def GPR64 : RegisterClass<"AArch64", [i64], 64, (add GPR64common, XZR)> {
170
172
let AltOrders = [(rotl GPR64, 8)];
171
173
let AltOrderSelect = [{ return 1; }];
174
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::GPR64RegClassID, 0, 32>";
172
175
}
173
176
174
177
// GPR register classes which include SP/WSP.
175
178
def GPR32sp : RegisterClass<"AArch64", [i32], 32, (add GPR32common, WSP)> {
176
179
let AltOrders = [(rotl GPR32sp, 8)];
177
180
let AltOrderSelect = [{ return 1; }];
181
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::GPR32spRegClassID, 0, 32>";
178
182
}
179
183
def GPR64sp : RegisterClass<"AArch64", [i64], 64, (add GPR64common, SP)> {
180
184
let AltOrders = [(rotl GPR64sp, 8)];
181
185
let AltOrderSelect = [{ return 1; }];
186
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::GPR64spRegClassID,0, 32>";
182
187
}
183
188
184
189
def GPR32sponly : RegisterClass<"AArch64", [i32], 32, (add WSP)>;
@@ -446,18 +451,24 @@ def Q31 : AArch64Reg<31, "q31", [D31], ["v31", ""]>, DwarfRegAlias<B31>;
446
451
447
452
def FPR8 : RegisterClass<"AArch64", [i8], 8, (sequence "B%u", 0, 31)> {
448
453
let Size = 8;
454
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR8RegClassID, 0, 32>";
449
455
}
450
456
def FPR16 : RegisterClass<"AArch64", [f16, bf16, i16], 16, (sequence "H%u", 0, 31)> {
451
457
let Size = 16;
458
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR16RegClassID, 0, 32>";
452
459
}
453
460
454
461
def FPR16_lo : RegisterClass<"AArch64", [f16], 16, (trunc FPR16, 16)> {
455
462
let Size = 16;
456
463
}
457
- def FPR32 : RegisterClass<"AArch64", [f32, i32], 32,(sequence "S%u", 0, 31)>;
464
+ def FPR32 : RegisterClass<"AArch64", [f32, i32], 32,(sequence "S%u", 0, 31)> {
465
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR32RegClassID, 0, 32>";
466
+ }
458
467
def FPR64 : RegisterClass<"AArch64", [f64, i64, v2f32, v1f64, v8i8, v4i16, v2i32,
459
468
v1i64, v4f16, v4bf16],
460
- 64, (sequence "D%u", 0, 31)>;
469
+ 64, (sequence "D%u", 0, 31)> {
470
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR64RegClassID, 0, 32>";
471
+ }
461
472
def FPR64_lo : RegisterClass<"AArch64",
462
473
[v8i8, v4i16, v2i32, v1i64, v4f16, v4bf16, v2f32,
463
474
v1f64],
@@ -469,21 +480,27 @@ def FPR64_lo : RegisterClass<"AArch64",
469
480
def FPR128 : RegisterClass<"AArch64",
470
481
[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64, f128,
471
482
v8f16, v8bf16],
472
- 128, (sequence "Q%u", 0, 31)>;
483
+ 128, (sequence "Q%u", 0, 31)> {
484
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR128RegClassID, 0, 32>";
485
+ }
473
486
474
487
// The lower 16 vector registers. Some instructions can only take registers
475
488
// in this range.
476
489
def FPR128_lo : RegisterClass<"AArch64",
477
490
[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64, v8f16,
478
491
v8bf16],
479
- 128, (trunc FPR128, 16)>;
492
+ 128, (trunc FPR128, 16)> {
493
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR128RegClassID, 0, 16>";
494
+ }
480
495
481
496
// The lower 8 vector registers. Some instructions can only take registers
482
497
// in this range.
483
498
def FPR128_0to7 : RegisterClass<"AArch64",
484
499
[v16i8, v8i16, v4i32, v2i64, v4f32, v2f64, v8f16,
485
500
v8bf16],
486
- 128, (trunc FPR128, 8)>;
501
+ 128, (trunc FPR128, 8)> {
502
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR128RegClassID, 0, 8>";
503
+ }
487
504
488
505
// Pairs, triples, and quads of 64-bit vector registers.
489
506
def DSeqPairs : RegisterTuples<[dsub0, dsub1], [(rotl FPR64, 0), (rotl FPR64, 1)]>;
@@ -495,12 +512,15 @@ def DSeqQuads : RegisterTuples<[dsub0, dsub1, dsub2, dsub3],
495
512
(rotl FPR64, 2), (rotl FPR64, 3)]>;
496
513
def DD : RegisterClass<"AArch64", [untyped], 64, (add DSeqPairs)> {
497
514
let Size = 128;
515
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::DDRegClassID, 0, 32>";
498
516
}
499
517
def DDD : RegisterClass<"AArch64", [untyped], 64, (add DSeqTriples)> {
500
518
let Size = 192;
519
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::DDDRegClassID, 0, 32>";
501
520
}
502
521
def DDDD : RegisterClass<"AArch64", [untyped], 64, (add DSeqQuads)> {
503
522
let Size = 256;
523
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::DDDDRegClassID, 0, 32>";
504
524
}
505
525
506
526
// Pairs, triples, and quads of 128-bit vector registers.
@@ -513,12 +533,15 @@ def QSeqQuads : RegisterTuples<[qsub0, qsub1, qsub2, qsub3],
513
533
(rotl FPR128, 2), (rotl FPR128, 3)]>;
514
534
def QQ : RegisterClass<"AArch64", [untyped], 128, (add QSeqPairs)> {
515
535
let Size = 256;
536
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::QQRegClassID, 0, 32>";
516
537
}
517
538
def QQQ : RegisterClass<"AArch64", [untyped], 128, (add QSeqTriples)> {
518
539
let Size = 384;
540
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::QQQRegClassID, 0, 32>";
519
541
}
520
542
def QQQQ : RegisterClass<"AArch64", [untyped], 128, (add QSeqQuads)> {
521
543
let Size = 512;
544
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::QQQQRegClassID, 0, 32>";
522
545
}
523
546
524
547
@@ -904,9 +927,15 @@ class PPRClass<int firstreg, int lastreg> : RegisterClass<
904
927
let Size = 16;
905
928
}
906
929
907
- def PPR : PPRClass<0, 15>;
908
- def PPR_3b : PPRClass<0, 7>; // Restricted 3 bit SVE predicate register class.
909
- def PPR_p8to15 : PPRClass<8, 15>;
930
+ def PPR : PPRClass<0, 15> {
931
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PPRRegClassID, 0, 16>";
932
+ }
933
+ def PPR_3b : PPRClass<0, 7> { // Restricted 3 bit SVE predicate register class.
934
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PPRRegClassID, 0, 8>";
935
+ }
936
+ def PPR_p8to15 : PPRClass<8, 15> {
937
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PNRRegClassID, 8, 8>";
938
+ }
910
939
911
940
class PPRAsmOperand <string name, string RegClass, int Width>: AsmOperandClass {
912
941
let Name = "SVE" # name # "Reg";
@@ -941,7 +970,9 @@ class PNRClass<int firstreg, int lastreg> : RegisterClass<
941
970
let Size = 16;
942
971
}
943
972
944
- def PNR : PNRClass<0, 15>;
973
+ def PNR : PNRClass<0, 15> {
974
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PNRRegClassID, 0, 16>";
975
+ }
945
976
def PNR_3b : PNRClass<0, 7>;
946
977
def PNR_p8to15 : PNRClass<8, 15>;
947
978
@@ -982,7 +1013,7 @@ class PNRP8to15RegOp<string Suffix, AsmOperandClass C, int Width, RegisterClass
982
1013
: SVERegOp<Suffix, C, ElementSizeNone, RC> {
983
1014
let PrintMethod = "printPredicateAsCounter<" # Width # ">";
984
1015
let EncoderMethod = "EncodePNR_p8to15";
985
- let DecoderMethod = "DecodePNR_p8to15RegisterClass ";
1016
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PNRRegClassID, 8, 8> ";
986
1017
}
987
1018
988
1019
def PNRAny_p8to15 : PNRP8to15RegOp<"", PNRAsmAny_p8to15, 0, PNR_p8to15>;
@@ -1013,7 +1044,9 @@ class PPRorPNRAsmOperand<string name, string RegClass, int Width>: AsmOperandCla
1013
1044
let ParserMethod = "tryParseSVEPredicateOrPredicateAsCounterVector";
1014
1045
}
1015
1046
1016
- def PPRorPNR : PPRorPNRClass;
1047
+ def PPRorPNR : PPRorPNRClass {
1048
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PPRorPNRRegClassID, 0, 16>";
1049
+ }
1017
1050
def PPRorPNRAsmOp8 : PPRorPNRAsmOperand<"PPRorPNRB", "PPRorPNR", 8>;
1018
1051
def PPRorPNRAsmOpAny : PPRorPNRAsmOperand<"PPRorPNRAny", "PPRorPNR", 0>;
1019
1052
def PPRorPNRAny : PPRRegOp<"", PPRorPNRAsmOpAny, ElementSizeNone, PPRorPNR>;
@@ -1024,6 +1057,7 @@ def PSeqPairs : RegisterTuples<[psub0, psub1], [(rotl PPR, 0), (rotl PPR, 1)]>;
1024
1057
1025
1058
def PPR2 : RegisterClass<"AArch64", [untyped], 16, (add PSeqPairs)> {
1026
1059
let Size = 32;
1060
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PPR2RegClassID, 0, 16>";
1027
1061
}
1028
1062
1029
1063
class PPRVectorList<int ElementWidth, int NumRegs> : AsmOperandClass {
@@ -1097,9 +1131,15 @@ class ZPRClass<int lastreg> : RegisterClass<"AArch64",
1097
1131
let Size = 128;
1098
1132
}
1099
1133
1100
- def ZPR : ZPRClass<31>;
1101
- def ZPR_4b : ZPRClass<15>; // Restricted 4 bit SVE vector register class.
1102
- def ZPR_3b : ZPRClass<7>; // Restricted 3 bit SVE vector register class.
1134
+ def ZPR : ZPRClass<31> {
1135
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPRRegClassID, 0, 32>";
1136
+ }
1137
+ def ZPR_4b : ZPRClass<15> { // Restricted 4 bit SVE vector register class.
1138
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPRRegClassID, 0, 16>";
1139
+ }
1140
+ def ZPR_3b : ZPRClass<7> { // Restricted 3 bit SVE vector register class.
1141
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPRRegClassID, 0, 8>";
1142
+ }
1103
1143
1104
1144
class ZPRAsmOperand<string name, int Width, string RegClassSuffix = "">
1105
1145
: AsmOperandClass {
@@ -1176,12 +1216,15 @@ def ZSeqQuads : RegisterTuples<[zsub0, zsub1, zsub2, zsub3], [(rotl ZPR, 0), (
1176
1216
1177
1217
def ZPR2 : RegisterClass<"AArch64", [untyped], 128, (add ZSeqPairs)> {
1178
1218
let Size = 256;
1219
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR2RegClassID, 0, 32>";
1179
1220
}
1180
1221
def ZPR3 : RegisterClass<"AArch64", [untyped], 128, (add ZSeqTriples)> {
1181
1222
let Size = 384;
1223
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR3RegClassID, 0, 32>";
1182
1224
}
1183
1225
def ZPR4 : RegisterClass<"AArch64", [untyped], 128, (add ZSeqQuads)> {
1184
1226
let Size = 512;
1227
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR4RegClassID, 0, 32>";
1185
1228
}
1186
1229
1187
1230
class ZPRVectorList<int ElementWidth, int NumRegs> : AsmOperandClass {
@@ -1379,10 +1422,12 @@ def ZStridedQuadsHi : RegisterTuples<[zsub0, zsub1, zsub2, zsub3], [
1379
1422
def ZPR2Strided : RegisterClass<"AArch64", [untyped], 128,
1380
1423
(add ZStridedPairsLo, ZStridedPairsHi)> {
1381
1424
let Size = 256;
1425
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR2StridedRegClassID, 0, 16>";
1382
1426
}
1383
1427
def ZPR4Strided : RegisterClass<"AArch64", [untyped], 128,
1384
1428
(add ZStridedQuadsLo, ZStridedQuadsHi)> {
1385
1429
let Size = 512;
1430
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR4StridedRegClassID, 0, 8>";
1386
1431
}
1387
1432
1388
1433
def ZPR2StridedOrContiguous : RegisterClass<"AArch64", [untyped], 128,
@@ -1401,7 +1446,7 @@ class ZPRVectorListStrided<int ElementWidth, int NumRegs, int Stride>
1401
1446
}
1402
1447
1403
1448
let EncoderMethod = "EncodeZPR2StridedRegisterClass",
1404
- DecoderMethod = "DecodeZPR2StridedRegisterClass " in {
1449
+ DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR2StridedRegClassID, 0, 16> " in {
1405
1450
def ZZ_b_strided
1406
1451
: RegisterOperand<ZPR2Strided, "printTypedVectorList<0, 'b'>"> {
1407
1452
let ParserMatchClass = ZPRVectorListStrided<8, 2, 8>;
@@ -1439,7 +1484,7 @@ def ZPR4StridedOrContiguous : RegisterClass<"AArch64", [untyped], 128,
1439
1484
}
1440
1485
1441
1486
let EncoderMethod = "EncodeZPR4StridedRegisterClass",
1442
- DecoderMethod = "DecodeZPR4StridedRegisterClass " in {
1487
+ DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR4StridedRegClassID, 0, 16> " in {
1443
1488
def ZZZZ_b_strided
1444
1489
: RegisterOperand<ZPR4Strided, "printTypedVectorList<0,'b'>"> {
1445
1490
let ParserMatchClass = ZPRVectorListStrided<8, 4, 4>;
@@ -1774,9 +1819,11 @@ def MatrixTileList : MatrixTileListOperand<>;
1774
1819
1775
1820
def MatrixIndexGPR32_8_11 : RegisterClass<"AArch64", [i32], 32, (sequence "W%u", 8, 11)> {
1776
1821
let DiagnosticType = "InvalidMatrixIndexGPR32_8_11";
1822
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::MatrixIndexGPR32_8_11RegClassID, 0, 4>";
1777
1823
}
1778
1824
def MatrixIndexGPR32_12_15 : RegisterClass<"AArch64", [i32], 32, (sequence "W%u", 12, 15)> {
1779
1825
let DiagnosticType = "InvalidMatrixIndexGPR32_12_15";
1826
+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::MatrixIndexGPR32_12_15RegClassID, 0, 4>";
1780
1827
}
1781
1828
def MatrixIndexGPR32Op8_11 : RegisterOperand<MatrixIndexGPR32_8_11> {
1782
1829
let EncoderMethod = "encodeMatrixIndexGPR32<AArch64::W8>";
0 commit comments