@@ -19,18 +19,24 @@ class AArch64Reg<bits<16> enc, string n, list<Register> subregs = [],
19
19
}
20
20
21
21
let Namespace = "AArch64" in {
22
+ // SubRegIndexes for GPR registers
22
23
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>;
23
28
29
+ // SubRegIndexes for FPR/Vector registers
24
30
def bsub : SubRegIndex<8>;
25
31
def hsub : SubRegIndex<16>;
26
32
def ssub : SubRegIndex<32>;
27
33
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 >;
34
40
// Note: Code depends on these having consecutive numbers
35
41
def dsub0 : SubRegIndex<64>;
36
42
def dsub1 : SubRegIndex<64>;
@@ -41,7 +47,8 @@ let Namespace = "AArch64" in {
41
47
def qsub1 : SubRegIndex<128>;
42
48
def qsub2 : SubRegIndex<128>;
43
49
def qsub3 : SubRegIndex<128>;
44
- // Note: Code depends on these having consecutive numbers
50
+
51
+ // SubRegIndexes for SME Matrix tiles
45
52
def zasubb : SubRegIndex<2048>; // (16 x 16)/1 bytes = 2048 bits
46
53
def zasubh0 : SubRegIndex<1024>; // (16 x 16)/2 bytes = 1024 bits
47
54
def zasubh1 : SubRegIndex<1024>; // (16 x 16)/2 bytes = 1024 bits
@@ -52,7 +59,11 @@ let Namespace = "AArch64" in {
52
59
def zasubq0 : SubRegIndex<128>; // (16 x 16)/16 bytes = 128 bits
53
60
def zasubq1 : SubRegIndex<128>; // (16 x 16)/16 bytes = 128 bits
54
61
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>;
56
67
}
57
68
58
69
let Namespace = "AArch64" in {
@@ -1026,11 +1037,6 @@ def PNR16_p8to15 : PNRP8to15RegOp<"h", PNRAsmOp16_p8to15, 16, PNR_p8to15>;
1026
1037
def PNR32_p8to15 : PNRP8to15RegOp<"s", PNRAsmOp32_p8to15, 32, PNR_p8to15>;
1027
1038
def PNR64_p8to15 : PNRP8to15RegOp<"d", PNRAsmOp64_p8to15, 64, PNR_p8to15>;
1028
1039
1029
- let Namespace = "AArch64" in {
1030
- def psub0 : SubRegIndex<16, -1>;
1031
- def psub1 : SubRegIndex<16, -1>;
1032
- }
1033
-
1034
1040
class PPRorPNRClass : RegisterClass<
1035
1041
"AArch64",
1036
1042
[ nxv16i1, nxv8i1, nxv4i1, nxv2i1, nxv1i1, aarch64svcount ], 16,
@@ -1123,8 +1129,7 @@ let EncoderMethod = "EncodeRegMul_MinMax<2, 0, 14>",
1123
1129
} // end let EncoderMethod/DecoderMethod
1124
1130
1125
1131
1126
- //******************************************************************************
1127
-
1132
+ //===----------------------------------------------------------------------===//
1128
1133
// SVE vector register classes
1129
1134
class ZPRClass<int firstreg, int lastreg, int step = 1> : RegisterClass<"AArch64",
1130
1135
[nxv16i8, nxv8i16, nxv4i32, nxv2i64,
@@ -1245,13 +1250,6 @@ def FPR32asZPR : FPRasZPROperand<32>;
1245
1250
def FPR64asZPR : FPRasZPROperand<64>;
1246
1251
def FPR128asZPR : FPRasZPROperand<128>;
1247
1252
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
-
1255
1253
// Pairs, triples, and quads of SVE vector registers.
1256
1254
def ZSeqPairs : RegisterTuples<[zsub0, zsub1], [(rotl ZPR, 0), (rotl ZPR, 1)]>;
1257
1255
def ZSeqTriples : RegisterTuples<[zsub0, zsub1, zsub2], [(rotl ZPR, 0), (rotl ZPR, 1), (rotl ZPR, 2)]>;
0 commit comments