src/cpu/mips/vm/register_mips.hpp

Fri, 29 Apr 2016 00:06:10 +0800

author
aoqi
date
Fri, 29 Apr 2016 00:06:10 +0800
changeset 1
2d8a650513c2
child 6880
52ea28d233d2
permissions
-rw-r--r--

Added MIPS 64-bit port.

aoqi@1 1 /*
aoqi@1 2 * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
aoqi@1 3 * Copyright (c) 2015, 2016, Loongson Technology. All rights reserved.
aoqi@1 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@1 5 *
aoqi@1 6 * This code is free software; you can redistribute it and/or modify it
aoqi@1 7 * under the terms of the GNU General Public License version 2 only, as
aoqi@1 8 * published by the Free Software Foundation.
aoqi@1 9 *
aoqi@1 10 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@1 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@1 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@1 13 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@1 14 * accompanied this code).
aoqi@1 15 *
aoqi@1 16 * You should have received a copy of the GNU General Public License version
aoqi@1 17 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@1 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@1 19 *
aoqi@1 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@1 21 * or visit www.oracle.com if you need additional information or have any
aoqi@1 22 * questions.
aoqi@1 23 *
aoqi@1 24 */
aoqi@1 25
aoqi@1 26 #ifndef CPU_MIPS_VM_REGISTER_MIPS_HPP
aoqi@1 27 #define CPU_MIPS_VM_REGISTER_MIPS_HPP
aoqi@1 28
aoqi@1 29 #include "asm/register.hpp"
aoqi@1 30 #include "vm_version_mips.hpp"
aoqi@1 31
aoqi@1 32 class VMRegImpl;
aoqi@1 33 typedef VMRegImpl* VMReg;
aoqi@1 34
aoqi@1 35 // Use Register as shortcut
aoqi@1 36 class RegisterImpl;
aoqi@1 37 typedef RegisterImpl* Register;
aoqi@1 38
aoqi@1 39
aoqi@1 40 // The implementation of integer registers for the ia32 architecture
aoqi@1 41 inline Register as_Register(int encoding) {
aoqi@1 42 return (Register)(intptr_t) encoding;
aoqi@1 43 }
aoqi@1 44
aoqi@1 45 class RegisterImpl: public AbstractRegisterImpl {
aoqi@1 46 public:
aoqi@1 47 enum {
aoqi@1 48 number_of_registers = 32
aoqi@1 49 };
aoqi@1 50
aoqi@1 51 // derived registers, offsets, and addresses
aoqi@1 52 Register successor() const { return as_Register(encoding() + 1); }
aoqi@1 53
aoqi@1 54 // construction
aoqi@1 55 inline friend Register as_Register(int encoding);
aoqi@1 56
aoqi@1 57 VMReg as_VMReg();
aoqi@1 58
aoqi@1 59 // accessors
aoqi@1 60 int encoding() const { assert(is_valid(),err_msg( "invalid register (%d)", (int)(intptr_t)this)); return (intptr_t)this; }
aoqi@1 61 bool is_valid() const { return 0 <= (intptr_t)this && (intptr_t)this < number_of_registers; }
aoqi@1 62 const char* name() const;
aoqi@1 63 };
aoqi@1 64
aoqi@1 65
aoqi@1 66 // The integer registers of the MIPS32 architecture
aoqi@1 67 CONSTANT_REGISTER_DECLARATION(Register, noreg, (-1));
aoqi@1 68
aoqi@1 69
aoqi@1 70 CONSTANT_REGISTER_DECLARATION(Register, i0, (0));
aoqi@1 71 CONSTANT_REGISTER_DECLARATION(Register, i1, (1));
aoqi@1 72 CONSTANT_REGISTER_DECLARATION(Register, i2, (2));
aoqi@1 73 CONSTANT_REGISTER_DECLARATION(Register, i3, (3));
aoqi@1 74 CONSTANT_REGISTER_DECLARATION(Register, i4, (4));
aoqi@1 75 CONSTANT_REGISTER_DECLARATION(Register, i5, (5));
aoqi@1 76 CONSTANT_REGISTER_DECLARATION(Register, i6, (6));
aoqi@1 77 CONSTANT_REGISTER_DECLARATION(Register, i7, (7));
aoqi@1 78 CONSTANT_REGISTER_DECLARATION(Register, i8, (8));
aoqi@1 79 CONSTANT_REGISTER_DECLARATION(Register, i9, (9));
aoqi@1 80 CONSTANT_REGISTER_DECLARATION(Register, i10, (10));
aoqi@1 81 CONSTANT_REGISTER_DECLARATION(Register, i11, (11));
aoqi@1 82 CONSTANT_REGISTER_DECLARATION(Register, i12, (12));
aoqi@1 83 CONSTANT_REGISTER_DECLARATION(Register, i13, (13));
aoqi@1 84 CONSTANT_REGISTER_DECLARATION(Register, i14, (14));
aoqi@1 85 CONSTANT_REGISTER_DECLARATION(Register, i15, (15));
aoqi@1 86 CONSTANT_REGISTER_DECLARATION(Register, i16, (16));
aoqi@1 87 CONSTANT_REGISTER_DECLARATION(Register, i17, (17));
aoqi@1 88 CONSTANT_REGISTER_DECLARATION(Register, i18, (18));
aoqi@1 89 CONSTANT_REGISTER_DECLARATION(Register, i19, (19));
aoqi@1 90 CONSTANT_REGISTER_DECLARATION(Register, i20, (20));
aoqi@1 91 CONSTANT_REGISTER_DECLARATION(Register, i21, (21));
aoqi@1 92 CONSTANT_REGISTER_DECLARATION(Register, i22, (22));
aoqi@1 93 CONSTANT_REGISTER_DECLARATION(Register, i23, (23));
aoqi@1 94 CONSTANT_REGISTER_DECLARATION(Register, i24, (24));
aoqi@1 95 CONSTANT_REGISTER_DECLARATION(Register, i25, (25));
aoqi@1 96 CONSTANT_REGISTER_DECLARATION(Register, i26, (26));
aoqi@1 97 CONSTANT_REGISTER_DECLARATION(Register, i27, (27));
aoqi@1 98 CONSTANT_REGISTER_DECLARATION(Register, i28, (28));
aoqi@1 99 CONSTANT_REGISTER_DECLARATION(Register, i29, (29));
aoqi@1 100 CONSTANT_REGISTER_DECLARATION(Register, i30, (30));
aoqi@1 101 CONSTANT_REGISTER_DECLARATION(Register, i31, (31));
aoqi@1 102
aoqi@1 103 //o32 convention registers
aoqi@1 104 /*CONSTANT_REGISTER_DECLARATION(Register, zero , ( 0));
aoqi@1 105 CONSTANT_REGISTER_DECLARATION(Register, at , ( 1));
aoqi@1 106 CONSTANT_REGISTER_DECLARATION(Register, v0 , ( 2));
aoqi@1 107 CONSTANT_REGISTER_DECLARATION(Register, v1 , ( 3));
aoqi@1 108 CONSTANT_REGISTER_DECLARATION(Register, a0 , ( 4));
aoqi@1 109 CONSTANT_REGISTER_DECLARATION(Register, a1 , ( 5));
aoqi@1 110 CONSTANT_REGISTER_DECLARATION(Register, a2 , ( 6));
aoqi@1 111 CONSTANT_REGISTER_DECLARATION(Register, a3 , ( 7));
aoqi@1 112 CONSTANT_REGISTER_DECLARATION(Register, t0 , ( 8));
aoqi@1 113 CONSTANT_REGISTER_DECLARATION(Register, t1 , ( 9));
aoqi@1 114 CONSTANT_REGISTER_DECLARATION(Register, t2 , ( 10));
aoqi@1 115 CONSTANT_REGISTER_DECLARATION(Register, t3 , ( 11));
aoqi@1 116 CONSTANT_REGISTER_DECLARATION(Register, t4 , ( 12));
aoqi@1 117 CONSTANT_REGISTER_DECLARATION(Register, t5 , ( 13));
aoqi@1 118 CONSTANT_REGISTER_DECLARATION(Register, t6 , ( 14));
aoqi@1 119 CONSTANT_REGISTER_DECLARATION(Register, t7 , ( 15));
aoqi@1 120 CONSTANT_REGISTER_DECLARATION(Register, s0 , ( 16));
aoqi@1 121 CONSTANT_REGISTER_DECLARATION(Register, s1 , ( 17));
aoqi@1 122 CONSTANT_REGISTER_DECLARATION(Register, s2 , ( 18));
aoqi@1 123 CONSTANT_REGISTER_DECLARATION(Register, s3 , ( 19));
aoqi@1 124 CONSTANT_REGISTER_DECLARATION(Register, s4 , ( 20));
aoqi@1 125 CONSTANT_REGISTER_DECLARATION(Register, s5 , ( 21));
aoqi@1 126 CONSTANT_REGISTER_DECLARATION(Register, s6 , ( 22));
aoqi@1 127 CONSTANT_REGISTER_DECLARATION(Register, s7 , ( 23));
aoqi@1 128 CONSTANT_REGISTER_DECLARATION(Register, t8 , ( 24));
aoqi@1 129 CONSTANT_REGISTER_DECLARATION(Register, t9 , ( 25));
aoqi@1 130 CONSTANT_REGISTER_DECLARATION(Register, k0 , ( 26));
aoqi@1 131 CONSTANT_REGISTER_DECLARATION(Register, k1 , ( 27));
aoqi@1 132 CONSTANT_REGISTER_DECLARATION(Register, gp , ( 28));
aoqi@1 133 CONSTANT_REGISTER_DECLARATION(Register, sp , ( 29));
aoqi@1 134 CONSTANT_REGISTER_DECLARATION(Register, fp , ( 30));
aoqi@1 135 CONSTANT_REGISTER_DECLARATION(Register, s8 , ( 30));
aoqi@1 136 CONSTANT_REGISTER_DECLARATION(Register, ra , ( 31));*/
aoqi@1 137
aoqi@1 138 #ifndef DONT_USE_REGISTER_DEFINES
aoqi@1 139 #define NOREG ((Register)(noreg_RegisterEnumValue))
aoqi@1 140
aoqi@1 141 #define I0 ((Register)(i0_RegisterEnumValue))
aoqi@1 142 #define I1 ((Register)(i1_RegisterEnumValue))
aoqi@1 143 #define I2 ((Register)(i2_RegisterEnumValue))
aoqi@1 144 #define I3 ((Register)(i3_RegisterEnumValue))
aoqi@1 145 #define I4 ((Register)(i4_RegisterEnumValue))
aoqi@1 146 #define I5 ((Register)(i5_RegisterEnumValue))
aoqi@1 147 #define I6 ((Register)(i6_RegisterEnumValue))
aoqi@1 148 #define I7 ((Register)(i7_RegisterEnumValue))
aoqi@1 149 #define I8 ((Register)(i8_RegisterEnumValue))
aoqi@1 150 #define I9 ((Register)(i9_RegisterEnumValue))
aoqi@1 151 #define I10 ((Register)(i10_RegisterEnumValue))
aoqi@1 152 #define I11 ((Register)(i11_RegisterEnumValue))
aoqi@1 153 #define I12 ((Register)(i12_RegisterEnumValue))
aoqi@1 154 #define I13 ((Register)(i13_RegisterEnumValue))
aoqi@1 155 #define I14 ((Register)(i14_RegisterEnumValue))
aoqi@1 156 #define I15 ((Register)(i15_RegisterEnumValue))
aoqi@1 157 #define I16 ((Register)(i16_RegisterEnumValue))
aoqi@1 158 #define I17 ((Register)(i17_RegisterEnumValue))
aoqi@1 159 #define I18 ((Register)(i18_RegisterEnumValue))
aoqi@1 160 #define I19 ((Register)(i19_RegisterEnumValue))
aoqi@1 161 #define I20 ((Register)(i20_RegisterEnumValue))
aoqi@1 162 #define I21 ((Register)(i21_RegisterEnumValue))
aoqi@1 163 #define I22 ((Register)(i22_RegisterEnumValue))
aoqi@1 164 #define I23 ((Register)(i23_RegisterEnumValue))
aoqi@1 165 #define I24 ((Register)(i24_RegisterEnumValue))
aoqi@1 166 #define I25 ((Register)(i25_RegisterEnumValue))
aoqi@1 167 #define I26 ((Register)(i26_RegisterEnumValue))
aoqi@1 168 #define I27 ((Register)(i27_RegisterEnumValue))
aoqi@1 169 #define I28 ((Register)(i28_RegisterEnumValue))
aoqi@1 170 #define I29 ((Register)(i29_RegisterEnumValue))
aoqi@1 171 #define I30 ((Register)(i30_RegisterEnumValue))
aoqi@1 172 #define I31 ((Register)(i31_RegisterEnumValue))
aoqi@1 173
aoqi@1 174 #ifndef _LP64
aoqi@1 175
aoqi@1 176 #define R0 ((Register)(i0_RegisterEnumValue))
aoqi@1 177 #define AT ((Register)(i1_RegisterEnumValue))
aoqi@1 178 #define V0 ((Register)(i2_RegisterEnumValue))
aoqi@1 179 #define V1 ((Register)(i3_RegisterEnumValue))
aoqi@1 180 #define A0 ((Register)(i4_RegisterEnumValue))
aoqi@1 181 #define A1 ((Register)(i5_RegisterEnumValue))
aoqi@1 182 #define A2 ((Register)(i6_RegisterEnumValue))
aoqi@1 183 #define A3 ((Register)(i7_RegisterEnumValue))
aoqi@1 184 #define T0 ((Register)(i8_RegisterEnumValue))
aoqi@1 185 #define T1 ((Register)(i9_RegisterEnumValue))
aoqi@1 186 #define T2 ((Register)(i10_RegisterEnumValue))
aoqi@1 187 #define T3 ((Register)(i11_RegisterEnumValue))
aoqi@1 188 #define T4 ((Register)(i12_RegisterEnumValue))
aoqi@1 189 #define T5 ((Register)(i13_RegisterEnumValue))
aoqi@1 190 #define T6 ((Register)(i14_RegisterEnumValue))
aoqi@1 191 #define T7 ((Register)(i15_RegisterEnumValue))
aoqi@1 192 #define S0 ((Register)(i16_RegisterEnumValue))
aoqi@1 193 #define S1 ((Register)(i17_RegisterEnumValue))
aoqi@1 194 #define S2 ((Register)(i18_RegisterEnumValue))
aoqi@1 195 #define S3 ((Register)(i19_RegisterEnumValue))
aoqi@1 196 #define S4 ((Register)(i20_RegisterEnumValue))
aoqi@1 197 #define S5 ((Register)(i21_RegisterEnumValue))
aoqi@1 198 #define S6 ((Register)(i22_RegisterEnumValue))
aoqi@1 199 #define S7 ((Register)(i23_RegisterEnumValue))
aoqi@1 200 #define T8 ((Register)(i24_RegisterEnumValue))
aoqi@1 201 #define T9 ((Register)(i25_RegisterEnumValue))
aoqi@1 202 #define K0 ((Register)(i26_RegisterEnumValue))
aoqi@1 203 #define K1 ((Register)(i27_RegisterEnumValue))
aoqi@1 204 #define GP ((Register)(i28_RegisterEnumValue))
aoqi@1 205 #define SP ((Register)(i29_RegisterEnumValue))
aoqi@1 206 #define FP ((Register)(i30_RegisterEnumValue))
aoqi@1 207 #define S8 ((Register)(i30_RegisterEnumValue))
aoqi@1 208 #define RA ((Register)(i31_RegisterEnumValue))
aoqi@1 209
aoqi@1 210 #else
aoqi@1 211
aoqi@1 212 #define R0 ((Register)(i0_RegisterEnumValue))
aoqi@1 213 #define AT ((Register)(i1_RegisterEnumValue))
aoqi@1 214 #define V0 ((Register)(i2_RegisterEnumValue))
aoqi@1 215 #define V1 ((Register)(i3_RegisterEnumValue))
aoqi@1 216 #define A0 ((Register)(i4_RegisterEnumValue))
aoqi@1 217 #define A1 ((Register)(i5_RegisterEnumValue))
aoqi@1 218 #define A2 ((Register)(i6_RegisterEnumValue))
aoqi@1 219 #define A3 ((Register)(i7_RegisterEnumValue))
aoqi@1 220 #define A4 ((Register)(i8_RegisterEnumValue))
aoqi@1 221 #define A5 ((Register)(i9_RegisterEnumValue))
aoqi@1 222 #define A6 ((Register)(i10_RegisterEnumValue))
aoqi@1 223 #define A7 ((Register)(i11_RegisterEnumValue))
aoqi@1 224 #define T0 ((Register)(i12_RegisterEnumValue))
aoqi@1 225 #define T1 ((Register)(i13_RegisterEnumValue))
aoqi@1 226 #define T2 ((Register)(i14_RegisterEnumValue))
aoqi@1 227 #define T3 ((Register)(i15_RegisterEnumValue))
aoqi@1 228 #define S0 ((Register)(i16_RegisterEnumValue))
aoqi@1 229 #define S1 ((Register)(i17_RegisterEnumValue))
aoqi@1 230 #define S2 ((Register)(i18_RegisterEnumValue))
aoqi@1 231 #define S3 ((Register)(i19_RegisterEnumValue))
aoqi@1 232 #define S4 ((Register)(i20_RegisterEnumValue))
aoqi@1 233 #define S5 ((Register)(i21_RegisterEnumValue))
aoqi@1 234 #define S6 ((Register)(i22_RegisterEnumValue))
aoqi@1 235 #define S7 ((Register)(i23_RegisterEnumValue))
aoqi@1 236 #define T8 ((Register)(i24_RegisterEnumValue))
aoqi@1 237 #define T9 ((Register)(i25_RegisterEnumValue))
aoqi@1 238 #define K0 ((Register)(i26_RegisterEnumValue))
aoqi@1 239 #define K1 ((Register)(i27_RegisterEnumValue))
aoqi@1 240 #define GP ((Register)(i28_RegisterEnumValue))
aoqi@1 241 #define SP ((Register)(i29_RegisterEnumValue))
aoqi@1 242 #define FP ((Register)(i30_RegisterEnumValue))
aoqi@1 243 #define S8 ((Register)(i30_RegisterEnumValue))
aoqi@1 244 #define RA ((Register)(i31_RegisterEnumValue))
aoqi@1 245 /*
aoqi@1 246 #define TA0 ((Register)(i8_RegisterEnumValue))
aoqi@1 247 #define TA1 ((Register)(i9_RegisterEnumValue))
aoqi@1 248 #define TA2 ((Register)(i10_RegisterEnumValue))
aoqi@1 249 #define TA3 ((Register)(i11_RegisterEnumValue))
aoqi@1 250 #define T4 ((Register)(i12_RegisterEnumValue))
aoqi@1 251 #define T5 ((Register)(i13_RegisterEnumValue))
aoqi@1 252 #define T6 ((Register)(i14_RegisterEnumValue))
aoqi@1 253 #define T7 ((Register)(i15_RegisterEnumValue))
aoqi@1 254 */
aoqi@1 255 #define c_rarg0 T0
aoqi@1 256 #define c_rarg1 T1
aoqi@1 257 #define Rmethod S3
aoqi@1 258 #define Rsender S4
aoqi@1 259 #define Rnext S1
aoqi@1 260
aoqi@1 261 #define RT0 T0
aoqi@1 262 #define RT1 T1
aoqi@1 263 #define RT2 T2
aoqi@1 264 #define RT3 T3
aoqi@1 265 #define RT4 T8
aoqi@1 266 #define RT5 T9
aoqi@1 267 #endif //_LP64
aoqi@1 268
aoqi@1 269
aoqi@1 270 //for interpreter frame
aoqi@1 271 // bytecode pointer register
aoqi@1 272 #define BCP S0
aoqi@1 273 // local variable pointer register
aoqi@1 274 #define LVP S7
aoqi@1 275 // temperary callee saved register, we use this register to save the register maybe blowed cross call_VM
aoqi@1 276 // be sure to save and restore its value in call_stub
aoqi@1 277 #define TSR S2
aoqi@1 278
aoqi@1 279 /* 2013/7/10 Jin: OPT_SAFEPOINT not supported yet */
aoqi@1 280 #define OPT_SAFEPOINT 1
aoqi@1 281
aoqi@1 282 #define OPT_THREAD 1
aoqi@1 283
aoqi@1 284 #define TREG S6
aoqi@1 285
aoqi@1 286 #define S5_heapbase S5
aoqi@1 287
aoqi@1 288 #define mh_SP_save SP
aoqi@1 289
aoqi@1 290 #define FSR V0
aoqi@1 291 #define SSR V1
aoqi@1 292 #define FSF F0
aoqi@1 293 #define SSF F1
aoqi@1 294 #define FTF F14
aoqi@1 295 #define STF F15
aoqi@1 296
aoqi@1 297 #define AFT F30
aoqi@1 298
aoqi@1 299 #define RECEIVER T0
aoqi@1 300 #define IC_Klass T1
aoqi@1 301
aoqi@1 302 #define SHIFT_count T3
aoqi@1 303
aoqi@1 304 #endif // DONT_USE_REGISTER_DEFINES
aoqi@1 305
aoqi@1 306 // Use FloatRegister as shortcut
aoqi@1 307 class FloatRegisterImpl;
aoqi@1 308 typedef FloatRegisterImpl* FloatRegister;
aoqi@1 309
aoqi@1 310 inline FloatRegister as_FloatRegister(int encoding) {
aoqi@1 311 return (FloatRegister)(intptr_t) encoding;
aoqi@1 312 }
aoqi@1 313
aoqi@1 314 // The implementation of floating point registers for the ia32 architecture
aoqi@1 315 class FloatRegisterImpl: public AbstractRegisterImpl {
aoqi@1 316 public:
aoqi@1 317 enum {
aoqi@1 318 float_arg_base = 12,
aoqi@1 319 number_of_registers = 32
aoqi@1 320 };
aoqi@1 321
aoqi@1 322 // construction
aoqi@1 323 inline friend FloatRegister as_FloatRegister(int encoding);
aoqi@1 324
aoqi@1 325 VMReg as_VMReg();
aoqi@1 326
aoqi@1 327 // derived registers, offsets, and addresses
aoqi@1 328 FloatRegister successor() const { return as_FloatRegister(encoding() + 1); }
aoqi@1 329
aoqi@1 330 // accessors
aoqi@1 331 int encoding() const { assert(is_valid(), "invalid register"); return (intptr_t)this; }
aoqi@1 332 bool is_valid() const { return 0 <= (intptr_t)this && (intptr_t)this < number_of_registers; }
aoqi@1 333 const char* name() const;
aoqi@1 334
aoqi@1 335 };
aoqi@1 336
aoqi@1 337 CONSTANT_REGISTER_DECLARATION(FloatRegister, fnoreg , (-1));
aoqi@1 338
aoqi@1 339 CONSTANT_REGISTER_DECLARATION(FloatRegister, f0 , ( 0));
aoqi@1 340 CONSTANT_REGISTER_DECLARATION(FloatRegister, f1 , ( 1));
aoqi@1 341 CONSTANT_REGISTER_DECLARATION(FloatRegister, f2 , ( 2));
aoqi@1 342 CONSTANT_REGISTER_DECLARATION(FloatRegister, f3 , ( 3));
aoqi@1 343 CONSTANT_REGISTER_DECLARATION(FloatRegister, f4 , ( 4));
aoqi@1 344 CONSTANT_REGISTER_DECLARATION(FloatRegister, f5 , ( 5));
aoqi@1 345 CONSTANT_REGISTER_DECLARATION(FloatRegister, f6 , ( 6));
aoqi@1 346 CONSTANT_REGISTER_DECLARATION(FloatRegister, f7 , ( 7));
aoqi@1 347 CONSTANT_REGISTER_DECLARATION(FloatRegister, f8 , ( 8));
aoqi@1 348 CONSTANT_REGISTER_DECLARATION(FloatRegister, f9 , ( 9));
aoqi@1 349 CONSTANT_REGISTER_DECLARATION(FloatRegister, f10 , (10));
aoqi@1 350 CONSTANT_REGISTER_DECLARATION(FloatRegister, f11 , (11));
aoqi@1 351 CONSTANT_REGISTER_DECLARATION(FloatRegister, f12 , (12));
aoqi@1 352 CONSTANT_REGISTER_DECLARATION(FloatRegister, f13 , (13));
aoqi@1 353 CONSTANT_REGISTER_DECLARATION(FloatRegister, f14 , (14));
aoqi@1 354 CONSTANT_REGISTER_DECLARATION(FloatRegister, f15 , (15));
aoqi@1 355 CONSTANT_REGISTER_DECLARATION(FloatRegister, f16 , (16));
aoqi@1 356 CONSTANT_REGISTER_DECLARATION(FloatRegister, f17 , (17));
aoqi@1 357 CONSTANT_REGISTER_DECLARATION(FloatRegister, f18 , (18));
aoqi@1 358 CONSTANT_REGISTER_DECLARATION(FloatRegister, f19 , (19));
aoqi@1 359 CONSTANT_REGISTER_DECLARATION(FloatRegister, f20 , (20));
aoqi@1 360 CONSTANT_REGISTER_DECLARATION(FloatRegister, f21 , (21));
aoqi@1 361 CONSTANT_REGISTER_DECLARATION(FloatRegister, f22 , (22));
aoqi@1 362 CONSTANT_REGISTER_DECLARATION(FloatRegister, f23 , (23));
aoqi@1 363 CONSTANT_REGISTER_DECLARATION(FloatRegister, f24 , (24));
aoqi@1 364 CONSTANT_REGISTER_DECLARATION(FloatRegister, f25 , (25));
aoqi@1 365 CONSTANT_REGISTER_DECLARATION(FloatRegister, f26 , (26));
aoqi@1 366 CONSTANT_REGISTER_DECLARATION(FloatRegister, f27 , (27));
aoqi@1 367 CONSTANT_REGISTER_DECLARATION(FloatRegister, f28 , (28));
aoqi@1 368 CONSTANT_REGISTER_DECLARATION(FloatRegister, f29 , (29));
aoqi@1 369 CONSTANT_REGISTER_DECLARATION(FloatRegister, f30 , (30));
aoqi@1 370 CONSTANT_REGISTER_DECLARATION(FloatRegister, f31 , (31));
aoqi@1 371
aoqi@1 372 #ifndef DONT_USE_REGISTER_DEFINES
aoqi@1 373 #define FNOREG ((FloatRegister)(fnoreg_FloatRegisterEnumValue))
aoqi@1 374 #define F0 ((FloatRegister)( f0_FloatRegisterEnumValue))
aoqi@1 375 #define F1 ((FloatRegister)( f1_FloatRegisterEnumValue))
aoqi@1 376 #define F2 ((FloatRegister)( f2_FloatRegisterEnumValue))
aoqi@1 377 #define F3 ((FloatRegister)( f3_FloatRegisterEnumValue))
aoqi@1 378 #define F4 ((FloatRegister)( f4_FloatRegisterEnumValue))
aoqi@1 379 #define F5 ((FloatRegister)( f5_FloatRegisterEnumValue))
aoqi@1 380 #define F6 ((FloatRegister)( f6_FloatRegisterEnumValue))
aoqi@1 381 #define F7 ((FloatRegister)( f7_FloatRegisterEnumValue))
aoqi@1 382 #define F8 ((FloatRegister)( f8_FloatRegisterEnumValue))
aoqi@1 383 #define F9 ((FloatRegister)( f9_FloatRegisterEnumValue))
aoqi@1 384 #define F10 ((FloatRegister)( f10_FloatRegisterEnumValue))
aoqi@1 385 #define F11 ((FloatRegister)( f11_FloatRegisterEnumValue))
aoqi@1 386 #define F12 ((FloatRegister)( f12_FloatRegisterEnumValue))
aoqi@1 387 #define F13 ((FloatRegister)( f13_FloatRegisterEnumValue))
aoqi@1 388 #define F14 ((FloatRegister)( f14_FloatRegisterEnumValue))
aoqi@1 389 #define F15 ((FloatRegister)( f15_FloatRegisterEnumValue))
aoqi@1 390 #define F16 ((FloatRegister)( f16_FloatRegisterEnumValue))
aoqi@1 391 #define F17 ((FloatRegister)( f17_FloatRegisterEnumValue))
aoqi@1 392 #define F18 ((FloatRegister)( f18_FloatRegisterEnumValue))
aoqi@1 393 #define F19 ((FloatRegister)( f19_FloatRegisterEnumValue))
aoqi@1 394 #define F20 ((FloatRegister)( f20_FloatRegisterEnumValue))
aoqi@1 395 #define F21 ((FloatRegister)( f21_FloatRegisterEnumValue))
aoqi@1 396 #define F22 ((FloatRegister)( f22_FloatRegisterEnumValue))
aoqi@1 397 #define F23 ((FloatRegister)( f23_FloatRegisterEnumValue))
aoqi@1 398 #define F24 ((FloatRegister)( f24_FloatRegisterEnumValue))
aoqi@1 399 #define F25 ((FloatRegister)( f25_FloatRegisterEnumValue))
aoqi@1 400 #define F26 ((FloatRegister)( f26_FloatRegisterEnumValue))
aoqi@1 401 #define F27 ((FloatRegister)( f27_FloatRegisterEnumValue))
aoqi@1 402 #define F28 ((FloatRegister)( f28_FloatRegisterEnumValue))
aoqi@1 403 #define F29 ((FloatRegister)( f29_FloatRegisterEnumValue))
aoqi@1 404 #define F30 ((FloatRegister)( f30_FloatRegisterEnumValue))
aoqi@1 405 #define F31 ((FloatRegister)( f31_FloatRegisterEnumValue))
aoqi@1 406 #endif // DONT_USE_REGISTER_DEFINES
aoqi@1 407
aoqi@1 408
aoqi@1 409 const int MIPS_ARGS_IN_REGS_NUM = 4;
aoqi@1 410
aoqi@1 411 // Need to know the total number of registers of all sorts for SharedInfo.
aoqi@1 412 // Define a class that exports it.
aoqi@1 413 class ConcreteRegisterImpl : public AbstractRegisterImpl {
aoqi@1 414 public:
aoqi@1 415 enum {
aoqi@1 416 // A big enough number for C2: all the registers plus flags
aoqi@1 417 // This number must be large enough to cover REG_COUNT (defined by c2) registers.
aoqi@1 418 // There is no requirement that any ordering here matches any ordering c2 gives
aoqi@1 419 // it's optoregs.
aoqi@1 420 number_of_registers = (RegisterImpl::number_of_registers + FloatRegisterImpl::number_of_registers)
aoqi@1 421 LP64_ONLY( * 2)
aoqi@1 422 };
aoqi@1 423
aoqi@1 424 static const int max_gpr;
aoqi@1 425 static const int max_fpr;
aoqi@1 426
aoqi@1 427
aoqi@1 428 };
aoqi@1 429 #endif //CPU_MIPS_VM_REGISTER_MIPS_HPP

mercurial