| /* |
| * 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]; |
| } |
| } |