11 #include "gen_riscv_regalloc_if.h"
13 #include "riscv_bearch_t.h"
15 const arch_register_req_t riscv_class_reg_req_gp = {
16 .cls = &riscv_reg_classes[CLASS_riscv_gp],
19 static const unsigned riscv_limited_gp_zero[] = { (1U << REG_GP_ZERO) };
20 const arch_register_req_t riscv_single_reg_req_gp_zero = {
21 .cls = &riscv_reg_classes[CLASS_riscv_gp],
22 .limited = riscv_limited_gp_zero,
25 static const unsigned riscv_limited_gp_ra[] = { (1U << REG_GP_RA) };
26 const arch_register_req_t riscv_single_reg_req_gp_ra = {
27 .cls = &riscv_reg_classes[CLASS_riscv_gp],
28 .limited = riscv_limited_gp_ra,
31 static const unsigned riscv_limited_gp_sp[] = { (1U << REG_GP_SP) };
32 const arch_register_req_t riscv_single_reg_req_gp_sp = {
33 .cls = &riscv_reg_classes[CLASS_riscv_gp],
34 .limited = riscv_limited_gp_sp,
37 static const unsigned riscv_limited_gp_gp[] = { (1U << REG_GP_GP) };
38 const arch_register_req_t riscv_single_reg_req_gp_gp = {
39 .cls = &riscv_reg_classes[CLASS_riscv_gp],
40 .limited = riscv_limited_gp_gp,
43 static const unsigned riscv_limited_gp_tp[] = { (1U << REG_GP_TP) };
44 const arch_register_req_t riscv_single_reg_req_gp_tp = {
45 .cls = &riscv_reg_classes[CLASS_riscv_gp],
46 .limited = riscv_limited_gp_tp,
49 static const unsigned riscv_limited_gp_t0[] = { (1U << REG_GP_T0) };
50 const arch_register_req_t riscv_single_reg_req_gp_t0 = {
51 .cls = &riscv_reg_classes[CLASS_riscv_gp],
52 .limited = riscv_limited_gp_t0,
55 static const unsigned riscv_limited_gp_t1[] = { (1U << REG_GP_T1) };
56 const arch_register_req_t riscv_single_reg_req_gp_t1 = {
57 .cls = &riscv_reg_classes[CLASS_riscv_gp],
58 .limited = riscv_limited_gp_t1,
61 static const unsigned riscv_limited_gp_t2[] = { (1U << REG_GP_T2) };
62 const arch_register_req_t riscv_single_reg_req_gp_t2 = {
63 .cls = &riscv_reg_classes[CLASS_riscv_gp],
64 .limited = riscv_limited_gp_t2,
67 static const unsigned riscv_limited_gp_s0[] = { (1U << REG_GP_S0) };
68 const arch_register_req_t riscv_single_reg_req_gp_s0 = {
69 .cls = &riscv_reg_classes[CLASS_riscv_gp],
70 .limited = riscv_limited_gp_s0,
73 static const unsigned riscv_limited_gp_s1[] = { (1U << REG_GP_S1) };
74 const arch_register_req_t riscv_single_reg_req_gp_s1 = {
75 .cls = &riscv_reg_classes[CLASS_riscv_gp],
76 .limited = riscv_limited_gp_s1,
79 static const unsigned riscv_limited_gp_a0[] = { (1U << REG_GP_A0) };
80 const arch_register_req_t riscv_single_reg_req_gp_a0 = {
81 .cls = &riscv_reg_classes[CLASS_riscv_gp],
82 .limited = riscv_limited_gp_a0,
85 static const unsigned riscv_limited_gp_a1[] = { (1U << REG_GP_A1) };
86 const arch_register_req_t riscv_single_reg_req_gp_a1 = {
87 .cls = &riscv_reg_classes[CLASS_riscv_gp],
88 .limited = riscv_limited_gp_a1,
91 static const unsigned riscv_limited_gp_a2[] = { (1U << REG_GP_A2) };
92 const arch_register_req_t riscv_single_reg_req_gp_a2 = {
93 .cls = &riscv_reg_classes[CLASS_riscv_gp],
94 .limited = riscv_limited_gp_a2,
97 static const unsigned riscv_limited_gp_a3[] = { (1U << REG_GP_A3) };
98 const arch_register_req_t riscv_single_reg_req_gp_a3 = {
99 .cls = &riscv_reg_classes[CLASS_riscv_gp],
100 .limited = riscv_limited_gp_a3,
103 static const unsigned riscv_limited_gp_a4[] = { (1U << REG_GP_A4) };
104 const arch_register_req_t riscv_single_reg_req_gp_a4 = {
105 .cls = &riscv_reg_classes[CLASS_riscv_gp],
106 .limited = riscv_limited_gp_a4,
109 static const unsigned riscv_limited_gp_a5[] = { (1U << REG_GP_A5) };
110 const arch_register_req_t riscv_single_reg_req_gp_a5 = {
111 .cls = &riscv_reg_classes[CLASS_riscv_gp],
112 .limited = riscv_limited_gp_a5,
115 static const unsigned riscv_limited_gp_a6[] = { (1U << REG_GP_A6) };
116 const arch_register_req_t riscv_single_reg_req_gp_a6 = {
117 .cls = &riscv_reg_classes[CLASS_riscv_gp],
118 .limited = riscv_limited_gp_a6,
121 static const unsigned riscv_limited_gp_a7[] = { (1U << REG_GP_A7) };
122 const arch_register_req_t riscv_single_reg_req_gp_a7 = {
123 .cls = &riscv_reg_classes[CLASS_riscv_gp],
124 .limited = riscv_limited_gp_a7,
127 static const unsigned riscv_limited_gp_s2[] = { (1U << REG_GP_S2) };
128 const arch_register_req_t riscv_single_reg_req_gp_s2 = {
129 .cls = &riscv_reg_classes[CLASS_riscv_gp],
130 .limited = riscv_limited_gp_s2,
133 static const unsigned riscv_limited_gp_s3[] = { (1U << REG_GP_S3) };
134 const arch_register_req_t riscv_single_reg_req_gp_s3 = {
135 .cls = &riscv_reg_classes[CLASS_riscv_gp],
136 .limited = riscv_limited_gp_s3,
139 static const unsigned riscv_limited_gp_s4[] = { (1U << REG_GP_S4) };
140 const arch_register_req_t riscv_single_reg_req_gp_s4 = {
141 .cls = &riscv_reg_classes[CLASS_riscv_gp],
142 .limited = riscv_limited_gp_s4,
145 static const unsigned riscv_limited_gp_s5[] = { (1U << REG_GP_S5) };
146 const arch_register_req_t riscv_single_reg_req_gp_s5 = {
147 .cls = &riscv_reg_classes[CLASS_riscv_gp],
148 .limited = riscv_limited_gp_s5,
151 static const unsigned riscv_limited_gp_s6[] = { (1U << REG_GP_S6) };
152 const arch_register_req_t riscv_single_reg_req_gp_s6 = {
153 .cls = &riscv_reg_classes[CLASS_riscv_gp],
154 .limited = riscv_limited_gp_s6,
157 static const unsigned riscv_limited_gp_s7[] = { (1U << REG_GP_S7) };
158 const arch_register_req_t riscv_single_reg_req_gp_s7 = {
159 .cls = &riscv_reg_classes[CLASS_riscv_gp],
160 .limited = riscv_limited_gp_s7,
163 static const unsigned riscv_limited_gp_s8[] = { (1U << REG_GP_S8) };
164 const arch_register_req_t riscv_single_reg_req_gp_s8 = {
165 .cls = &riscv_reg_classes[CLASS_riscv_gp],
166 .limited = riscv_limited_gp_s8,
169 static const unsigned riscv_limited_gp_s9[] = { (1U << REG_GP_S9) };
170 const arch_register_req_t riscv_single_reg_req_gp_s9 = {
171 .cls = &riscv_reg_classes[CLASS_riscv_gp],
172 .limited = riscv_limited_gp_s9,
175 static const unsigned riscv_limited_gp_s10[] = { (1U << REG_GP_S10) };
176 const arch_register_req_t riscv_single_reg_req_gp_s10 = {
177 .cls = &riscv_reg_classes[CLASS_riscv_gp],
178 .limited = riscv_limited_gp_s10,
181 static const unsigned riscv_limited_gp_s11[] = { (1U << REG_GP_S11) };
182 const arch_register_req_t riscv_single_reg_req_gp_s11 = {
183 .cls = &riscv_reg_classes[CLASS_riscv_gp],
184 .limited = riscv_limited_gp_s11,
187 static const unsigned riscv_limited_gp_t3[] = { (1U << REG_GP_T3) };
188 const arch_register_req_t riscv_single_reg_req_gp_t3 = {
189 .cls = &riscv_reg_classes[CLASS_riscv_gp],
190 .limited = riscv_limited_gp_t3,
193 static const unsigned riscv_limited_gp_t4[] = { (1U << REG_GP_T4) };
194 const arch_register_req_t riscv_single_reg_req_gp_t4 = {
195 .cls = &riscv_reg_classes[CLASS_riscv_gp],
196 .limited = riscv_limited_gp_t4,
199 static const unsigned riscv_limited_gp_t5[] = { (1U << REG_GP_T5) };
200 const arch_register_req_t riscv_single_reg_req_gp_t5 = {
201 .cls = &riscv_reg_classes[CLASS_riscv_gp],
202 .limited = riscv_limited_gp_t5,
205 static const unsigned riscv_limited_gp_t6[] = { (1U << REG_GP_T6) };
206 const arch_register_req_t riscv_single_reg_req_gp_t6 = {
207 .cls = &riscv_reg_classes[CLASS_riscv_gp],
208 .limited = riscv_limited_gp_t6,
213 arch_register_class_t riscv_reg_classes[] = {
217 .regs = &riscv_registers[REG_ZERO],
218 .class_req = &riscv_class_reg_req_gp,
219 .index = CLASS_riscv_gp,
226 const arch_register_t riscv_registers[] = {
229 .cls = &riscv_reg_classes[CLASS_riscv_gp],
230 .single_req = &riscv_single_reg_req_gp_zero,
231 .index = REG_GP_ZERO,
232 .global_index = REG_ZERO,
239 .cls = &riscv_reg_classes[CLASS_riscv_gp],
240 .single_req = &riscv_single_reg_req_gp_ra,
242 .global_index = REG_RA,
249 .cls = &riscv_reg_classes[CLASS_riscv_gp],
250 .single_req = &riscv_single_reg_req_gp_sp,
252 .global_index = REG_SP,
259 .cls = &riscv_reg_classes[CLASS_riscv_gp],
260 .single_req = &riscv_single_reg_req_gp_gp,
262 .global_index = REG_GP,
269 .cls = &riscv_reg_classes[CLASS_riscv_gp],
270 .single_req = &riscv_single_reg_req_gp_tp,
272 .global_index = REG_TP,
279 .cls = &riscv_reg_classes[CLASS_riscv_gp],
280 .single_req = &riscv_single_reg_req_gp_t0,
282 .global_index = REG_T0,
289 .cls = &riscv_reg_classes[CLASS_riscv_gp],
290 .single_req = &riscv_single_reg_req_gp_t1,
292 .global_index = REG_T1,
299 .cls = &riscv_reg_classes[CLASS_riscv_gp],
300 .single_req = &riscv_single_reg_req_gp_t2,
302 .global_index = REG_T2,
309 .cls = &riscv_reg_classes[CLASS_riscv_gp],
310 .single_req = &riscv_single_reg_req_gp_s0,
312 .global_index = REG_S0,
319 .cls = &riscv_reg_classes[CLASS_riscv_gp],
320 .single_req = &riscv_single_reg_req_gp_s1,
322 .global_index = REG_S1,
329 .cls = &riscv_reg_classes[CLASS_riscv_gp],
330 .single_req = &riscv_single_reg_req_gp_a0,
332 .global_index = REG_A0,
339 .cls = &riscv_reg_classes[CLASS_riscv_gp],
340 .single_req = &riscv_single_reg_req_gp_a1,
342 .global_index = REG_A1,
349 .cls = &riscv_reg_classes[CLASS_riscv_gp],
350 .single_req = &riscv_single_reg_req_gp_a2,
352 .global_index = REG_A2,
359 .cls = &riscv_reg_classes[CLASS_riscv_gp],
360 .single_req = &riscv_single_reg_req_gp_a3,
362 .global_index = REG_A3,
369 .cls = &riscv_reg_classes[CLASS_riscv_gp],
370 .single_req = &riscv_single_reg_req_gp_a4,
372 .global_index = REG_A4,
379 .cls = &riscv_reg_classes[CLASS_riscv_gp],
380 .single_req = &riscv_single_reg_req_gp_a5,
382 .global_index = REG_A5,
389 .cls = &riscv_reg_classes[CLASS_riscv_gp],
390 .single_req = &riscv_single_reg_req_gp_a6,
392 .global_index = REG_A6,
399 .cls = &riscv_reg_classes[CLASS_riscv_gp],
400 .single_req = &riscv_single_reg_req_gp_a7,
402 .global_index = REG_A7,
409 .cls = &riscv_reg_classes[CLASS_riscv_gp],
410 .single_req = &riscv_single_reg_req_gp_s2,
412 .global_index = REG_S2,
419 .cls = &riscv_reg_classes[CLASS_riscv_gp],
420 .single_req = &riscv_single_reg_req_gp_s3,
422 .global_index = REG_S3,
429 .cls = &riscv_reg_classes[CLASS_riscv_gp],
430 .single_req = &riscv_single_reg_req_gp_s4,
432 .global_index = REG_S4,
439 .cls = &riscv_reg_classes[CLASS_riscv_gp],
440 .single_req = &riscv_single_reg_req_gp_s5,
442 .global_index = REG_S5,
449 .cls = &riscv_reg_classes[CLASS_riscv_gp],
450 .single_req = &riscv_single_reg_req_gp_s6,
452 .global_index = REG_S6,
459 .cls = &riscv_reg_classes[CLASS_riscv_gp],
460 .single_req = &riscv_single_reg_req_gp_s7,
462 .global_index = REG_S7,
469 .cls = &riscv_reg_classes[CLASS_riscv_gp],
470 .single_req = &riscv_single_reg_req_gp_s8,
472 .global_index = REG_S8,
479 .cls = &riscv_reg_classes[CLASS_riscv_gp],
480 .single_req = &riscv_single_reg_req_gp_s9,
482 .global_index = REG_S9,
489 .cls = &riscv_reg_classes[CLASS_riscv_gp],
490 .single_req = &riscv_single_reg_req_gp_s10,
492 .global_index = REG_S10,
499 .cls = &riscv_reg_classes[CLASS_riscv_gp],
500 .single_req = &riscv_single_reg_req_gp_s11,
502 .global_index = REG_S11,
509 .cls = &riscv_reg_classes[CLASS_riscv_gp],
510 .single_req = &riscv_single_reg_req_gp_t3,
512 .global_index = REG_T3,
519 .cls = &riscv_reg_classes[CLASS_riscv_gp],
520 .single_req = &riscv_single_reg_req_gp_t4,
522 .global_index = REG_T4,
529 .cls = &riscv_reg_classes[CLASS_riscv_gp],
530 .single_req = &riscv_single_reg_req_gp_t5,
532 .global_index = REG_T5,
539 .cls = &riscv_reg_classes[CLASS_riscv_gp],
540 .single_req = &riscv_single_reg_req_gp_t6,
542 .global_index = REG_T6,
553 void riscv_register_init(
void)
555 riscv_reg_classes[CLASS_riscv_gp].mode =
mode_Iu;