blob: 6cc543c808afd879c34dde6e9b1513252a93a0a4 [file] [log] [blame]
/*
* Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
package sun.jvm.hotspot.asm.sparc;
import sun.jvm.hotspot.utilities.*;
public class SPARCRegisters {
public static final SPARCRegister G0;
public static final SPARCRegister G1;
public static final SPARCRegister G2;
public static final SPARCRegister G3;
public static final SPARCRegister G4;
public static final SPARCRegister G5;
public static final SPARCRegister G6;
public static final SPARCRegister G7;
public static final SPARCRegister O0;
public static final SPARCRegister O1;
public static final SPARCRegister O2;
public static final SPARCRegister O3;
public static final SPARCRegister O4;
public static final SPARCRegister O5;
public static final SPARCRegister O6;
public static final SPARCRegister O7;
public static final SPARCRegister L0;
public static final SPARCRegister L1;
public static final SPARCRegister L2;
public static final SPARCRegister L3;
public static final SPARCRegister L4;
public static final SPARCRegister L5;
public static final SPARCRegister L6;
public static final SPARCRegister L7;
public static final SPARCRegister I0;
public static final SPARCRegister I1;
public static final SPARCRegister I2;
public static final SPARCRegister I3;
public static final SPARCRegister I4;
public static final SPARCRegister I5;
public static final SPARCRegister I6;
public static final SPARCRegister I7;
private static String registerNames[];
public static final int NUM_REGISTERS = 32;
private static SPARCRegister registers[];
static {
G0 = new SPARCRegister(0);
G1 = new SPARCRegister(1);
G2 = new SPARCRegister(2);
G3 = new SPARCRegister(3);
G4 = new SPARCRegister(4);
G5 = new SPARCRegister(5);
G6 = new SPARCRegister(6);
G7 = new SPARCRegister(7);
O0 = new SPARCRegister(8);
O1 = new SPARCRegister(9);
O2 = new SPARCRegister(10);
O3 = new SPARCRegister(11);
O4 = new SPARCRegister(12);
O5 = new SPARCRegister(13);
O6 = new SPARCRegister(14);
O7 = new SPARCRegister(15);
L0 = new SPARCRegister(16);
L1 = new SPARCRegister(17);
L2 = new SPARCRegister(18);
L3 = new SPARCRegister(19);
L4 = new SPARCRegister(20);
L5 = new SPARCRegister(21);
L6 = new SPARCRegister(22);
L7 = new SPARCRegister(23);
I0 = new SPARCRegister(24);
I1 = new SPARCRegister(25);
I2 = new SPARCRegister(26);
I3 = new SPARCRegister(27);
I4 = new SPARCRegister(28);
I5 = new SPARCRegister(29);
I6 = new SPARCRegister(30);
I7 = new SPARCRegister(31);
registerNames = new String[NUM_REGISTERS];
registerNames[G0.getNumber()] = "%g0";
registerNames[G1.getNumber()] = "%g1";
registerNames[G2.getNumber()] = "%g2";
registerNames[G3.getNumber()] = "%g3";
registerNames[G4.getNumber()] = "%g4";
registerNames[G5.getNumber()] = "%g5";
registerNames[G6.getNumber()] = "%g6";
registerNames[G7.getNumber()] = "%g7";
registerNames[O0.getNumber()] = "%o0";
registerNames[O1.getNumber()] = "%o1";
registerNames[O2.getNumber()] = "%o2";
registerNames[O3.getNumber()] = "%o3";
registerNames[O4.getNumber()] = "%o4";
registerNames[O5.getNumber()] = "%o5";
registerNames[O6.getNumber()] = "%sp";
registerNames[O7.getNumber()] = "%o7";
registerNames[I0.getNumber()] = "%i0";
registerNames[I1.getNumber()] = "%i1";
registerNames[I2.getNumber()] = "%i2";
registerNames[I3.getNumber()] = "%i3";
registerNames[I4.getNumber()] = "%i4";
registerNames[I5.getNumber()] = "%i5";
registerNames[I6.getNumber()] = "%fp";
registerNames[I7.getNumber()] = "%i7";
registerNames[L0.getNumber()] = "%l0";
registerNames[L1.getNumber()] = "%l1";
registerNames[L2.getNumber()] = "%l2";
registerNames[L3.getNumber()] = "%l3";
registerNames[L4.getNumber()] = "%l4";
registerNames[L5.getNumber()] = "%l5";
registerNames[L6.getNumber()] = "%l6";
registerNames[L7.getNumber()] = "%l7";
registers = (new SPARCRegister[] {
G0, G1, G2, G3, G4, G5, G6, G7, O0, O1,
O2, O3, O4, O5, O6, O7, L0, L1, L2, L3,
L4, L5, L6, L7, I0, I1, I2, I3, I4, I5,
I6, I7
});
}
public static final SPARCRegister FP = I6;
public static final SPARCRegister SP = O6;
// Interpreter frames
public static final SPARCRegister Lesp = L0; // expression stack pointer
public static final SPARCRegister Lbcp = L1; // pointer to next bytecode
public static final SPARCRegister Lmethod = L2;
public static final SPARCRegister Llocals = L3;
public static final SPARCRegister Lmonitors = L4;
public static final SPARCRegister Lbyte_code = L5;
public static final SPARCRegister Lscratch = L5;
public static final SPARCRegister Lscratch2 = L6;
public static final SPARCRegister LcpoolCache = L6; // constant pool cache
public static final SPARCRegister OparamAddr = O0; // Callers Parameter area address
public static final SPARCRegister IsavedSP = I5; // Saved SP before bumping for locals
public static final SPARCRegister IsizeCalleeParms = I4; // Saved size of Callee parms used to pop arguments
public static final SPARCRegister IdispatchAddress = I3; // Register which saves the dispatch address for each bytecode
public static final SPARCRegister IdispatchTables = I2; // Base address of the bytecode dispatch tables
/** Prefer to use this instead of the constant above */
public static int getNumRegisters() {
return NUM_REGISTERS;
}
public static String getRegisterName(int regNum) {
if (regNum < 0 || regNum >= NUM_REGISTERS) {
return "[Illegal register " + regNum + "]";
}
if (Assert.ASSERTS_ENABLED) {
Assert.that(regNum > -1 && regNum < NUM_REGISTERS, "invalid integer register number!");
}
return registerNames[regNum];
}
public static SPARCRegister getRegister(int regNum) {
if (Assert.ASSERTS_ENABLED) {
Assert.that(regNum > -1 && regNum < NUM_REGISTERS, "invalid integer register number!");
}
return registers[regNum];
}
}