1 /* 2 * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 package sun.jvm.hotspot.asm.sparc; 26 27 import sun.jvm.hotspot.utilities.*; 28 29 public class SPARCRegisters { 30 31 public static final SPARCRegister G0; 32 public static final SPARCRegister G1; 33 public static final SPARCRegister G2; 34 public static final SPARCRegister G3; 35 public static final SPARCRegister G4; 36 public static final SPARCRegister G5; 37 public static final SPARCRegister G6; 38 public static final SPARCRegister G7; 39 public static final SPARCRegister O0; 40 public static final SPARCRegister O1; 41 public static final SPARCRegister O2; 42 public static final SPARCRegister O3; 43 public static final SPARCRegister O4; 44 public static final SPARCRegister O5; 45 public static final SPARCRegister O6; 46 public static final SPARCRegister O7; 47 public static final SPARCRegister L0; 48 public static final SPARCRegister L1; 49 public static final SPARCRegister L2; 50 public static final SPARCRegister L3; 51 public static final SPARCRegister L4; 52 public static final SPARCRegister L5; 53 public static final SPARCRegister L6; 54 public static final SPARCRegister L7; 55 public static final SPARCRegister I0; 56 public static final SPARCRegister I1; 57 public static final SPARCRegister I2; 58 public static final SPARCRegister I3; 59 public static final SPARCRegister I4; 60 public static final SPARCRegister I5; 61 public static final SPARCRegister I6; 62 public static final SPARCRegister I7; 63 64 private static String registerNames[]; 65 public static final int NUM_REGISTERS = 32; 66 private static SPARCRegister registers[]; 67 68 static { 69 G0 = new SPARCRegister(0); 70 G1 = new SPARCRegister(1); 71 G2 = new SPARCRegister(2); 72 G3 = new SPARCRegister(3); 73 G4 = new SPARCRegister(4); 74 G5 = new SPARCRegister(5); 75 G6 = new SPARCRegister(6); 76 G7 = new SPARCRegister(7); 77 O0 = new SPARCRegister(8); 78 O1 = new SPARCRegister(9); 79 O2 = new SPARCRegister(10); 80 O3 = new SPARCRegister(11); 81 O4 = new SPARCRegister(12); 82 O5 = new SPARCRegister(13); 83 O6 = new SPARCRegister(14); 84 O7 = new SPARCRegister(15); 85 L0 = new SPARCRegister(16); 86 L1 = new SPARCRegister(17); 87 L2 = new SPARCRegister(18); 88 L3 = new SPARCRegister(19); 89 L4 = new SPARCRegister(20); 90 L5 = new SPARCRegister(21); 91 L6 = new SPARCRegister(22); 92 L7 = new SPARCRegister(23); 93 I0 = new SPARCRegister(24); 94 I1 = new SPARCRegister(25); 95 I2 = new SPARCRegister(26); 96 I3 = new SPARCRegister(27); 97 I4 = new SPARCRegister(28); 98 I5 = new SPARCRegister(29); 99 I6 = new SPARCRegister(30); 100 I7 = new SPARCRegister(31); 101 registerNames = new String[NUM_REGISTERS]; 102 registerNames[G0.getNumber()] = "%g0"; 103 registerNames[G1.getNumber()] = "%g1"; 104 registerNames[G2.getNumber()] = "%g2"; 105 registerNames[G3.getNumber()] = "%g3"; 106 registerNames[G4.getNumber()] = "%g4"; 107 registerNames[G5.getNumber()] = "%g5"; 108 registerNames[G6.getNumber()] = "%g6"; 109 registerNames[G7.getNumber()] = "%g7"; 110 registerNames[O0.getNumber()] = "%o0"; 111 registerNames[O1.getNumber()] = "%o1"; 112 registerNames[O2.getNumber()] = "%o2"; 113 registerNames[O3.getNumber()] = "%o3"; 114 registerNames[O4.getNumber()] = "%o4"; 115 registerNames[O5.getNumber()] = "%o5"; 116 registerNames[O6.getNumber()] = "%sp"; 117 registerNames[O7.getNumber()] = "%o7"; 118 registerNames[I0.getNumber()] = "%i0"; 119 registerNames[I1.getNumber()] = "%i1"; 120 registerNames[I2.getNumber()] = "%i2"; 121 registerNames[I3.getNumber()] = "%i3"; 122 registerNames[I4.getNumber()] = "%i4"; 123 registerNames[I5.getNumber()] = "%i5"; 124 registerNames[I6.getNumber()] = "%fp"; 125 registerNames[I7.getNumber()] = "%i7"; 126 registerNames[L0.getNumber()] = "%l0"; 127 registerNames[L1.getNumber()] = "%l1"; 128 registerNames[L2.getNumber()] = "%l2"; 129 registerNames[L3.getNumber()] = "%l3"; 130 registerNames[L4.getNumber()] = "%l4"; 131 registerNames[L5.getNumber()] = "%l5"; 132 registerNames[L6.getNumber()] = "%l6"; 133 registerNames[L7.getNumber()] = "%l7"; 134 registers = (new SPARCRegister[] { 135 G0, G1, G2, G3, G4, G5, G6, G7, O0, O1, 136 O2, O3, O4, O5, O6, O7, L0, L1, L2, L3, 137 L4, L5, L6, L7, I0, I1, I2, I3, I4, I5, 138 I6, I7 139 }); 140 } 141 142 public static final SPARCRegister FP = I6; 143 public static final SPARCRegister SP = O6; 144 145 // Interpreter frames 146 147 public static final SPARCRegister Lesp = L0; // expression stack pointer 148 public static final SPARCRegister Lbcp = L1; // pointer to next bytecode 149 public static final SPARCRegister Lmethod = L2; 150 public static final SPARCRegister Llocals = L3; 151 public static final SPARCRegister Lmonitors = L4; 152 public static final SPARCRegister Lbyte_code = L5; 153 public static final SPARCRegister Lscratch = L5; 154 public static final SPARCRegister Lscratch2 = L6; 155 public static final SPARCRegister LcpoolCache = L6; // constant pool cache 156 157 public static final SPARCRegister OparamAddr = O0; // Callers Parameter area address 158 public static final SPARCRegister IsavedSP = I5; // Saved SP before bumping for locals 159 public static final SPARCRegister IsizeCalleeParms = I4; // Saved size of Callee parms used to pop arguments 160 public static final SPARCRegister IdispatchAddress = I3; // Register which saves the dispatch address for each bytecode 161 public static final SPARCRegister IdispatchTables = I2; // Base address of the bytecode dispatch tables 162 163 164 /** Prefer to use this instead of the constant above */ 165 public static int getNumRegisters() { 166 return NUM_REGISTERS; 167 } 168 169 170 public static String getRegisterName(int regNum) { 171 if (regNum < 0 || regNum >= NUM_REGISTERS) { 172 return "[Illegal register " + regNum + "]"; 173 } 174 175 if (Assert.ASSERTS_ENABLED) { 176 Assert.that(regNum > -1 && regNum < NUM_REGISTERS, "invalid integer register number!"); 177 } 178 179 return registerNames[regNum]; 180 } 181 182 public static SPARCRegister getRegister(int regNum) { 183 if (Assert.ASSERTS_ENABLED) { 184 Assert.that(regNum > -1 && regNum < NUM_REGISTERS, "invalid integer register number!"); 185 } 186 187 return registers[regNum]; 188 } 189 }