151 CONSTANT_REGISTER_DECLARATION(Register, I6 , (RegisterImpl::ibase + 6)); |
151 CONSTANT_REGISTER_DECLARATION(Register, I6 , (RegisterImpl::ibase + 6)); |
152 CONSTANT_REGISTER_DECLARATION(Register, I7 , (RegisterImpl::ibase + 7)); |
152 CONSTANT_REGISTER_DECLARATION(Register, I7 , (RegisterImpl::ibase + 7)); |
153 |
153 |
154 CONSTANT_REGISTER_DECLARATION(Register, FP , (RegisterImpl::ibase + 6)); |
154 CONSTANT_REGISTER_DECLARATION(Register, FP , (RegisterImpl::ibase + 6)); |
155 CONSTANT_REGISTER_DECLARATION(Register, SP , (RegisterImpl::obase + 6)); |
155 CONSTANT_REGISTER_DECLARATION(Register, SP , (RegisterImpl::obase + 6)); |
156 |
|
157 // |
|
158 // Because sparc has so many registers, #define'ing values for the is |
|
159 // beneficial in code size and the cost of some of the dangers of |
|
160 // defines. We don't use them on Intel because win32 uses asm |
|
161 // directives which use the same names for registers as Hotspot does, |
|
162 // so #defines would screw up the inline assembly. If a particular |
|
163 // file has a problem with these defines then it's possible to turn |
|
164 // them off in that file by defining DONT_USE_REGISTER_DEFINES. |
|
165 // register_definition_sparc.cpp does that so that it's able to |
|
166 // provide real definitions of these registers for use in debuggers |
|
167 // and such. |
|
168 // |
|
169 |
|
170 #ifndef DONT_USE_REGISTER_DEFINES |
|
171 #define noreg ((Register)(noreg_RegisterEnumValue)) |
|
172 |
|
173 #define G0 ((Register)(G0_RegisterEnumValue)) |
|
174 #define G1 ((Register)(G1_RegisterEnumValue)) |
|
175 #define G2 ((Register)(G2_RegisterEnumValue)) |
|
176 #define G3 ((Register)(G3_RegisterEnumValue)) |
|
177 #define G4 ((Register)(G4_RegisterEnumValue)) |
|
178 #define G5 ((Register)(G5_RegisterEnumValue)) |
|
179 #define G6 ((Register)(G6_RegisterEnumValue)) |
|
180 #define G7 ((Register)(G7_RegisterEnumValue)) |
|
181 |
|
182 #define O0 ((Register)(O0_RegisterEnumValue)) |
|
183 #define O1 ((Register)(O1_RegisterEnumValue)) |
|
184 #define O2 ((Register)(O2_RegisterEnumValue)) |
|
185 #define O3 ((Register)(O3_RegisterEnumValue)) |
|
186 #define O4 ((Register)(O4_RegisterEnumValue)) |
|
187 #define O5 ((Register)(O5_RegisterEnumValue)) |
|
188 #define O6 ((Register)(O6_RegisterEnumValue)) |
|
189 #define O7 ((Register)(O7_RegisterEnumValue)) |
|
190 |
|
191 #define L0 ((Register)(L0_RegisterEnumValue)) |
|
192 #define L1 ((Register)(L1_RegisterEnumValue)) |
|
193 #define L2 ((Register)(L2_RegisterEnumValue)) |
|
194 #define L3 ((Register)(L3_RegisterEnumValue)) |
|
195 #define L4 ((Register)(L4_RegisterEnumValue)) |
|
196 #define L5 ((Register)(L5_RegisterEnumValue)) |
|
197 #define L6 ((Register)(L6_RegisterEnumValue)) |
|
198 #define L7 ((Register)(L7_RegisterEnumValue)) |
|
199 |
|
200 #define I0 ((Register)(I0_RegisterEnumValue)) |
|
201 #define I1 ((Register)(I1_RegisterEnumValue)) |
|
202 #define I2 ((Register)(I2_RegisterEnumValue)) |
|
203 #define I3 ((Register)(I3_RegisterEnumValue)) |
|
204 #define I4 ((Register)(I4_RegisterEnumValue)) |
|
205 #define I5 ((Register)(I5_RegisterEnumValue)) |
|
206 #define I6 ((Register)(I6_RegisterEnumValue)) |
|
207 #define I7 ((Register)(I7_RegisterEnumValue)) |
|
208 |
|
209 #define FP ((Register)(FP_RegisterEnumValue)) |
|
210 #define SP ((Register)(SP_RegisterEnumValue)) |
|
211 #endif // DONT_USE_REGISTER_DEFINES |
|
212 |
156 |
213 // Use FloatRegister as shortcut |
157 // Use FloatRegister as shortcut |
214 class FloatRegisterImpl; |
158 class FloatRegisterImpl; |
215 typedef FloatRegisterImpl* FloatRegister; |
159 typedef FloatRegisterImpl* FloatRegister; |
216 |
160 |
319 CONSTANT_REGISTER_DECLARATION(FloatRegister, F56 , (56)); |
263 CONSTANT_REGISTER_DECLARATION(FloatRegister, F56 , (56)); |
320 CONSTANT_REGISTER_DECLARATION(FloatRegister, F58 , (58)); |
264 CONSTANT_REGISTER_DECLARATION(FloatRegister, F58 , (58)); |
321 CONSTANT_REGISTER_DECLARATION(FloatRegister, F60 , (60)); |
265 CONSTANT_REGISTER_DECLARATION(FloatRegister, F60 , (60)); |
322 CONSTANT_REGISTER_DECLARATION(FloatRegister, F62 , (62)); |
266 CONSTANT_REGISTER_DECLARATION(FloatRegister, F62 , (62)); |
323 |
267 |
324 |
|
325 #ifndef DONT_USE_REGISTER_DEFINES |
|
326 #define fnoreg ((FloatRegister)(fnoreg_FloatRegisterEnumValue)) |
|
327 #define F0 ((FloatRegister)( F0_FloatRegisterEnumValue)) |
|
328 #define F1 ((FloatRegister)( F1_FloatRegisterEnumValue)) |
|
329 #define F2 ((FloatRegister)( F2_FloatRegisterEnumValue)) |
|
330 #define F3 ((FloatRegister)( F3_FloatRegisterEnumValue)) |
|
331 #define F4 ((FloatRegister)( F4_FloatRegisterEnumValue)) |
|
332 #define F5 ((FloatRegister)( F5_FloatRegisterEnumValue)) |
|
333 #define F6 ((FloatRegister)( F6_FloatRegisterEnumValue)) |
|
334 #define F7 ((FloatRegister)( F7_FloatRegisterEnumValue)) |
|
335 #define F8 ((FloatRegister)( F8_FloatRegisterEnumValue)) |
|
336 #define F9 ((FloatRegister)( F9_FloatRegisterEnumValue)) |
|
337 #define F10 ((FloatRegister)( F10_FloatRegisterEnumValue)) |
|
338 #define F11 ((FloatRegister)( F11_FloatRegisterEnumValue)) |
|
339 #define F12 ((FloatRegister)( F12_FloatRegisterEnumValue)) |
|
340 #define F13 ((FloatRegister)( F13_FloatRegisterEnumValue)) |
|
341 #define F14 ((FloatRegister)( F14_FloatRegisterEnumValue)) |
|
342 #define F15 ((FloatRegister)( F15_FloatRegisterEnumValue)) |
|
343 #define F16 ((FloatRegister)( F16_FloatRegisterEnumValue)) |
|
344 #define F17 ((FloatRegister)( F17_FloatRegisterEnumValue)) |
|
345 #define F18 ((FloatRegister)( F18_FloatRegisterEnumValue)) |
|
346 #define F19 ((FloatRegister)( F19_FloatRegisterEnumValue)) |
|
347 #define F20 ((FloatRegister)( F20_FloatRegisterEnumValue)) |
|
348 #define F21 ((FloatRegister)( F21_FloatRegisterEnumValue)) |
|
349 #define F22 ((FloatRegister)( F22_FloatRegisterEnumValue)) |
|
350 #define F23 ((FloatRegister)( F23_FloatRegisterEnumValue)) |
|
351 #define F24 ((FloatRegister)( F24_FloatRegisterEnumValue)) |
|
352 #define F25 ((FloatRegister)( F25_FloatRegisterEnumValue)) |
|
353 #define F26 ((FloatRegister)( F26_FloatRegisterEnumValue)) |
|
354 #define F27 ((FloatRegister)( F27_FloatRegisterEnumValue)) |
|
355 #define F28 ((FloatRegister)( F28_FloatRegisterEnumValue)) |
|
356 #define F29 ((FloatRegister)( F29_FloatRegisterEnumValue)) |
|
357 #define F30 ((FloatRegister)( F30_FloatRegisterEnumValue)) |
|
358 #define F31 ((FloatRegister)( F31_FloatRegisterEnumValue)) |
|
359 #define F32 ((FloatRegister)( F32_FloatRegisterEnumValue)) |
|
360 #define F34 ((FloatRegister)( F34_FloatRegisterEnumValue)) |
|
361 #define F36 ((FloatRegister)( F36_FloatRegisterEnumValue)) |
|
362 #define F38 ((FloatRegister)( F38_FloatRegisterEnumValue)) |
|
363 #define F40 ((FloatRegister)( F40_FloatRegisterEnumValue)) |
|
364 #define F42 ((FloatRegister)( F42_FloatRegisterEnumValue)) |
|
365 #define F44 ((FloatRegister)( F44_FloatRegisterEnumValue)) |
|
366 #define F46 ((FloatRegister)( F46_FloatRegisterEnumValue)) |
|
367 #define F48 ((FloatRegister)( F48_FloatRegisterEnumValue)) |
|
368 #define F50 ((FloatRegister)( F50_FloatRegisterEnumValue)) |
|
369 #define F52 ((FloatRegister)( F52_FloatRegisterEnumValue)) |
|
370 #define F54 ((FloatRegister)( F54_FloatRegisterEnumValue)) |
|
371 #define F56 ((FloatRegister)( F56_FloatRegisterEnumValue)) |
|
372 #define F58 ((FloatRegister)( F58_FloatRegisterEnumValue)) |
|
373 #define F60 ((FloatRegister)( F60_FloatRegisterEnumValue)) |
|
374 #define F62 ((FloatRegister)( F62_FloatRegisterEnumValue)) |
|
375 #endif // DONT_USE_REGISTER_DEFINES |
|
376 |
|
377 // Maximum number of incoming arguments that can be passed in i registers. |
268 // Maximum number of incoming arguments that can be passed in i registers. |
378 const int SPARC_ARGS_IN_REGS_NUM = 6; |
269 const int SPARC_ARGS_IN_REGS_NUM = 6; |
379 |
270 |
380 class ConcreteRegisterImpl : public AbstractRegisterImpl { |
271 class ConcreteRegisterImpl : public AbstractRegisterImpl { |
381 public: |
272 public: |