11 #include "gen_arm_regalloc_if.h"
13 #include "arm_bearch_t.h"
15 const arch_register_req_t arm_class_reg_req_flags = {
16 .cls = &arm_reg_classes[CLASS_arm_flags],
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,
25 const arch_register_req_t arm_class_reg_req_fpa = {
26 .cls = &arm_reg_classes[CLASS_arm_fpa],
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,
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,
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,
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,
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,
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,
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,
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,
77 const arch_register_req_t arm_class_reg_req_gp = {
78 .cls = &arm_reg_classes[CLASS_arm_gp],
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
179 arch_register_class_t arm_reg_classes[] = {
183 .regs = &arm_registers[REG_FL],
184 .class_req = &arm_class_reg_req_flags,
185 .index = CLASS_arm_flags,
192 .regs = &arm_registers[REG_F0],
193 .class_req = &arm_class_reg_req_fpa,
194 .index = CLASS_arm_fpa,
200 .regs = &arm_registers[REG_R0],
201 .class_req = &arm_class_reg_req_gp,
202 .index = CLASS_arm_gp,
209 const arch_register_t arm_registers[] = {
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,
217 .encoding = REG_FLAGS_FL,
222 .cls = &arm_reg_classes[CLASS_arm_fpa],
223 .single_req = &arm_single_reg_req_fpa_f0,
225 .global_index = REG_F0,
227 .encoding = REG_FPA_F0,
232 .cls = &arm_reg_classes[CLASS_arm_fpa],
233 .single_req = &arm_single_reg_req_fpa_f1,
235 .global_index = REG_F1,
237 .encoding = REG_FPA_F1,
242 .cls = &arm_reg_classes[CLASS_arm_fpa],
243 .single_req = &arm_single_reg_req_fpa_f2,
245 .global_index = REG_F2,
247 .encoding = REG_FPA_F2,
252 .cls = &arm_reg_classes[CLASS_arm_fpa],
253 .single_req = &arm_single_reg_req_fpa_f3,
255 .global_index = REG_F3,
257 .encoding = REG_FPA_F3,
262 .cls = &arm_reg_classes[CLASS_arm_fpa],
263 .single_req = &arm_single_reg_req_fpa_f4,
265 .global_index = REG_F4,
267 .encoding = REG_FPA_F4,
272 .cls = &arm_reg_classes[CLASS_arm_fpa],
273 .single_req = &arm_single_reg_req_fpa_f5,
275 .global_index = REG_F5,
277 .encoding = REG_FPA_F5,
282 .cls = &arm_reg_classes[CLASS_arm_fpa],
283 .single_req = &arm_single_reg_req_fpa_f6,
285 .global_index = REG_F6,
287 .encoding = REG_FPA_F6,
292 .cls = &arm_reg_classes[CLASS_arm_fpa],
293 .single_req = &arm_single_reg_req_fpa_f7,
295 .global_index = REG_F7,
297 .encoding = REG_FPA_F7,
302 .cls = &arm_reg_classes[CLASS_arm_gp],
303 .single_req = &arm_single_reg_req_gp_r0,
305 .global_index = REG_R0,
307 .encoding = REG_GP_R0,
312 .cls = &arm_reg_classes[CLASS_arm_gp],
313 .single_req = &arm_single_reg_req_gp_r1,
315 .global_index = REG_R1,
317 .encoding = REG_GP_R1,
322 .cls = &arm_reg_classes[CLASS_arm_gp],
323 .single_req = &arm_single_reg_req_gp_r2,
325 .global_index = REG_R2,
327 .encoding = REG_GP_R2,
332 .cls = &arm_reg_classes[CLASS_arm_gp],
333 .single_req = &arm_single_reg_req_gp_r3,
335 .global_index = REG_R3,
337 .encoding = REG_GP_R3,
342 .cls = &arm_reg_classes[CLASS_arm_gp],
343 .single_req = &arm_single_reg_req_gp_r4,
345 .global_index = REG_R4,
347 .encoding = REG_GP_R4,
352 .cls = &arm_reg_classes[CLASS_arm_gp],
353 .single_req = &arm_single_reg_req_gp_r5,
355 .global_index = REG_R5,
357 .encoding = REG_GP_R5,
362 .cls = &arm_reg_classes[CLASS_arm_gp],
363 .single_req = &arm_single_reg_req_gp_r6,
365 .global_index = REG_R6,
367 .encoding = REG_GP_R6,
372 .cls = &arm_reg_classes[CLASS_arm_gp],
373 .single_req = &arm_single_reg_req_gp_r7,
375 .global_index = REG_R7,
377 .encoding = REG_GP_R7,
382 .cls = &arm_reg_classes[CLASS_arm_gp],
383 .single_req = &arm_single_reg_req_gp_r8,
385 .global_index = REG_R8,
387 .encoding = REG_GP_R8,
392 .cls = &arm_reg_classes[CLASS_arm_gp],
393 .single_req = &arm_single_reg_req_gp_r9,
395 .global_index = REG_R9,
397 .encoding = REG_GP_R9,
402 .cls = &arm_reg_classes[CLASS_arm_gp],
403 .single_req = &arm_single_reg_req_gp_r10,
405 .global_index = REG_R10,
407 .encoding = REG_GP_R10,
412 .cls = &arm_reg_classes[CLASS_arm_gp],
413 .single_req = &arm_single_reg_req_gp_r11,
415 .global_index = REG_R11,
417 .encoding = REG_GP_R11,
422 .cls = &arm_reg_classes[CLASS_arm_gp],
423 .single_req = &arm_single_reg_req_gp_r12,
425 .global_index = REG_R12,
427 .encoding = REG_GP_R12,
432 .cls = &arm_reg_classes[CLASS_arm_gp],
433 .single_req = &arm_single_reg_req_gp_sp,
435 .global_index = REG_SP,
437 .encoding = REG_GP_SP,
442 .cls = &arm_reg_classes[CLASS_arm_gp],
443 .single_req = &arm_single_reg_req_gp_lr,
445 .global_index = REG_LR,
447 .encoding = REG_GP_LR,
452 .cls = &arm_reg_classes[CLASS_arm_gp],
453 .single_req = &arm_single_reg_req_gp_pc,
455 .global_index = REG_PC,
457 .encoding = REG_GP_PC,
466 void arm_register_init(
void)
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;
ir_mode * mode_F
ieee754 binary32 float (single precision)