src/hotspot/cpu/sparc/register_sparc.hpp
changeset 49625 94ef8da94ce9
parent 47561 f59f0e51ef8a
child 53244 9807daeb47c4
equal deleted inserted replaced
49624:cfde7ece3113 49625:94ef8da94ce9
   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: