@@ -16,37 +16,33 @@ class RISCVReg<bits<5> Enc, string n, list<string> alt = []> : Register<n> {
1616 let AltNames = alt;
1717}
1818
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+
1926class RISCVReg16<bits<5> Enc, string n, list<string> alt = []> : Register<n> {
2027 let HWEncoding{4-0} = Enc;
2128 let AltNames = alt;
2229}
2330
2431def 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> {
2835 let SubRegIndices = [sub_16];
29- let AsmName = subreg.AsmName;
30- let AltNames = subreg.AltNames;
3136}
3237
3338// Because RISCVReg64 register have AsmName and AltNames that alias with their
3439// 16/32-bit sub-register, RISCVAsmParser will need to coerce a register number
3540// from a RISCVReg16/RISCVReg32 to the equivalent RISCVReg64 when appropriate.
3641def 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> {
4045 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;
5046}
5147
5248def ABIRegAltName : RegAltNameIndex;
0 commit comments