1 //===- SPURegisterInfo.td - The Cell SPU Register File -----*- tablegen -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
11 //===----------------------------------------------------------------------===//
13 class SPUReg<string n> : Register<n> {
14 let Namespace = "SPU";
17 // The SPU's register are all 128-bits wide, which makes specifying the
18 // registers relatively easy, if relatively mundane:
20 class SPUVecReg<bits<7> num, string n> : SPUReg<n> {
21 field bits<7> Num = num;
24 def R0 : SPUVecReg<0, "$lr">, DwarfRegNum<[0]>;
25 def R1 : SPUVecReg<1, "$sp">, DwarfRegNum<[1]>;
26 def R2 : SPUVecReg<2, "$2">, DwarfRegNum<[2]>;
27 def R3 : SPUVecReg<3, "$3">, DwarfRegNum<[3]>;
28 def R4 : SPUVecReg<4, "$4">, DwarfRegNum<[4]>;
29 def R5 : SPUVecReg<5, "$5">, DwarfRegNum<[5]>;
30 def R6 : SPUVecReg<6, "$6">, DwarfRegNum<[6]>;
31 def R7 : SPUVecReg<7, "$7">, DwarfRegNum<[7]>;
32 def R8 : SPUVecReg<8, "$8">, DwarfRegNum<[8]>;
33 def R9 : SPUVecReg<9, "$9">, DwarfRegNum<[9]>;
34 def R10 : SPUVecReg<10, "$10">, DwarfRegNum<[10]>;
35 def R11 : SPUVecReg<11, "$11">, DwarfRegNum<[11]>;
36 def R12 : SPUVecReg<12, "$12">, DwarfRegNum<[12]>;
37 def R13 : SPUVecReg<13, "$13">, DwarfRegNum<[13]>;
38 def R14 : SPUVecReg<14, "$14">, DwarfRegNum<[14]>;
39 def R15 : SPUVecReg<15, "$15">, DwarfRegNum<[15]>;
40 def R16 : SPUVecReg<16, "$16">, DwarfRegNum<[16]>;
41 def R17 : SPUVecReg<17, "$17">, DwarfRegNum<[17]>;
42 def R18 : SPUVecReg<18, "$18">, DwarfRegNum<[18]>;
43 def R19 : SPUVecReg<19, "$19">, DwarfRegNum<[19]>;
44 def R20 : SPUVecReg<20, "$20">, DwarfRegNum<[20]>;
45 def R21 : SPUVecReg<21, "$21">, DwarfRegNum<[21]>;
46 def R22 : SPUVecReg<22, "$22">, DwarfRegNum<[22]>;
47 def R23 : SPUVecReg<23, "$23">, DwarfRegNum<[23]>;
48 def R24 : SPUVecReg<24, "$24">, DwarfRegNum<[24]>;
49 def R25 : SPUVecReg<25, "$25">, DwarfRegNum<[25]>;
50 def R26 : SPUVecReg<26, "$26">, DwarfRegNum<[26]>;
51 def R27 : SPUVecReg<27, "$27">, DwarfRegNum<[27]>;
52 def R28 : SPUVecReg<28, "$28">, DwarfRegNum<[28]>;
53 def R29 : SPUVecReg<29, "$29">, DwarfRegNum<[29]>;
54 def R30 : SPUVecReg<30, "$30">, DwarfRegNum<[30]>;
55 def R31 : SPUVecReg<31, "$31">, DwarfRegNum<[31]>;
56 def R32 : SPUVecReg<32, "$32">, DwarfRegNum<[32]>;
57 def R33 : SPUVecReg<33, "$33">, DwarfRegNum<[33]>;
58 def R34 : SPUVecReg<34, "$34">, DwarfRegNum<[34]>;
59 def R35 : SPUVecReg<35, "$35">, DwarfRegNum<[35]>;
60 def R36 : SPUVecReg<36, "$36">, DwarfRegNum<[36]>;
61 def R37 : SPUVecReg<37, "$37">, DwarfRegNum<[37]>;
62 def R38 : SPUVecReg<38, "$38">, DwarfRegNum<[38]>;
63 def R39 : SPUVecReg<39, "$39">, DwarfRegNum<[39]>;
64 def R40 : SPUVecReg<40, "$40">, DwarfRegNum<[40]>;
65 def R41 : SPUVecReg<41, "$41">, DwarfRegNum<[41]>;
66 def R42 : SPUVecReg<42, "$42">, DwarfRegNum<[42]>;
67 def R43 : SPUVecReg<43, "$43">, DwarfRegNum<[43]>;
68 def R44 : SPUVecReg<44, "$44">, DwarfRegNum<[44]>;
69 def R45 : SPUVecReg<45, "$45">, DwarfRegNum<[45]>;
70 def R46 : SPUVecReg<46, "$46">, DwarfRegNum<[46]>;
71 def R47 : SPUVecReg<47, "$47">, DwarfRegNum<[47]>;
72 def R48 : SPUVecReg<48, "$48">, DwarfRegNum<[48]>;
73 def R49 : SPUVecReg<49, "$49">, DwarfRegNum<[49]>;
74 def R50 : SPUVecReg<50, "$50">, DwarfRegNum<[50]>;
75 def R51 : SPUVecReg<51, "$51">, DwarfRegNum<[51]>;
76 def R52 : SPUVecReg<52, "$52">, DwarfRegNum<[52]>;
77 def R53 : SPUVecReg<53, "$53">, DwarfRegNum<[53]>;
78 def R54 : SPUVecReg<54, "$54">, DwarfRegNum<[54]>;
79 def R55 : SPUVecReg<55, "$55">, DwarfRegNum<[55]>;
80 def R56 : SPUVecReg<56, "$56">, DwarfRegNum<[56]>;
81 def R57 : SPUVecReg<57, "$57">, DwarfRegNum<[57]>;
82 def R58 : SPUVecReg<58, "$58">, DwarfRegNum<[58]>;
83 def R59 : SPUVecReg<59, "$59">, DwarfRegNum<[59]>;
84 def R60 : SPUVecReg<60, "$60">, DwarfRegNum<[60]>;
85 def R61 : SPUVecReg<61, "$61">, DwarfRegNum<[61]>;
86 def R62 : SPUVecReg<62, "$62">, DwarfRegNum<[62]>;
87 def R63 : SPUVecReg<63, "$63">, DwarfRegNum<[63]>;
88 def R64 : SPUVecReg<64, "$64">, DwarfRegNum<[64]>;
89 def R65 : SPUVecReg<65, "$65">, DwarfRegNum<[65]>;
90 def R66 : SPUVecReg<66, "$66">, DwarfRegNum<[66]>;
91 def R67 : SPUVecReg<67, "$67">, DwarfRegNum<[67]>;
92 def R68 : SPUVecReg<68, "$68">, DwarfRegNum<[68]>;
93 def R69 : SPUVecReg<69, "$69">, DwarfRegNum<[69]>;
94 def R70 : SPUVecReg<70, "$70">, DwarfRegNum<[70]>;
95 def R71 : SPUVecReg<71, "$71">, DwarfRegNum<[71]>;
96 def R72 : SPUVecReg<72, "$72">, DwarfRegNum<[72]>;
97 def R73 : SPUVecReg<73, "$73">, DwarfRegNum<[73]>;
98 def R74 : SPUVecReg<74, "$74">, DwarfRegNum<[74]>;
99 def R75 : SPUVecReg<75, "$75">, DwarfRegNum<[75]>;
100 def R76 : SPUVecReg<76, "$76">, DwarfRegNum<[76]>;
101 def R77 : SPUVecReg<77, "$77">, DwarfRegNum<[77]>;
102 def R78 : SPUVecReg<78, "$78">, DwarfRegNum<[78]>;
103 def R79 : SPUVecReg<79, "$79">, DwarfRegNum<[79]>;
104 def R80 : SPUVecReg<80, "$80">, DwarfRegNum<[80]>;
105 def R81 : SPUVecReg<81, "$81">, DwarfRegNum<[81]>;
106 def R82 : SPUVecReg<82, "$82">, DwarfRegNum<[82]>;
107 def R83 : SPUVecReg<83, "$83">, DwarfRegNum<[83]>;
108 def R84 : SPUVecReg<84, "$84">, DwarfRegNum<[84]>;
109 def R85 : SPUVecReg<85, "$85">, DwarfRegNum<[85]>;
110 def R86 : SPUVecReg<86, "$86">, DwarfRegNum<[86]>;
111 def R87 : SPUVecReg<87, "$87">, DwarfRegNum<[87]>;
112 def R88 : SPUVecReg<88, "$88">, DwarfRegNum<[88]>;
113 def R89 : SPUVecReg<89, "$89">, DwarfRegNum<[89]>;
114 def R90 : SPUVecReg<90, "$90">, DwarfRegNum<[90]>;
115 def R91 : SPUVecReg<91, "$91">, DwarfRegNum<[91]>;
116 def R92 : SPUVecReg<92, "$92">, DwarfRegNum<[92]>;
117 def R93 : SPUVecReg<93, "$93">, DwarfRegNum<[93]>;
118 def R94 : SPUVecReg<94, "$94">, DwarfRegNum<[94]>;
119 def R95 : SPUVecReg<95, "$95">, DwarfRegNum<[95]>;
120 def R96 : SPUVecReg<96, "$96">, DwarfRegNum<[96]>;
121 def R97 : SPUVecReg<97, "$97">, DwarfRegNum<[97]>;
122 def R98 : SPUVecReg<98, "$98">, DwarfRegNum<[98]>;
123 def R99 : SPUVecReg<99, "$99">, DwarfRegNum<[99]>;
124 def R100 : SPUVecReg<100, "$100">, DwarfRegNum<[100]>;
125 def R101 : SPUVecReg<101, "$101">, DwarfRegNum<[101]>;
126 def R102 : SPUVecReg<102, "$102">, DwarfRegNum<[102]>;
127 def R103 : SPUVecReg<103, "$103">, DwarfRegNum<[103]>;
128 def R104 : SPUVecReg<104, "$104">, DwarfRegNum<[104]>;
129 def R105 : SPUVecReg<105, "$105">, DwarfRegNum<[105]>;
130 def R106 : SPUVecReg<106, "$106">, DwarfRegNum<[106]>;
131 def R107 : SPUVecReg<107, "$107">, DwarfRegNum<[107]>;
132 def R108 : SPUVecReg<108, "$108">, DwarfRegNum<[108]>;
133 def R109 : SPUVecReg<109, "$109">, DwarfRegNum<[109]>;
134 def R110 : SPUVecReg<110, "$110">, DwarfRegNum<[110]>;
135 def R111 : SPUVecReg<111, "$111">, DwarfRegNum<[111]>;
136 def R112 : SPUVecReg<112, "$112">, DwarfRegNum<[112]>;
137 def R113 : SPUVecReg<113, "$113">, DwarfRegNum<[113]>;
138 def R114 : SPUVecReg<114, "$114">, DwarfRegNum<[114]>;
139 def R115 : SPUVecReg<115, "$115">, DwarfRegNum<[115]>;
140 def R116 : SPUVecReg<116, "$116">, DwarfRegNum<[116]>;
141 def R117 : SPUVecReg<117, "$117">, DwarfRegNum<[117]>;
142 def R118 : SPUVecReg<118, "$118">, DwarfRegNum<[118]>;
143 def R119 : SPUVecReg<119, "$119">, DwarfRegNum<[119]>;
144 def R120 : SPUVecReg<120, "$120">, DwarfRegNum<[120]>;
145 def R121 : SPUVecReg<121, "$121">, DwarfRegNum<[121]>;
146 def R122 : SPUVecReg<122, "$122">, DwarfRegNum<[122]>;
147 def R123 : SPUVecReg<123, "$123">, DwarfRegNum<[123]>;
148 def R124 : SPUVecReg<124, "$124">, DwarfRegNum<[124]>;
149 def R125 : SPUVecReg<125, "$125">, DwarfRegNum<[125]>;
150 def R126 : SPUVecReg<126, "$126">, DwarfRegNum<[126]>;
151 def R127 : SPUVecReg<127, "$127">, DwarfRegNum<[127]>;
153 /* Need floating point status register here: */
154 /* def FPCSR : ... */
156 // The SPU's registers as 128-bit wide entities, and can function as general
157 // purpose registers, where the operands are in the "preferred slot":
158 def GPRC : RegisterClass<"SPU", [i128], 128,
160 /* volatile register */
161 R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16,
162 R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31,
163 R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46,
164 R47, R48, R49, R50, R51, R52, R53, R54, R55, R56, R57, R58, R59, R60, R61,
165 R62, R63, R64, R65, R66, R67, R68, R69, R70, R71, R72, R73, R74, R75, R76,
167 /* non-volatile register: take hint from PPC and allocate in reverse order */
168 R127, R126, R125, R124, R123, R122, R121, R120, R119, R118, R117, R116, R115,
169 R114, R113, R112, R111, R110, R109, R108, R107, R106, R105, R104, R103, R102,
170 R101, R100, R99, R98, R97, R96, R95, R94, R93, R92, R91, R90, R89, R88, R87,
171 R86, R85, R84, R83, R82, R81, R80,
172 /* environment ptr, SP, LR */
175 let MethodProtos = [{
176 iterator allocation_order_begin(const MachineFunction &MF) const;
177 iterator allocation_order_end(const MachineFunction &MF) const;
179 let MethodBodies = [{
181 GPRCClass::allocation_order_begin(const MachineFunction &MF) const {
185 GPRCClass::allocation_order_end(const MachineFunction &MF) const {
186 return end()-3; // don't allocate R2, R1, or R0 (envp, sp, lr)
191 // The SPU's registers as 64-bit wide (double word integer) "preferred slot":
192 def R64C : RegisterClass<"SPU", [i64], 128,
194 /* volatile register */
195 R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16,
196 R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31,
197 R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46,
198 R47, R48, R49, R50, R51, R52, R53, R54, R55, R56, R57, R58, R59, R60, R61,
199 R62, R63, R64, R65, R66, R67, R68, R69, R70, R71, R72, R73, R74, R75, R76,
201 /* non-volatile register: take hint from PPC and allocate in reverse order */
202 R127, R126, R125, R124, R123, R122, R121, R120, R119, R118, R117, R116, R115,
203 R114, R113, R112, R111, R110, R109, R108, R107, R106, R105, R104, R103, R102,
204 R101, R100, R99, R98, R97, R96, R95, R94, R93, R92, R91, R90, R89, R88, R87,
205 R86, R85, R84, R83, R82, R81, R80,
206 /* environment ptr, SP, LR */
209 let MethodProtos = [{
210 iterator allocation_order_begin(const MachineFunction &MF) const;
211 iterator allocation_order_end(const MachineFunction &MF) const;
213 let MethodBodies = [{
215 R64CClass::allocation_order_begin(const MachineFunction &MF) const {
219 R64CClass::allocation_order_end(const MachineFunction &MF) const {
220 return end()-3; // don't allocate R2, R1, or R0 (envp, sp, lr)
225 // The SPU's registers as 64-bit wide (double word) FP "preferred slot":
226 def R64FP : RegisterClass<"SPU", [f64], 128,
228 /* volatile register */
229 R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16,
230 R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31,
231 R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46,
232 R47, R48, R49, R50, R51, R52, R53, R54, R55, R56, R57, R58, R59, R60, R61,
233 R62, R63, R64, R65, R66, R67, R68, R69, R70, R71, R72, R73, R74, R75, R76,
235 /* non-volatile register: take hint from PPC and allocate in reverse order */
236 R127, R126, R125, R124, R123, R122, R121, R120, R119, R118, R117, R116, R115,
237 R114, R113, R112, R111, R110, R109, R108, R107, R106, R105, R104, R103, R102,
238 R101, R100, R99, R98, R97, R96, R95, R94, R93, R92, R91, R90, R89, R88, R87,
239 R86, R85, R84, R83, R82, R81, R80,
240 /* environment ptr, SP, LR */
243 let MethodProtos = [{
244 iterator allocation_order_begin(const MachineFunction &MF) const;
245 iterator allocation_order_end(const MachineFunction &MF) const;
247 let MethodBodies = [{
249 R64FPClass::allocation_order_begin(const MachineFunction &MF) const {
253 R64FPClass::allocation_order_end(const MachineFunction &MF) const {
254 return end()-3; // don't allocate R2, R1, or R0 (envp, sp, lr)
259 // The SPU's registers as 32-bit wide (word) "preferred slot":
260 def R32C : RegisterClass<"SPU", [i32], 128,
262 /* volatile register */
263 R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16,
264 R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31,
265 R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46,
266 R47, R48, R49, R50, R51, R52, R53, R54, R55, R56, R57, R58, R59, R60, R61,
267 R62, R63, R64, R65, R66, R67, R68, R69, R70, R71, R72, R73, R74, R75, R76,
269 /* non-volatile register: take hint from PPC and allocate in reverse order */
270 R127, R126, R125, R124, R123, R122, R121, R120, R119, R118, R117, R116, R115,
271 R114, R113, R112, R111, R110, R109, R108, R107, R106, R105, R104, R103, R102,
272 R101, R100, R99, R98, R97, R96, R95, R94, R93, R92, R91, R90, R89, R88, R87,
273 R86, R85, R84, R83, R82, R81, R80,
274 /* environment ptr, SP, LR */
277 let MethodProtos = [{
278 iterator allocation_order_begin(const MachineFunction &MF) const;
279 iterator allocation_order_end(const MachineFunction &MF) const;
281 let MethodBodies = [{
283 R32CClass::allocation_order_begin(const MachineFunction &MF) const {
287 R32CClass::allocation_order_end(const MachineFunction &MF) const {
288 return end()-3; // don't allocate R2, R1, or R0 (envp, sp, lr)
293 // The SPU's registers as single precision floating point "preferred slot":
294 def R32FP : RegisterClass<"SPU", [f32], 128,
296 /* volatile register */
297 R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16,
298 R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31,
299 R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46,
300 R47, R48, R49, R50, R51, R52, R53, R54, R55, R56, R57, R58, R59, R60, R61,
301 R62, R63, R64, R65, R66, R67, R68, R69, R70, R71, R72, R73, R74, R75, R76,
303 /* non-volatile register: take hint from PPC and allocate in reverse order */
304 R127, R126, R125, R124, R123, R122, R121, R120, R119, R118, R117, R116, R115,
305 R114, R113, R112, R111, R110, R109, R108, R107, R106, R105, R104, R103, R102,
306 R101, R100, R99, R98, R97, R96, R95, R94, R93, R92, R91, R90, R89, R88, R87,
307 R86, R85, R84, R83, R82, R81, R80,
308 /* environment ptr, SP, LR */
311 let MethodProtos = [{
312 iterator allocation_order_begin(const MachineFunction &MF) const;
313 iterator allocation_order_end(const MachineFunction &MF) const;
315 let MethodBodies = [{
317 R32FPClass::allocation_order_begin(const MachineFunction &MF) const {
321 R32FPClass::allocation_order_end(const MachineFunction &MF) const {
322 return end()-3; // don't allocate R2, R1, or R0 (envp, sp, lr)
327 // The SPU's registers as 16-bit wide (halfword) "preferred slot":
328 def R16C : RegisterClass<"SPU", [i16], 128,
330 /* volatile register */
331 R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16,
332 R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31,
333 R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46,
334 R47, R48, R49, R50, R51, R52, R53, R54, R55, R56, R57, R58, R59, R60, R61,
335 R62, R63, R64, R65, R66, R67, R68, R69, R70, R71, R72, R73, R74, R75, R76,
337 /* non-volatile register: take hint from PPC and allocate in reverse order */
338 R127, R126, R125, R124, R123, R122, R121, R120, R119, R118, R117, R116, R115,
339 R114, R113, R112, R111, R110, R109, R108, R107, R106, R105, R104, R103, R102,
340 R101, R100, R99, R98, R97, R96, R95, R94, R93, R92, R91, R90, R89, R88, R87,
341 R86, R85, R84, R83, R82, R81, R80,
342 /* environment ptr, SP, LR */
345 let MethodProtos = [{
346 iterator allocation_order_begin(const MachineFunction &MF) const;
347 iterator allocation_order_end(const MachineFunction &MF) const;
349 let MethodBodies = [{
351 R16CClass::allocation_order_begin(const MachineFunction &MF) const {
355 R16CClass::allocation_order_end(const MachineFunction &MF) const {
356 return end()-3; // don't allocate R2, R1, or R0 (envp, sp, lr)
361 // The SPU's registers as 8-bit wide (byte) "preferred slot":
362 def R8C : RegisterClass<"SPU", [i8], 128,
364 /* volatile register */
365 R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16,
366 R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31,
367 R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46,
368 R47, R48, R49, R50, R51, R52, R53, R54, R55, R56, R57, R58, R59, R60, R61,
369 R62, R63, R64, R65, R66, R67, R68, R69, R70, R71, R72, R73, R74, R75, R76,
371 /* non-volatile register: take hint from PPC and allocate in reverse order */
372 R127, R126, R125, R124, R123, R122, R121, R120, R119, R118, R117, R116, R115,
373 R114, R113, R112, R111, R110, R109, R108, R107, R106, R105, R104, R103, R102,
374 R101, R100, R99, R98, R97, R96, R95, R94, R93, R92, R91, R90, R89, R88, R87,
375 R86, R85, R84, R83, R82, R81, R80,
376 /* environment ptr, SP, LR */
379 let MethodProtos = [{
380 iterator allocation_order_begin(const MachineFunction &MF) const;
381 iterator allocation_order_end(const MachineFunction &MF) const;
383 let MethodBodies = [{
385 R8CClass::allocation_order_begin(const MachineFunction &MF) const {
389 R8CClass::allocation_order_end(const MachineFunction &MF) const {
390 return end()-3; // don't allocate R2, R1, or R0 (envp, sp, lr)
395 // The SPU's registers as vector registers:
396 def VECREG : RegisterClass<"SPU",
397 [v16i8,v8i16,v2i32,v4i32,v4f32,v2i64,v2f64],
400 /* volatile register */
401 R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16,
402 R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31,
403 R32, R33, R34, R35, R36, R37, R38, R39, R40, R41, R42, R43, R44, R45, R46,
404 R47, R48, R49, R50, R51, R52, R53, R54, R55, R56, R57, R58, R59, R60, R61,
405 R62, R63, R64, R65, R66, R67, R68, R69, R70, R71, R72, R73, R74, R75, R76,
407 /* non-volatile register: take hint from PPC and allocate in reverse order */
408 R127, R126, R125, R124, R123, R122, R121, R120, R119, R118, R117, R116, R115,
409 R114, R113, R112, R111, R110, R109, R108, R107, R106, R105, R104, R103, R102,
410 R101, R100, R99, R98, R97, R96, R95, R94, R93, R92, R91, R90, R89, R88, R87,
411 R86, R85, R84, R83, R82, R81, R80,
412 /* environment ptr, SP, LR */
415 let MethodProtos = [{
416 iterator allocation_order_begin(const MachineFunction &MF) const;
417 iterator allocation_order_end(const MachineFunction &MF) const;
419 let MethodBodies = [{
420 VECREGClass::iterator
421 VECREGClass::allocation_order_begin(const MachineFunction &MF) const {
424 VECREGClass::iterator
425 VECREGClass::allocation_order_end(const MachineFunction &MF) const {
426 return end()-3; // don't allocate R2, R1, or R0 (envp, sp, lr)