libFirm
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
gen_arm_regalloc_if.c
1 
11 #include "gen_arm_regalloc_if.h"
12 
13 #include "arm_bearch_t.h"
14 
15 const arch_register_req_t arm_class_reg_req_flags = {
16  .cls = &arm_reg_classes[CLASS_arm_flags],
17  .width = 1,
18 };
19 static const unsigned arm_limited_flags_fl[] = { (1U << REG_FLAGS_FL) };
20 const arch_register_req_t arm_single_reg_req_flags_fl = {
21  .cls = &arm_reg_classes[CLASS_arm_flags],
22  .limited = arm_limited_flags_fl,
23  .width = 1,
24 };
25 const arch_register_req_t arm_class_reg_req_fpa = {
26  .cls = &arm_reg_classes[CLASS_arm_fpa],
27  .width = 1,
28 };
29 static const unsigned arm_limited_fpa_f0[] = { (1U << REG_FPA_F0) };
30 const arch_register_req_t arm_single_reg_req_fpa_f0 = {
31  .cls = &arm_reg_classes[CLASS_arm_fpa],
32  .limited = arm_limited_fpa_f0,
33  .width = 1,
34 };
35 static const unsigned arm_limited_fpa_f1[] = { (1U << REG_FPA_F1) };
36 const arch_register_req_t arm_single_reg_req_fpa_f1 = {
37  .cls = &arm_reg_classes[CLASS_arm_fpa],
38  .limited = arm_limited_fpa_f1,
39  .width = 1,
40 };
41 static const unsigned arm_limited_fpa_f2[] = { (1U << REG_FPA_F2) };
42 const arch_register_req_t arm_single_reg_req_fpa_f2 = {
43  .cls = &arm_reg_classes[CLASS_arm_fpa],
44  .limited = arm_limited_fpa_f2,
45  .width = 1,
46 };
47 static const unsigned arm_limited_fpa_f3[] = { (1U << REG_FPA_F3) };
48 const arch_register_req_t arm_single_reg_req_fpa_f3 = {
49  .cls = &arm_reg_classes[CLASS_arm_fpa],
50  .limited = arm_limited_fpa_f3,
51  .width = 1,
52 };
53 static const unsigned arm_limited_fpa_f4[] = { (1U << REG_FPA_F4) };
54 const arch_register_req_t arm_single_reg_req_fpa_f4 = {
55  .cls = &arm_reg_classes[CLASS_arm_fpa],
56  .limited = arm_limited_fpa_f4,
57  .width = 1,
58 };
59 static const unsigned arm_limited_fpa_f5[] = { (1U << REG_FPA_F5) };
60 const arch_register_req_t arm_single_reg_req_fpa_f5 = {
61  .cls = &arm_reg_classes[CLASS_arm_fpa],
62  .limited = arm_limited_fpa_f5,
63  .width = 1,
64 };
65 static const unsigned arm_limited_fpa_f6[] = { (1U << REG_FPA_F6) };
66 const arch_register_req_t arm_single_reg_req_fpa_f6 = {
67  .cls = &arm_reg_classes[CLASS_arm_fpa],
68  .limited = arm_limited_fpa_f6,
69  .width = 1,
70 };
71 static const unsigned arm_limited_fpa_f7[] = { (1U << REG_FPA_F7) };
72 const arch_register_req_t arm_single_reg_req_fpa_f7 = {
73  .cls = &arm_reg_classes[CLASS_arm_fpa],
74  .limited = arm_limited_fpa_f7,
75  .width = 1,
76 };
77 const arch_register_req_t arm_class_reg_req_gp = {
78  .cls = &arm_reg_classes[CLASS_arm_gp],
79  .width = 1,
80 };
81 static const unsigned arm_limited_gp_r0[] = { (1U << REG_GP_R0) };
82 const arch_register_req_t arm_single_reg_req_gp_r0 = {
83  .cls = &arm_reg_classes[CLASS_arm_gp],
84  .limited = arm_limited_gp_r0,
85  .width = 1,
86 };
87 static const unsigned arm_limited_gp_r1[] = { (1U << REG_GP_R1) };
88 const arch_register_req_t arm_single_reg_req_gp_r1 = {
89  .cls = &arm_reg_classes[CLASS_arm_gp],
90  .limited = arm_limited_gp_r1,
91  .width = 1,
92 };
93 static const unsigned arm_limited_gp_r2[] = { (1U << REG_GP_R2) };
94 const arch_register_req_t arm_single_reg_req_gp_r2 = {
95  .cls = &arm_reg_classes[CLASS_arm_gp],
96  .limited = arm_limited_gp_r2,
97  .width = 1,
98 };
99 static const unsigned arm_limited_gp_r3[] = { (1U << REG_GP_R3) };
100 const arch_register_req_t arm_single_reg_req_gp_r3 = {
101  .cls = &arm_reg_classes[CLASS_arm_gp],
102  .limited = arm_limited_gp_r3,
103  .width = 1,
104 };
105 static const unsigned arm_limited_gp_r4[] = { (1U << REG_GP_R4) };
106 const arch_register_req_t arm_single_reg_req_gp_r4 = {
107  .cls = &arm_reg_classes[CLASS_arm_gp],
108  .limited = arm_limited_gp_r4,
109  .width = 1,
110 };
111 static const unsigned arm_limited_gp_r5[] = { (1U << REG_GP_R5) };
112 const arch_register_req_t arm_single_reg_req_gp_r5 = {
113  .cls = &arm_reg_classes[CLASS_arm_gp],
114  .limited = arm_limited_gp_r5,
115  .width = 1,
116 };
117 static const unsigned arm_limited_gp_r6[] = { (1U << REG_GP_R6) };
118 const arch_register_req_t arm_single_reg_req_gp_r6 = {
119  .cls = &arm_reg_classes[CLASS_arm_gp],
120  .limited = arm_limited_gp_r6,
121  .width = 1,
122 };
123 static const unsigned arm_limited_gp_r7[] = { (1U << REG_GP_R7) };
124 const arch_register_req_t arm_single_reg_req_gp_r7 = {
125  .cls = &arm_reg_classes[CLASS_arm_gp],
126  .limited = arm_limited_gp_r7,
127  .width = 1,
128 };
129 static const unsigned arm_limited_gp_r8[] = { (1U << REG_GP_R8) };
130 const arch_register_req_t arm_single_reg_req_gp_r8 = {
131  .cls = &arm_reg_classes[CLASS_arm_gp],
132  .limited = arm_limited_gp_r8,
133  .width = 1,
134 };
135 static const unsigned arm_limited_gp_r9[] = { (1U << REG_GP_R9) };
136 const arch_register_req_t arm_single_reg_req_gp_r9 = {
137  .cls = &arm_reg_classes[CLASS_arm_gp],
138  .limited = arm_limited_gp_r9,
139  .width = 1,
140 };
141 static const unsigned arm_limited_gp_r10[] = { (1U << REG_GP_R10) };
142 const arch_register_req_t arm_single_reg_req_gp_r10 = {
143  .cls = &arm_reg_classes[CLASS_arm_gp],
144  .limited = arm_limited_gp_r10,
145  .width = 1,
146 };
147 static const unsigned arm_limited_gp_r11[] = { (1U << REG_GP_R11) };
148 const arch_register_req_t arm_single_reg_req_gp_r11 = {
149  .cls = &arm_reg_classes[CLASS_arm_gp],
150  .limited = arm_limited_gp_r11,
151  .width = 1,
152 };
153 static const unsigned arm_limited_gp_r12[] = { (1U << REG_GP_R12) };
154 const arch_register_req_t arm_single_reg_req_gp_r12 = {
155  .cls = &arm_reg_classes[CLASS_arm_gp],
156  .limited = arm_limited_gp_r12,
157  .width = 1,
158 };
159 static const unsigned arm_limited_gp_sp[] = { (1U << REG_GP_SP) };
160 const arch_register_req_t arm_single_reg_req_gp_sp = {
161  .cls = &arm_reg_classes[CLASS_arm_gp],
162  .limited = arm_limited_gp_sp,
163  .width = 1,
164 };
165 static const unsigned arm_limited_gp_lr[] = { (1U << REG_GP_LR) };
166 const arch_register_req_t arm_single_reg_req_gp_lr = {
167  .cls = &arm_reg_classes[CLASS_arm_gp],
168  .limited = arm_limited_gp_lr,
169  .width = 1,
170 };
171 static const unsigned arm_limited_gp_pc[] = { (1U << REG_GP_PC) };
172 const arch_register_req_t arm_single_reg_req_gp_pc = {
173  .cls = &arm_reg_classes[CLASS_arm_gp],
174  .limited = arm_limited_gp_pc,
175  .width = 1,
176 };
177 
178 
179 arch_register_class_t arm_reg_classes[] = {
180  {
181  .name = "arm_flags",
182  .mode = NULL,
183  .regs = &arm_registers[REG_FL],
184  .class_req = &arm_class_reg_req_flags,
185  .index = CLASS_arm_flags,
186  .n_regs = 1,
187  .manual_ra = true,
188  },
189  {
190  .name = "arm_fpa",
191  .mode = NULL,
192  .regs = &arm_registers[REG_F0],
193  .class_req = &arm_class_reg_req_fpa,
194  .index = CLASS_arm_fpa,
195  .n_regs = 8,
196  },
197  {
198  .name = "arm_gp",
199  .mode = NULL,
200  .regs = &arm_registers[REG_R0],
201  .class_req = &arm_class_reg_req_gp,
202  .index = CLASS_arm_gp,
203  .n_regs = 16,
204  },
205 
206 };
207 
209 const arch_register_t arm_registers[] = {
210  {
211  .name = "fl",
212  .cls = &arm_reg_classes[CLASS_arm_flags],
213  .single_req = &arm_single_reg_req_flags_fl,
214  .index = REG_FLAGS_FL,
215  .global_index = REG_FL,
216  .dwarf_number = 0,
217  .encoding = REG_FLAGS_FL,
218  .is_virtual = false,
219  },
220  {
221  .name = "f0",
222  .cls = &arm_reg_classes[CLASS_arm_fpa],
223  .single_req = &arm_single_reg_req_fpa_f0,
224  .index = REG_FPA_F0,
225  .global_index = REG_F0,
226  .dwarf_number = 96,
227  .encoding = REG_FPA_F0,
228  .is_virtual = false,
229  },
230  {
231  .name = "f1",
232  .cls = &arm_reg_classes[CLASS_arm_fpa],
233  .single_req = &arm_single_reg_req_fpa_f1,
234  .index = REG_FPA_F1,
235  .global_index = REG_F1,
236  .dwarf_number = 97,
237  .encoding = REG_FPA_F1,
238  .is_virtual = false,
239  },
240  {
241  .name = "f2",
242  .cls = &arm_reg_classes[CLASS_arm_fpa],
243  .single_req = &arm_single_reg_req_fpa_f2,
244  .index = REG_FPA_F2,
245  .global_index = REG_F2,
246  .dwarf_number = 98,
247  .encoding = REG_FPA_F2,
248  .is_virtual = false,
249  },
250  {
251  .name = "f3",
252  .cls = &arm_reg_classes[CLASS_arm_fpa],
253  .single_req = &arm_single_reg_req_fpa_f3,
254  .index = REG_FPA_F3,
255  .global_index = REG_F3,
256  .dwarf_number = 99,
257  .encoding = REG_FPA_F3,
258  .is_virtual = false,
259  },
260  {
261  .name = "f4",
262  .cls = &arm_reg_classes[CLASS_arm_fpa],
263  .single_req = &arm_single_reg_req_fpa_f4,
264  .index = REG_FPA_F4,
265  .global_index = REG_F4,
266  .dwarf_number = 100,
267  .encoding = REG_FPA_F4,
268  .is_virtual = false,
269  },
270  {
271  .name = "f5",
272  .cls = &arm_reg_classes[CLASS_arm_fpa],
273  .single_req = &arm_single_reg_req_fpa_f5,
274  .index = REG_FPA_F5,
275  .global_index = REG_F5,
276  .dwarf_number = 101,
277  .encoding = REG_FPA_F5,
278  .is_virtual = false,
279  },
280  {
281  .name = "f6",
282  .cls = &arm_reg_classes[CLASS_arm_fpa],
283  .single_req = &arm_single_reg_req_fpa_f6,
284  .index = REG_FPA_F6,
285  .global_index = REG_F6,
286  .dwarf_number = 102,
287  .encoding = REG_FPA_F6,
288  .is_virtual = false,
289  },
290  {
291  .name = "f7",
292  .cls = &arm_reg_classes[CLASS_arm_fpa],
293  .single_req = &arm_single_reg_req_fpa_f7,
294  .index = REG_FPA_F7,
295  .global_index = REG_F7,
296  .dwarf_number = 103,
297  .encoding = REG_FPA_F7,
298  .is_virtual = false,
299  },
300  {
301  .name = "r0",
302  .cls = &arm_reg_classes[CLASS_arm_gp],
303  .single_req = &arm_single_reg_req_gp_r0,
304  .index = REG_GP_R0,
305  .global_index = REG_R0,
306  .dwarf_number = 0,
307  .encoding = REG_GP_R0,
308  .is_virtual = false,
309  },
310  {
311  .name = "r1",
312  .cls = &arm_reg_classes[CLASS_arm_gp],
313  .single_req = &arm_single_reg_req_gp_r1,
314  .index = REG_GP_R1,
315  .global_index = REG_R1,
316  .dwarf_number = 1,
317  .encoding = REG_GP_R1,
318  .is_virtual = false,
319  },
320  {
321  .name = "r2",
322  .cls = &arm_reg_classes[CLASS_arm_gp],
323  .single_req = &arm_single_reg_req_gp_r2,
324  .index = REG_GP_R2,
325  .global_index = REG_R2,
326  .dwarf_number = 2,
327  .encoding = REG_GP_R2,
328  .is_virtual = false,
329  },
330  {
331  .name = "r3",
332  .cls = &arm_reg_classes[CLASS_arm_gp],
333  .single_req = &arm_single_reg_req_gp_r3,
334  .index = REG_GP_R3,
335  .global_index = REG_R3,
336  .dwarf_number = 3,
337  .encoding = REG_GP_R3,
338  .is_virtual = false,
339  },
340  {
341  .name = "r4",
342  .cls = &arm_reg_classes[CLASS_arm_gp],
343  .single_req = &arm_single_reg_req_gp_r4,
344  .index = REG_GP_R4,
345  .global_index = REG_R4,
346  .dwarf_number = 4,
347  .encoding = REG_GP_R4,
348  .is_virtual = false,
349  },
350  {
351  .name = "r5",
352  .cls = &arm_reg_classes[CLASS_arm_gp],
353  .single_req = &arm_single_reg_req_gp_r5,
354  .index = REG_GP_R5,
355  .global_index = REG_R5,
356  .dwarf_number = 5,
357  .encoding = REG_GP_R5,
358  .is_virtual = false,
359  },
360  {
361  .name = "r6",
362  .cls = &arm_reg_classes[CLASS_arm_gp],
363  .single_req = &arm_single_reg_req_gp_r6,
364  .index = REG_GP_R6,
365  .global_index = REG_R6,
366  .dwarf_number = 6,
367  .encoding = REG_GP_R6,
368  .is_virtual = false,
369  },
370  {
371  .name = "r7",
372  .cls = &arm_reg_classes[CLASS_arm_gp],
373  .single_req = &arm_single_reg_req_gp_r7,
374  .index = REG_GP_R7,
375  .global_index = REG_R7,
376  .dwarf_number = 7,
377  .encoding = REG_GP_R7,
378  .is_virtual = false,
379  },
380  {
381  .name = "r8",
382  .cls = &arm_reg_classes[CLASS_arm_gp],
383  .single_req = &arm_single_reg_req_gp_r8,
384  .index = REG_GP_R8,
385  .global_index = REG_R8,
386  .dwarf_number = 8,
387  .encoding = REG_GP_R8,
388  .is_virtual = false,
389  },
390  {
391  .name = "r9",
392  .cls = &arm_reg_classes[CLASS_arm_gp],
393  .single_req = &arm_single_reg_req_gp_r9,
394  .index = REG_GP_R9,
395  .global_index = REG_R9,
396  .dwarf_number = 9,
397  .encoding = REG_GP_R9,
398  .is_virtual = false,
399  },
400  {
401  .name = "r10",
402  .cls = &arm_reg_classes[CLASS_arm_gp],
403  .single_req = &arm_single_reg_req_gp_r10,
404  .index = REG_GP_R10,
405  .global_index = REG_R10,
406  .dwarf_number = 10,
407  .encoding = REG_GP_R10,
408  .is_virtual = false,
409  },
410  {
411  .name = "r11",
412  .cls = &arm_reg_classes[CLASS_arm_gp],
413  .single_req = &arm_single_reg_req_gp_r11,
414  .index = REG_GP_R11,
415  .global_index = REG_R11,
416  .dwarf_number = 11,
417  .encoding = REG_GP_R11,
418  .is_virtual = false,
419  },
420  {
421  .name = "r12",
422  .cls = &arm_reg_classes[CLASS_arm_gp],
423  .single_req = &arm_single_reg_req_gp_r12,
424  .index = REG_GP_R12,
425  .global_index = REG_R12,
426  .dwarf_number = 12,
427  .encoding = REG_GP_R12,
428  .is_virtual = false,
429  },
430  {
431  .name = "sp",
432  .cls = &arm_reg_classes[CLASS_arm_gp],
433  .single_req = &arm_single_reg_req_gp_sp,
434  .index = REG_GP_SP,
435  .global_index = REG_SP,
436  .dwarf_number = 13,
437  .encoding = REG_GP_SP,
438  .is_virtual = false,
439  },
440  {
441  .name = "lr",
442  .cls = &arm_reg_classes[CLASS_arm_gp],
443  .single_req = &arm_single_reg_req_gp_lr,
444  .index = REG_GP_LR,
445  .global_index = REG_LR,
446  .dwarf_number = 14,
447  .encoding = REG_GP_LR,
448  .is_virtual = false,
449  },
450  {
451  .name = "pc",
452  .cls = &arm_reg_classes[CLASS_arm_gp],
453  .single_req = &arm_single_reg_req_gp_pc,
454  .index = REG_GP_PC,
455  .global_index = REG_PC,
456  .dwarf_number = 15,
457  .encoding = REG_GP_PC,
458  .is_virtual = false,
459  },
460 
461 };
462 
466 void arm_register_init(void)
467 {
468  arm_reg_classes[CLASS_arm_flags].mode = arm_mode_flags;
469  arm_reg_classes[CLASS_arm_fpa].mode = mode_F;
470  arm_reg_classes[CLASS_arm_gp].mode = arm_mode_gp;
471 
472 }
ir_mode * mode_F
ieee754 binary32 float (single precision)
Definition: irmode.h:180