@@ -68,33 +68,37 @@ def R31 : AVRReg<31, "r31", [], ["zh"]>, DwarfRegNum<[31]>;
68
68
def SPL : AVRReg<32, "SPL">, DwarfRegNum<[32]>;
69
69
def SPH : AVRReg<33, "SPH">, DwarfRegNum<[33]>;
70
70
71
+ // 16 bit GPR pairs.
71
72
let SubRegIndices = [sub_lo, sub_hi], CoveredBySubRegs = 1 in {
72
- // 16 bit GPR pairs.
73
- def SP : AVRReg<32, "SP", [SPL, SPH]>, DwarfRegNum<[32]>;
73
+ // The value 16 for the encoding is arbitrary. SP register is not encoded
74
+ // into instructions, they use it implicitly depending on the opcode.
75
+ def SP : AVRReg<16, "SP", [SPL, SPH]>, DwarfRegNum<[32]>;
74
76
75
77
// The pointer registers (X,Y,Z) are a special case because they
76
78
// are printed as a `high:low` pair when a DREG is expected,
77
79
// but printed using `X`, `Y`, `Z` when a pointer register is expected.
80
+ // DREG registers are only used in ADIW, SBIW and MOVW instructions.
78
81
let RegAltNameIndices = [ptr] in {
79
- def R31R30 : AVRReg<30 , "r31:r30", [R30, R31], ["Z"]>, DwarfRegNum<[30]>;
80
- def R29R28 : AVRReg<28 , "r29:r28", [R28, R29], ["Y"]>, DwarfRegNum<[28]>;
81
- def R27R26 : AVRReg<26 , "r27:r26", [R26, R27], ["X"]>, DwarfRegNum<[26]>;
82
+ def R31R30 : AVRReg<15 , "r31:r30", [R30, R31], ["Z"]>, DwarfRegNum<[30]>;
83
+ def R29R28 : AVRReg<14 , "r29:r28", [R28, R29], ["Y"]>, DwarfRegNum<[28]>;
84
+ def R27R26 : AVRReg<13 , "r27:r26", [R26, R27], ["X"]>, DwarfRegNum<[26]>;
82
85
}
83
- def R25R24 : AVRReg<24 , "r25:r24", [R24, R25]>, DwarfRegNum<[24]>;
84
- def R23R22 : AVRReg<22 , "r23:r22", [R22, R23]>, DwarfRegNum<[22]>;
85
- def R21R20 : AVRReg<20 , "r21:r20", [R20, R21]>, DwarfRegNum<[20]>;
86
- def R19R18 : AVRReg<18 , "r19:r18", [R18, R19]>, DwarfRegNum<[18]>;
87
- def R17R16 : AVRReg<16 , "r17:r16", [R16, R17]>, DwarfRegNum<[16]>;
88
- def R15R14 : AVRReg<14 , "r15:r14", [R14, R15]>, DwarfRegNum<[14]>;
89
- def R13R12 : AVRReg<12 , "r13:r12", [R12, R13]>, DwarfRegNum<[12]>;
90
- def R11R10 : AVRReg<10 , "r11:r10", [R10, R11]>, DwarfRegNum<[10]>;
91
- def R9R8 : AVRReg<8 , "r9:r8", [R8, R9]>, DwarfRegNum<[8]>;
92
- def R7R6 : AVRReg<6 , "r7:r6", [R6, R7]>, DwarfRegNum<[6]>;
93
- def R5R4 : AVRReg<4 , "r5:r4", [R4, R5]>, DwarfRegNum<[4]>;
94
- def R3R2 : AVRReg<2 , "r3:r2", [R2, R3]>, DwarfRegNum<[2]>;
86
+ def R25R24 : AVRReg<12 , "r25:r24", [R24, R25]>, DwarfRegNum<[24]>;
87
+ def R23R22 : AVRReg<11 , "r23:r22", [R22, R23]>, DwarfRegNum<[22]>;
88
+ def R21R20 : AVRReg<10 , "r21:r20", [R20, R21]>, DwarfRegNum<[20]>;
89
+ def R19R18 : AVRReg<9 , "r19:r18", [R18, R19]>, DwarfRegNum<[18]>;
90
+ def R17R16 : AVRReg<8 , "r17:r16", [R16, R17]>, DwarfRegNum<[16]>;
91
+ def R15R14 : AVRReg<7 , "r15:r14", [R14, R15]>, DwarfRegNum<[14]>;
92
+ def R13R12 : AVRReg<6 , "r13:r12", [R12, R13]>, DwarfRegNum<[12]>;
93
+ def R11R10 : AVRReg<5 , "r11:r10", [R10, R11]>, DwarfRegNum<[10]>;
94
+ def R9R8 : AVRReg<4 , "r9:r8", [R8, R9]>, DwarfRegNum<[8]>;
95
+ def R7R6 : AVRReg<3 , "r7:r6", [R6, R7]>, DwarfRegNum<[6]>;
96
+ def R5R4 : AVRReg<2 , "r5:r4", [R4, R5]>, DwarfRegNum<[4]>;
97
+ def R3R2 : AVRReg<1 , "r3:r2", [R2, R3]>, DwarfRegNum<[2]>;
95
98
def R1R0 : AVRReg<0, "r1:r0", [R0, R1]>, DwarfRegNum<[0]>;
96
99
97
- // Pseudo registers for unaligned i16
100
+ // Pseudo registers for unaligned i16. These are only used in pseudo
101
+ // instructions, so encoding values are arbitrary.
98
102
def R26R25 : AVRReg<25, "r26:r25", [R25, R26]>, DwarfRegNum<[25]>;
99
103
def R24R23 : AVRReg<23, "r24:r23", [R23, R24]>, DwarfRegNum<[23]>;
100
104
def R22R21 : AVRReg<21, "r22:r21", [R21, R22]>, DwarfRegNum<[21]>;
0 commit comments