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