@@ -19,18 +19,24 @@ class AArch64Reg<bits<16> enc, string n, list<Register> subregs = [],
1919}
2020
2121let Namespace = "AArch64" in {
22+ // SubRegIndexes for GPR registers
2223 def sub_32 : SubRegIndex<32>;
24+ def sube64 : SubRegIndex<64>;
25+ def subo64 : SubRegIndex<64>;
26+ def sube32 : SubRegIndex<32>;
27+ def subo32 : SubRegIndex<32>;
2328
29+ // SubRegIndexes for FPR/Vector registers
2430 def bsub : SubRegIndex<8>;
2531 def hsub : SubRegIndex<16>;
2632 def ssub : SubRegIndex<32>;
2733 def dsub : SubRegIndex<64>;
28- def sube32 : SubRegIndex<32 >;
29- def subo32 : SubRegIndex<32>;
30- def sube64 : SubRegIndex<64 >;
31- def subo64 : SubRegIndex<64 >;
32- // SVE
33- def zsub : SubRegIndex<128>;
34+ def zsub : SubRegIndex<128 >;
35+ // Note: Code depends on these having consecutive numbers
36+ def zsub0 : SubRegIndex<128, -1 >;
37+ def zsub1 : SubRegIndex<128, -1 >;
38+ def zsub2 : SubRegIndex<128, -1>;
39+ def zsub3 : SubRegIndex<128, -1 >;
3440 // Note: Code depends on these having consecutive numbers
3541 def dsub0 : SubRegIndex<64>;
3642 def dsub1 : SubRegIndex<64>;
@@ -41,7 +47,8 @@ let Namespace = "AArch64" in {
4147 def qsub1 : SubRegIndex<128>;
4248 def qsub2 : SubRegIndex<128>;
4349 def qsub3 : SubRegIndex<128>;
44- // Note: Code depends on these having consecutive numbers
50+
51+ // SubRegIndexes for SME Matrix tiles
4552 def zasubb : SubRegIndex<2048>; // (16 x 16)/1 bytes = 2048 bits
4653 def zasubh0 : SubRegIndex<1024>; // (16 x 16)/2 bytes = 1024 bits
4754 def zasubh1 : SubRegIndex<1024>; // (16 x 16)/2 bytes = 1024 bits
@@ -52,7 +59,11 @@ let Namespace = "AArch64" in {
5259 def zasubq0 : SubRegIndex<128>; // (16 x 16)/16 bytes = 128 bits
5360 def zasubq1 : SubRegIndex<128>; // (16 x 16)/16 bytes = 128 bits
5461
55- def psub : SubRegIndex<16>;
62+ // SubRegIndexes for SVE Predicates
63+ def psub : SubRegIndex<16>;
64+ // Note: Code depends on these having consecutive numbers
65+ def psub0 : SubRegIndex<16, -1>;
66+ def psub1 : SubRegIndex<16, -1>;
5667}
5768
5869let Namespace = "AArch64" in {
@@ -1026,11 +1037,6 @@ def PNR16_p8to15 : PNRP8to15RegOp<"h", PNRAsmOp16_p8to15, 16, PNR_p8to15>;
10261037def PNR32_p8to15 : PNRP8to15RegOp<"s", PNRAsmOp32_p8to15, 32, PNR_p8to15>;
10271038def PNR64_p8to15 : PNRP8to15RegOp<"d", PNRAsmOp64_p8to15, 64, PNR_p8to15>;
10281039
1029- let Namespace = "AArch64" in {
1030- def psub0 : SubRegIndex<16, -1>;
1031- def psub1 : SubRegIndex<16, -1>;
1032- }
1033-
10341040class PPRorPNRClass : RegisterClass<
10351041 "AArch64",
10361042 [ nxv16i1, nxv8i1, nxv4i1, nxv2i1, nxv1i1, aarch64svcount ], 16,
@@ -1123,8 +1129,7 @@ let EncoderMethod = "EncodeRegMul_MinMax<2, 0, 14>",
11231129} // end let EncoderMethod/DecoderMethod
11241130
11251131
1126- //******************************************************************************
1127-
1132+ //===----------------------------------------------------------------------===//
11281133// SVE vector register classes
11291134class ZPRClass<int firstreg, int lastreg, int step = 1> : RegisterClass<"AArch64",
11301135 [nxv16i8, nxv8i16, nxv4i32, nxv2i64,
@@ -1245,13 +1250,6 @@ def FPR32asZPR : FPRasZPROperand<32>;
12451250def FPR64asZPR : FPRasZPROperand<64>;
12461251def FPR128asZPR : FPRasZPROperand<128>;
12471252
1248- let Namespace = "AArch64" in {
1249- def zsub0 : SubRegIndex<128, -1>;
1250- def zsub1 : SubRegIndex<128, -1>;
1251- def zsub2 : SubRegIndex<128, -1>;
1252- def zsub3 : SubRegIndex<128, -1>;
1253- }
1254-
12551253// Pairs, triples, and quads of SVE vector registers.
12561254def ZSeqPairs : RegisterTuples<[zsub0, zsub1], [(rotl ZPR, 0), (rotl ZPR, 1)]>;
12571255def ZSeqTriples : RegisterTuples<[zsub0, zsub1, zsub2], [(rotl ZPR, 0), (rotl ZPR, 1), (rotl ZPR, 2)]>;
0 commit comments