@@ -16,37 +16,33 @@ class RISCVReg<bits<5> Enc, string n, list<string> alt = []> : Register<n> {
16
16
let AltNames = alt;
17
17
}
18
18
19
+ class RISCVRegWithSubRegs<bits<5> Enc, string n, list<Register> subregs,
20
+ list<string> alt = []>
21
+ : RegisterWithSubRegs<n, subregs> {
22
+ let HWEncoding{4-0} = Enc;
23
+ let AltNames = alt;
24
+ }
25
+
19
26
class RISCVReg16<bits<5> Enc, string n, list<string> alt = []> : Register<n> {
20
27
let HWEncoding{4-0} = Enc;
21
28
let AltNames = alt;
22
29
}
23
30
24
31
def sub_16 : SubRegIndex<16>;
25
- class RISCVReg32<RISCVReg16 subreg> : Register<""> {
26
- let HWEncoding{4-0} = subreg.HWEncoding{4-0};
27
- let SubRegs = [ subreg];
32
+ class RISCVReg32<RISCVReg16 subreg>
33
+ : RISCVRegWithSubRegs<subreg. HWEncoding{4-0}, subreg.AsmName, [subreg],
34
+ subreg.AltNames> {
28
35
let SubRegIndices = [sub_16];
29
- let AsmName = subreg.AsmName;
30
- let AltNames = subreg.AltNames;
31
36
}
32
37
33
38
// Because RISCVReg64 register have AsmName and AltNames that alias with their
34
39
// 16/32-bit sub-register, RISCVAsmParser will need to coerce a register number
35
40
// from a RISCVReg16/RISCVReg32 to the equivalent RISCVReg64 when appropriate.
36
41
def sub_32 : SubRegIndex<32>;
37
- class RISCVReg64<RISCVReg32 subreg> : Register<""> {
38
- let HWEncoding{4-0} = subreg.HWEncoding{4-0};
39
- let SubRegs = [ subreg];
42
+ class RISCVReg64<RISCVReg32 subreg>
43
+ : RISCVRegWithSubRegs<subreg. HWEncoding{4-0}, subreg.AsmName, [subreg],
44
+ subreg.AltNames> {
40
45
let SubRegIndices = [sub_32];
41
- let AsmName = subreg.AsmName;
42
- let AltNames = subreg.AltNames;
43
- }
44
-
45
- class RISCVRegWithSubRegs<bits<5> Enc, string n, list<Register> subregs,
46
- list<string> alt = []>
47
- : RegisterWithSubRegs<n, subregs> {
48
- let HWEncoding{4-0} = Enc;
49
- let AltNames = alt;
50
46
}
51
47
52
48
def ABIRegAltName : RegAltNameIndex;
0 commit comments