libFirm
gen_sparc_regalloc_if.h
1 
9 #ifndef FIRM_BE_SPARC_GEN_SPARC_REGALLOC_IF_H
10 #define FIRM_BE_SPARC_GEN_SPARC_REGALLOC_IF_H
11 
12 #include "bearch.h"
13 
15 enum reg_indices {
16  REG_PSR,
17  REG_F0,
18  REG_F1,
19  REG_F2,
20  REG_F3,
21  REG_F4,
22  REG_F5,
23  REG_F6,
24  REG_F7,
25  REG_F8,
26  REG_F9,
27  REG_F10,
28  REG_F11,
29  REG_F12,
30  REG_F13,
31  REG_F14,
32  REG_F15,
33  REG_F16,
34  REG_F17,
35  REG_F18,
36  REG_F19,
37  REG_F20,
38  REG_F21,
39  REG_F22,
40  REG_F23,
41  REG_F24,
42  REG_F25,
43  REG_F26,
44  REG_F27,
45  REG_F28,
46  REG_F29,
47  REG_F30,
48  REG_F31,
49  REG_FSR,
50  REG_L0,
51  REG_L1,
52  REG_L2,
53  REG_L3,
54  REG_L4,
55  REG_L5,
56  REG_L6,
57  REG_L7,
58  REG_G0,
59  REG_G1,
60  REG_G2,
61  REG_G3,
62  REG_G4,
63  REG_G5,
64  REG_G6,
65  REG_G7,
66  REG_O0,
67  REG_O1,
68  REG_O2,
69  REG_O3,
70  REG_O4,
71  REG_O5,
72  REG_SP,
73  REG_O7,
74  REG_I0,
75  REG_I1,
76  REG_I2,
77  REG_I3,
78  REG_I4,
79  REG_I5,
80  REG_FP,
81  REG_I7,
82  REG_Y,
83 
84  N_SPARC_REGISTERS
85 };
86 
88 enum {
89  REG_FLAGS_PSR,
90 };
91 
92 enum {
93  REG_FP_F0,
94  REG_FP_F1,
95  REG_FP_F2,
96  REG_FP_F3,
97  REG_FP_F4,
98  REG_FP_F5,
99  REG_FP_F6,
100  REG_FP_F7,
101  REG_FP_F8,
102  REG_FP_F9,
103  REG_FP_F10,
104  REG_FP_F11,
105  REG_FP_F12,
106  REG_FP_F13,
107  REG_FP_F14,
108  REG_FP_F15,
109  REG_FP_F16,
110  REG_FP_F17,
111  REG_FP_F18,
112  REG_FP_F19,
113  REG_FP_F20,
114  REG_FP_F21,
115  REG_FP_F22,
116  REG_FP_F23,
117  REG_FP_F24,
118  REG_FP_F25,
119  REG_FP_F26,
120  REG_FP_F27,
121  REG_FP_F28,
122  REG_FP_F29,
123  REG_FP_F30,
124  REG_FP_F31,
125 };
126 
127 enum {
128  REG_FPFLAGS_FSR,
129 };
130 
131 enum {
132  REG_GP_L0,
133  REG_GP_L1,
134  REG_GP_L2,
135  REG_GP_L3,
136  REG_GP_L4,
137  REG_GP_L5,
138  REG_GP_L6,
139  REG_GP_L7,
140  REG_GP_G0,
141  REG_GP_G1,
142  REG_GP_G2,
143  REG_GP_G3,
144  REG_GP_G4,
145  REG_GP_G5,
146  REG_GP_G6,
147  REG_GP_G7,
148  REG_GP_O0,
149  REG_GP_O1,
150  REG_GP_O2,
151  REG_GP_O3,
152  REG_GP_O4,
153  REG_GP_O5,
154  REG_GP_SP,
155  REG_GP_O7,
156  REG_GP_I0,
157  REG_GP_I1,
158  REG_GP_I2,
159  REG_GP_I3,
160  REG_GP_I4,
161  REG_GP_I5,
162  REG_GP_FP,
163  REG_GP_I7,
164 };
165 
166 enum {
167  REG_MUL_DIV_HIGH_RES_Y,
168 };
169 
170 
172 enum {
173  N_sparc_flags_REGS = 1,
174  N_sparc_fp_REGS = 32,
175  N_sparc_fpflags_REGS = 1,
176  N_sparc_gp_REGS = 32,
177  N_sparc_mul_div_high_res_REGS = 1,
178 
179 };
180 
181 enum {
182  CLASS_sparc_flags,
183  CLASS_sparc_fp,
184  CLASS_sparc_fpflags,
185  CLASS_sparc_gp,
186  CLASS_sparc_mul_div_high_res,
187  N_SPARC_CLASSES = 5
188 };
189 
190 extern const arch_register_req_t sparc_class_reg_req_flags;
191 extern const arch_register_req_t sparc_single_reg_req_flags_psr;
192 extern const arch_register_req_t sparc_class_reg_req_fp;
193 extern const arch_register_req_t sparc_single_reg_req_fp_f0;
194 extern const arch_register_req_t sparc_single_reg_req_fp_f1;
195 extern const arch_register_req_t sparc_single_reg_req_fp_f2;
196 extern const arch_register_req_t sparc_single_reg_req_fp_f3;
197 extern const arch_register_req_t sparc_single_reg_req_fp_f4;
198 extern const arch_register_req_t sparc_single_reg_req_fp_f5;
199 extern const arch_register_req_t sparc_single_reg_req_fp_f6;
200 extern const arch_register_req_t sparc_single_reg_req_fp_f7;
201 extern const arch_register_req_t sparc_single_reg_req_fp_f8;
202 extern const arch_register_req_t sparc_single_reg_req_fp_f9;
203 extern const arch_register_req_t sparc_single_reg_req_fp_f10;
204 extern const arch_register_req_t sparc_single_reg_req_fp_f11;
205 extern const arch_register_req_t sparc_single_reg_req_fp_f12;
206 extern const arch_register_req_t sparc_single_reg_req_fp_f13;
207 extern const arch_register_req_t sparc_single_reg_req_fp_f14;
208 extern const arch_register_req_t sparc_single_reg_req_fp_f15;
209 extern const arch_register_req_t sparc_single_reg_req_fp_f16;
210 extern const arch_register_req_t sparc_single_reg_req_fp_f17;
211 extern const arch_register_req_t sparc_single_reg_req_fp_f18;
212 extern const arch_register_req_t sparc_single_reg_req_fp_f19;
213 extern const arch_register_req_t sparc_single_reg_req_fp_f20;
214 extern const arch_register_req_t sparc_single_reg_req_fp_f21;
215 extern const arch_register_req_t sparc_single_reg_req_fp_f22;
216 extern const arch_register_req_t sparc_single_reg_req_fp_f23;
217 extern const arch_register_req_t sparc_single_reg_req_fp_f24;
218 extern const arch_register_req_t sparc_single_reg_req_fp_f25;
219 extern const arch_register_req_t sparc_single_reg_req_fp_f26;
220 extern const arch_register_req_t sparc_single_reg_req_fp_f27;
221 extern const arch_register_req_t sparc_single_reg_req_fp_f28;
222 extern const arch_register_req_t sparc_single_reg_req_fp_f29;
223 extern const arch_register_req_t sparc_single_reg_req_fp_f30;
224 extern const arch_register_req_t sparc_single_reg_req_fp_f31;
225 extern const arch_register_req_t sparc_class_reg_req_fpflags;
226 extern const arch_register_req_t sparc_single_reg_req_fpflags_fsr;
227 extern const arch_register_req_t sparc_class_reg_req_gp;
228 extern const arch_register_req_t sparc_single_reg_req_gp_l0;
229 extern const arch_register_req_t sparc_single_reg_req_gp_l1;
230 extern const arch_register_req_t sparc_single_reg_req_gp_l2;
231 extern const arch_register_req_t sparc_single_reg_req_gp_l3;
232 extern const arch_register_req_t sparc_single_reg_req_gp_l4;
233 extern const arch_register_req_t sparc_single_reg_req_gp_l5;
234 extern const arch_register_req_t sparc_single_reg_req_gp_l6;
235 extern const arch_register_req_t sparc_single_reg_req_gp_l7;
236 extern const arch_register_req_t sparc_single_reg_req_gp_g0;
237 extern const arch_register_req_t sparc_single_reg_req_gp_g1;
238 extern const arch_register_req_t sparc_single_reg_req_gp_g2;
239 extern const arch_register_req_t sparc_single_reg_req_gp_g3;
240 extern const arch_register_req_t sparc_single_reg_req_gp_g4;
241 extern const arch_register_req_t sparc_single_reg_req_gp_g5;
242 extern const arch_register_req_t sparc_single_reg_req_gp_g6;
243 extern const arch_register_req_t sparc_single_reg_req_gp_g7;
244 extern const arch_register_req_t sparc_single_reg_req_gp_o0;
245 extern const arch_register_req_t sparc_single_reg_req_gp_o1;
246 extern const arch_register_req_t sparc_single_reg_req_gp_o2;
247 extern const arch_register_req_t sparc_single_reg_req_gp_o3;
248 extern const arch_register_req_t sparc_single_reg_req_gp_o4;
249 extern const arch_register_req_t sparc_single_reg_req_gp_o5;
250 extern const arch_register_req_t sparc_single_reg_req_gp_sp;
251 extern const arch_register_req_t sparc_single_reg_req_gp_o7;
252 extern const arch_register_req_t sparc_single_reg_req_gp_i0;
253 extern const arch_register_req_t sparc_single_reg_req_gp_i1;
254 extern const arch_register_req_t sparc_single_reg_req_gp_i2;
255 extern const arch_register_req_t sparc_single_reg_req_gp_i3;
256 extern const arch_register_req_t sparc_single_reg_req_gp_i4;
257 extern const arch_register_req_t sparc_single_reg_req_gp_i5;
258 extern const arch_register_req_t sparc_single_reg_req_gp_fp;
259 extern const arch_register_req_t sparc_single_reg_req_gp_i7;
260 extern const arch_register_req_t sparc_class_reg_req_mul_div_high_res;
261 extern const arch_register_req_t sparc_single_reg_req_mul_div_high_res_y;
262 
263 
264 extern const arch_register_t sparc_registers[N_SPARC_REGISTERS];
265 
266 extern arch_register_class_t sparc_reg_classes[N_SPARC_CLASSES];
267 
268 void sparc_register_init(void);
269 
270 #endif