@@ -99,52 +99,77 @@ class MxRegClass<list<ValueType> regTypes, int alignment, dag regList>
9999 : RegisterClass<"M68k", regTypes, alignment, regList>;
100100
101101// Data Registers
102+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<8,16,16>]> in
102103def DR8 : MxRegClass<[i8], 16, (sequence "BD%u", 0, 7)>;
104+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<16,16,16>]> in
103105def DR16 : MxRegClass<[i16], 16, (sequence "WD%u", 0, 7)>;
106+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in
104107def DR32 : MxRegClass<[i32], 32, (sequence "D%u", 0, 7)>;
105108
106109// Address Registers
110+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<16,16,16>]> in
107111def AR16 : MxRegClass<[i16], 16, (add (sequence "WA%u", 0, 6), WSP)>;
112+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in
108113def AR32 : MxRegClass<[i32], 32, (add (sequence "A%u", 0, 6), SP)>;
109114
115+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in
110116def AR32_NOSP : MxRegClass<[i32], 32, (sequence "A%u", 0, 6)>;
111117
112118// Index Register Classes
113119// FIXME try alternative ordering like `D0, D1, A0, A1, ...`
120+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<16,16,16>]> in
114121def XR16 : MxRegClass<[i16], 16, (add DR16, AR16)>;
122+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in
115123def XR32 : MxRegClass<[i32], 32, (add DR32, AR32)>;
116124
125+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in
117126def SPC : MxRegClass<[i32], 32, (add SP)>;
118127
119128// Floating Point Data Registers
129+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in
120130def FPDR32 : MxRegClass<[f32], 32, (sequence "FP%u", 0, 7)>;
131+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<64,64,32>]> in
121132def FPDR64 : MxRegClass<[f64], 32, (add FPDR32)>;
133+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<80,128,32>]> in
122134def FPDR80 : MxRegClass<[f80], 32, (add FPDR32)>;
123135
124136let CopyCost = -1 in {
137+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<8,16,16>]> in
125138 def CCRC : MxRegClass<[i8], 16, (add CCR)>;
139+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<16,16,16>]> in
126140 def SRC : MxRegClass<[i16], 16, (add SR)>;
127141
128142 // Float Point System Control Registers
129- def FPIC : MxRegClass<[i32], 32, (add FPIAR)>;
130- def FPCSC : MxRegClass<[i32], 32, (add FPC, FPS)>;
131- def FPSYSC : MxRegClass<[i32], 32, (add FPCSC, FPIC)>;
143+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in {
144+ def FPIC : MxRegClass<[i32], 32, (add FPIAR)>;
145+ def FPCSC : MxRegClass<[i32], 32, (add FPC, FPS)>;
146+ def FPSYSC : MxRegClass<[i32], 32, (add FPCSC, FPIC)>;
147+ }
132148}
133149
134150let isAllocatable = 0 in {
151+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in
135152 def PCC : MxRegClass<[i32], 32, (add PC)>;
136153}
137154
138155// Register used with tail call
156+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<16,16,16>]> in
139157def DR16_TC : MxRegClass<[i16], 16, (add D0, D1)>;
158+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in
140159def DR32_TC : MxRegClass<[i32], 32, (add D0, D1)>;
141160
161+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<16,16,16>]> in
142162def AR16_TC : MxRegClass<[i16], 16, (add A0, A1)>;
163+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in
143164def AR32_TC : MxRegClass<[i32], 32, (add A0, A1)>;
144165
166+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<16,16,16>]> in
145167def XR16_TC : MxRegClass<[i16], 16, (add DR16_TC, AR16_TC)>;
168+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in
146169def XR32_TC : MxRegClass<[i32], 32, (add DR32_TC, AR32_TC)>;
147170
148171// These classes provide spill/restore order if used with MOVEM instruction
149- def SPILL : MxRegClass<[i32], 32, (add XR32)>;
150- def SPILL_R : MxRegClass<[i32], 32, (add SP, (sequence "A%u", 6, 0), (sequence "D%u", 7, 0))>;
172+ let RegInfos = RegInfoByHwMode<[DefaultMode], [RegInfo<32,32,32>]> in {
173+ def SPILL : MxRegClass<[i32], 32, (add XR32)>;
174+ def SPILL_R : MxRegClass<[i32], 32, (add SP, (sequence "A%u", 6, 0), (sequence "D%u", 7, 0))>;
175+ }
0 commit comments