src/share/classes/com/sun/tools/classfile/Opcode.java

Mon, 10 Dec 2012 16:21:26 +0000

author
vromero
date
Mon, 10 Dec 2012 16:21:26 +0000
changeset 1442
fcf89720ae71
parent 1428
d9fe1f80515d
child 2525
2eb010b6cb22
permissions
-rw-r--r--

8003967: detect and remove all mutable implicit static enum fields in langtools
Reviewed-by: jjg

jjg@255 1 /*
vromero@1428 2 * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
jjg@255 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
jjg@255 4 *
jjg@255 5 * This code is free software; you can redistribute it and/or modify it
jjg@255 6 * under the terms of the GNU General Public License version 2 only, as
ohair@554 7 * published by the Free Software Foundation. Oracle designates this
jjg@255 8 * particular file as subject to the "Classpath" exception as provided
ohair@554 9 * by Oracle in the LICENSE file that accompanied this code.
jjg@255 10 *
jjg@255 11 * This code is distributed in the hope that it will be useful, but WITHOUT
jjg@255 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
jjg@255 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
jjg@255 14 * version 2 for more details (a copy is included in the LICENSE file that
jjg@255 15 * accompanied this code).
jjg@255 16 *
jjg@255 17 * You should have received a copy of the GNU General Public License version
jjg@255 18 * 2 along with this work; if not, write to the Free Software Foundation,
jjg@255 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
jjg@255 20 *
ohair@554 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ohair@554 22 * or visit www.oracle.com if you need additional information or have any
ohair@554 23 * questions.
jjg@255 24 */
jjg@255 25
jjg@255 26 package com.sun.tools.classfile;
jjg@255 27
jjg@255 28 import static com.sun.tools.classfile.Instruction.Kind.*;
jjg@255 29 import static com.sun.tools.classfile.Opcode.Set.*;
jjg@255 30
jjg@255 31 /**
jjh@972 32 * See JVMS, chapter 6.
jjg@255 33 *
jjg@255 34 * <p>In addition to providing all the standard opcodes defined in JVMS,
jjg@255 35 * this class also provides legacy support for the PicoJava extensions.
jjg@255 36 *
jjg@581 37 * <p><b>This is NOT part of any supported API.
jjg@581 38 * If you write code that depends on this, you do so at your own risk.
jjg@255 39 * This code and its internal interfaces are subject to change or
jjg@255 40 * deletion without notice.</b>
jjg@255 41 */
jjg@255 42 public enum Opcode {
jjg@255 43 NOP(0x0),
jjg@255 44 ACONST_NULL(0x1),
jjg@255 45 ICONST_M1(0x2),
jjg@255 46 ICONST_0(0x3),
jjg@255 47 ICONST_1(0x4),
jjg@255 48 ICONST_2(0x5),
jjg@255 49 ICONST_3(0x6),
jjg@255 50 ICONST_4(0x7),
jjg@255 51 ICONST_5(0x8),
jjg@255 52 LCONST_0(0x9),
jjg@255 53 LCONST_1(0xa),
jjg@255 54 FCONST_0(0xb),
jjg@255 55 FCONST_1(0xc),
jjg@255 56 FCONST_2(0xd),
jjg@255 57 DCONST_0(0xe),
jjg@255 58 DCONST_1(0xf),
jjg@255 59 BIPUSH(0x10, BYTE),
jjg@255 60 SIPUSH(0x11, SHORT),
jjg@255 61 LDC(0x12, CPREF),
jjg@255 62 LDC_W(0x13, CPREF_W),
jjg@255 63 LDC2_W(0x14, CPREF_W),
jjg@255 64 ILOAD(0x15, LOCAL),
jjg@255 65 LLOAD(0x16, LOCAL),
jjg@255 66 FLOAD(0x17, LOCAL),
jjg@255 67 DLOAD(0x18, LOCAL),
jjg@255 68 ALOAD(0x19, LOCAL),
jjg@255 69 ILOAD_0(0x1a),
jjg@255 70 ILOAD_1(0x1b),
jjg@255 71 ILOAD_2(0x1c),
jjg@255 72 ILOAD_3(0x1d),
jjg@255 73 LLOAD_0(0x1e),
jjg@255 74 LLOAD_1(0x1f),
jjg@255 75 LLOAD_2(0x20),
jjg@255 76 LLOAD_3(0x21),
jjg@255 77 FLOAD_0(0x22),
jjg@255 78 FLOAD_1(0x23),
jjg@255 79 FLOAD_2(0x24),
jjg@255 80 FLOAD_3(0x25),
jjg@255 81 DLOAD_0(0x26),
jjg@255 82 DLOAD_1(0x27),
jjg@255 83 DLOAD_2(0x28),
jjg@255 84 DLOAD_3(0x29),
jjg@255 85 ALOAD_0(0x2a),
jjg@255 86 ALOAD_1(0x2b),
jjg@255 87 ALOAD_2(0x2c),
jjg@255 88 ALOAD_3(0x2d),
jjg@255 89 IALOAD(0x2e),
jjg@255 90 LALOAD(0x2f),
jjg@255 91 FALOAD(0x30),
jjg@255 92 DALOAD(0x31),
jjg@255 93 AALOAD(0x32),
jjg@255 94 BALOAD(0x33),
jjg@255 95 CALOAD(0x34),
jjg@255 96 SALOAD(0x35),
jjg@255 97 ISTORE(0x36, LOCAL),
jjg@255 98 LSTORE(0x37, LOCAL),
jjg@255 99 FSTORE(0x38, LOCAL),
jjg@255 100 DSTORE(0x39, LOCAL),
jjg@255 101 ASTORE(0x3a, LOCAL),
jjg@255 102 ISTORE_0(0x3b),
jjg@255 103 ISTORE_1(0x3c),
jjg@255 104 ISTORE_2(0x3d),
jjg@255 105 ISTORE_3(0x3e),
jjg@255 106 LSTORE_0(0x3f),
jjg@255 107 LSTORE_1(0x40),
jjg@255 108 LSTORE_2(0x41),
jjg@255 109 LSTORE_3(0x42),
jjg@255 110 FSTORE_0(0x43),
jjg@255 111 FSTORE_1(0x44),
jjg@255 112 FSTORE_2(0x45),
jjg@255 113 FSTORE_3(0x46),
jjg@255 114 DSTORE_0(0x47),
jjg@255 115 DSTORE_1(0x48),
jjg@255 116 DSTORE_2(0x49),
jjg@255 117 DSTORE_3(0x4a),
jjg@255 118 ASTORE_0(0x4b),
jjg@255 119 ASTORE_1(0x4c),
jjg@255 120 ASTORE_2(0x4d),
jjg@255 121 ASTORE_3(0x4e),
jjg@255 122 IASTORE(0x4f),
jjg@255 123 LASTORE(0x50),
jjg@255 124 FASTORE(0x51),
jjg@255 125 DASTORE(0x52),
jjg@255 126 AASTORE(0x53),
jjg@255 127 BASTORE(0x54),
jjg@255 128 CASTORE(0x55),
jjg@255 129 SASTORE(0x56),
jjg@255 130 POP(0x57),
jjg@255 131 POP2(0x58),
jjg@255 132 DUP(0x59),
jjg@255 133 DUP_X1(0x5a),
jjg@255 134 DUP_X2(0x5b),
jjg@255 135 DUP2(0x5c),
jjg@255 136 DUP2_X1(0x5d),
jjg@255 137 DUP2_X2(0x5e),
jjg@255 138 SWAP(0x5f),
jjg@255 139 IADD(0x60),
jjg@255 140 LADD(0x61),
jjg@255 141 FADD(0x62),
jjg@255 142 DADD(0x63),
jjg@255 143 ISUB(0x64),
jjg@255 144 LSUB(0x65),
jjg@255 145 FSUB(0x66),
jjg@255 146 DSUB(0x67),
jjg@255 147 IMUL(0x68),
jjg@255 148 LMUL(0x69),
jjg@255 149 FMUL(0x6a),
jjg@255 150 DMUL(0x6b),
jjg@255 151 IDIV(0x6c),
jjg@255 152 LDIV(0x6d),
jjg@255 153 FDIV(0x6e),
jjg@255 154 DDIV(0x6f),
jjg@255 155 IREM(0x70),
jjg@255 156 LREM(0x71),
jjg@255 157 FREM(0x72),
jjg@255 158 DREM(0x73),
jjg@255 159 INEG(0x74),
jjg@255 160 LNEG(0x75),
jjg@255 161 FNEG(0x76),
jjg@255 162 DNEG(0x77),
jjg@255 163 ISHL(0x78),
jjg@255 164 LSHL(0x79),
jjg@255 165 ISHR(0x7a),
jjg@255 166 LSHR(0x7b),
jjg@255 167 IUSHR(0x7c),
jjg@255 168 LUSHR(0x7d),
jjg@255 169 IAND(0x7e),
jjg@255 170 LAND(0x7f),
jjg@255 171 IOR(0x80),
jjg@255 172 LOR(0x81),
jjg@255 173 IXOR(0x82),
jjg@255 174 LXOR(0x83),
jjg@255 175 IINC(0x84, LOCAL_BYTE),
jjg@255 176 I2L(0x85),
jjg@255 177 I2F(0x86),
jjg@255 178 I2D(0x87),
jjg@255 179 L2I(0x88),
jjg@255 180 L2F(0x89),
jjg@255 181 L2D(0x8a),
jjg@255 182 F2I(0x8b),
jjg@255 183 F2L(0x8c),
jjg@255 184 F2D(0x8d),
jjg@255 185 D2I(0x8e),
jjg@255 186 D2L(0x8f),
jjg@255 187 D2F(0x90),
jjg@255 188 I2B(0x91),
jjg@255 189 I2C(0x92),
jjg@255 190 I2S(0x93),
jjg@255 191 LCMP(0x94),
jjg@255 192 FCMPL(0x95),
jjg@255 193 FCMPG(0x96),
jjg@255 194 DCMPL(0x97),
jjg@255 195 DCMPG(0x98),
jjg@255 196 IFEQ(0x99, BRANCH),
jjg@255 197 IFNE(0x9a, BRANCH),
jjg@255 198 IFLT(0x9b, BRANCH),
jjg@255 199 IFGE(0x9c, BRANCH),
jjg@255 200 IFGT(0x9d, BRANCH),
jjg@255 201 IFLE(0x9e, BRANCH),
jjg@255 202 IF_ICMPEQ(0x9f, BRANCH),
jjg@255 203 IF_ICMPNE(0xa0, BRANCH),
jjg@255 204 IF_ICMPLT(0xa1, BRANCH),
jjg@255 205 IF_ICMPGE(0xa2, BRANCH),
jjg@255 206 IF_ICMPGT(0xa3, BRANCH),
jjg@255 207 IF_ICMPLE(0xa4, BRANCH),
jjg@255 208 IF_ACMPEQ(0xa5, BRANCH),
jjg@255 209 IF_ACMPNE(0xa6, BRANCH),
jjg@255 210 GOTO(0xa7, BRANCH),
jjg@255 211 JSR(0xa8, BRANCH),
jjg@255 212 RET(0xa9, LOCAL),
jjg@255 213 TABLESWITCH(0xaa, DYNAMIC),
jjg@255 214 LOOKUPSWITCH(0xab, DYNAMIC),
jjg@255 215 IRETURN(0xac),
jjg@255 216 LRETURN(0xad),
jjg@255 217 FRETURN(0xae),
jjg@255 218 DRETURN(0xaf),
jjg@255 219 ARETURN(0xb0),
jjg@255 220 RETURN(0xb1),
jjg@255 221 GETSTATIC(0xb2, CPREF_W),
jjg@255 222 PUTSTATIC(0xb3, CPREF_W),
jjg@255 223 GETFIELD(0xb4, CPREF_W),
jjg@255 224 PUTFIELD(0xb5, CPREF_W),
jjg@255 225 INVOKEVIRTUAL(0xb6, CPREF_W),
jjg@255 226 INVOKESPECIAL(0xb7, CPREF_W),
jjg@255 227 INVOKESTATIC(0xb8, CPREF_W),
jjg@255 228 INVOKEINTERFACE(0xb9, CPREF_W_UBYTE_ZERO),
jrose@267 229 INVOKEDYNAMIC(0xba, CPREF_W_UBYTE_ZERO),
jjg@255 230 NEW(0xbb, CPREF_W),
jjg@255 231 NEWARRAY(0xbc, ATYPE),
jjg@255 232 ANEWARRAY(0xbd, CPREF_W),
jjg@255 233 ARRAYLENGTH(0xbe),
jjg@255 234 ATHROW(0xbf),
jjg@255 235 CHECKCAST(0xc0, CPREF_W),
jjg@255 236 INSTANCEOF(0xc1, CPREF_W),
jjg@255 237 MONITORENTER(0xc2),
jjg@255 238 MONITOREXIT(0xc3),
jjg@255 239 // wide 0xc4
jjg@255 240 MULTIANEWARRAY(0xc5, CPREF_W_UBYTE),
jjg@255 241 IFNULL(0xc6, BRANCH),
jjg@255 242 IFNONNULL(0xc7, BRANCH),
jjg@255 243 GOTO_W(0xc8, BRANCH_W),
jjg@255 244 JSR_W(0xc9, BRANCH_W),
jjg@255 245 // impdep 0xfe: PicoJava nonpriv
jjg@255 246 // impdep 0xff: Picojava priv
jjg@255 247
jjg@255 248 // wide opcodes
vromero@1428 249 ILOAD_W(0xc415, WIDE_LOCAL),
vromero@1428 250 LLOAD_W(0xc416, WIDE_LOCAL),
vromero@1428 251 FLOAD_W(0xc417, WIDE_LOCAL),
vromero@1428 252 DLOAD_W(0xc418, WIDE_LOCAL),
vromero@1428 253 ALOAD_W(0xc419, WIDE_LOCAL),
vromero@1428 254 ISTORE_W(0xc436, WIDE_LOCAL),
vromero@1428 255 LSTORE_W(0xc437, WIDE_LOCAL),
vromero@1428 256 FSTORE_W(0xc438, WIDE_LOCAL),
vromero@1428 257 DSTORE_W(0xc439, WIDE_LOCAL),
vromero@1428 258 ASTORE_W(0xc43a, WIDE_LOCAL),
vromero@1428 259 IINC_W(0xc484, WIDE_LOCAL_SHORT),
vromero@1428 260 RET_W(0xc4a9, WIDE_LOCAL),
jjg@255 261
jjg@255 262 // PicoJava nonpriv instructions
jjg@255 263 LOAD_UBYTE(PICOJAVA, 0xfe00),
jjg@255 264 LOAD_BYTE(PICOJAVA, 0xfe01),
jjg@255 265 LOAD_CHAR(PICOJAVA, 0xfe02),
jjg@255 266 LOAD_SHORT(PICOJAVA, 0xfe03),
jjg@255 267 LOAD_WORD(PICOJAVA, 0xfe04),
jjg@255 268 RET_FROM_SUB(PICOJAVA, 0xfe05),
jjg@255 269 LOAD_CHAR_OE(PICOJAVA, 0xfe0a),
jjg@255 270 LOAD_SHORT_OE(PICOJAVA, 0xfe0b),
jjg@255 271 LOAD_WORD_OE(PICOJAVA, 0xfe0c),
jjg@255 272 NCLOAD_UBYTE(PICOJAVA, 0xfe10),
jjg@255 273 NCLOAD_BYTE(PICOJAVA, 0xfe11),
jjg@255 274 NCLOAD_CHAR(PICOJAVA, 0xfe12),
jjg@255 275 NCLOAD_SHORT(PICOJAVA, 0xfe13),
jjg@255 276 NCLOAD_WORD(PICOJAVA, 0xfe14),
jjg@255 277 NCLOAD_CHAR_OE(PICOJAVA, 0xfe1a),
jjg@255 278 NCLOAD_SHORT_OE(PICOJAVA, 0xfe1b),
jjg@255 279 NCLOAD_WORD_OE(PICOJAVA, 0xfe1c),
jjg@255 280 CACHE_FLUSH(PICOJAVA, 0xfe1e),
jjg@255 281 STORE_BYTE(PICOJAVA, 0xfe20),
jjg@255 282 STORE_SHORT(PICOJAVA, 0xfe22),
jjg@255 283 STORE_WORD(PICOJAVA, 0xfe24),
jjg@255 284 STORE_SHORT_OE(PICOJAVA, 0xfe2a),
jjg@255 285 STORE_WORD_OE(PICOJAVA, 0xfe2c),
jjg@255 286 NCSTORE_BYTE(PICOJAVA, 0xfe30),
jjg@255 287 NCSTORE_SHORT(PICOJAVA, 0xfe32),
jjg@255 288 NCSTORE_WORD(PICOJAVA, 0xfe34),
jjg@255 289 NCSTORE_SHORT_OE(PICOJAVA, 0xfe3a),
jjg@255 290 NCSTORE_WORD_OE(PICOJAVA, 0xfe3c),
jjg@255 291 ZERO_LINE(PICOJAVA, 0xfe3e),
jjg@255 292 ENTER_SYNC_METHOD(PICOJAVA, 0xfe3f),
jjg@255 293
jjg@255 294 // PicoJava priv instructions
jjg@255 295 PRIV_LOAD_UBYTE(PICOJAVA, 0xff00),
jjg@255 296 PRIV_LOAD_BYTE(PICOJAVA, 0xff01),
jjg@255 297 PRIV_LOAD_CHAR(PICOJAVA, 0xff02),
jjg@255 298 PRIV_LOAD_SHORT(PICOJAVA, 0xff03),
jjg@255 299 PRIV_LOAD_WORD(PICOJAVA, 0xff04),
jjg@255 300 PRIV_RET_FROM_TRAP(PICOJAVA, 0xff05),
jjg@255 301 PRIV_READ_DCACHE_TAG(PICOJAVA, 0xff06),
jjg@255 302 PRIV_READ_DCACHE_DATA(PICOJAVA, 0xff07),
jjg@255 303 PRIV_LOAD_CHAR_OE(PICOJAVA, 0xff0a),
jjg@255 304 PRIV_LOAD_SHORT_OE(PICOJAVA, 0xff0b),
jjg@255 305 PRIV_LOAD_WORD_OE(PICOJAVA, 0xff0c),
jjg@255 306 PRIV_READ_ICACHE_TAG(PICOJAVA, 0xff0e),
jjg@255 307 PRIV_READ_ICACHE_DATA(PICOJAVA, 0xff0f),
jjg@255 308 PRIV_NCLOAD_UBYTE(PICOJAVA, 0xff10),
jjg@255 309 PRIV_NCLOAD_BYTE(PICOJAVA, 0xff11),
jjg@255 310 PRIV_NCLOAD_CHAR(PICOJAVA, 0xff12),
jjg@255 311 PRIV_NCLOAD_SHORT(PICOJAVA, 0xff13),
jjg@255 312 PRIV_NCLOAD_WORD(PICOJAVA, 0xff14),
jjg@255 313 PRIV_POWERDOWN(PICOJAVA, 0xff16),
jjg@255 314 PRIV_READ_SCACHE_DATA(PICOJAVA, 0xff17),
jjg@255 315 PRIV_NCLOAD_CHAR_OE(PICOJAVA, 0xff1a),
jjg@255 316 PRIV_NCLOAD_SHORT_OE(PICOJAVA, 0xff1b),
jjg@255 317 PRIV_NCLOAD_WORD_OE(PICOJAVA, 0xff1c),
jjg@255 318 PRIV_CACHE_FLUSH(PICOJAVA, 0xff1e),
jjg@255 319 PRIV_CACHE_INDEX_FLUSH(PICOJAVA, 0xff1f),
jjg@255 320 PRIV_STORE_BYTE(PICOJAVA, 0xff20),
jjg@255 321 PRIV_STORE_SHORT(PICOJAVA, 0xff22),
jjg@255 322 PRIV_STORE_WORD(PICOJAVA, 0xff24),
jjg@255 323 PRIV_WRITE_DCACHE_TAG(PICOJAVA, 0xff26),
jjg@255 324 PRIV_WRITE_DCACHE_DATA(PICOJAVA, 0xff27),
jjg@255 325 PRIV_STORE_SHORT_OE(PICOJAVA, 0xff2a),
jjg@255 326 PRIV_STORE_WORD_OE(PICOJAVA, 0xff2c),
jjg@255 327 PRIV_WRITE_ICACHE_TAG(PICOJAVA, 0xff2e),
jjg@255 328 PRIV_WRITE_ICACHE_DATA(PICOJAVA, 0xff2f),
jjg@255 329 PRIV_NCSTORE_BYTE(PICOJAVA, 0xff30),
jjg@255 330 PRIV_NCSTORE_SHORT(PICOJAVA, 0xff32),
jjg@255 331 PRIV_NCSTORE_WORD(PICOJAVA, 0xff34),
jjg@255 332 PRIV_RESET(PICOJAVA, 0xff36),
jjg@255 333 PRIV_WRITE_SCACHE_DATA(PICOJAVA, 0xff37),
jjg@255 334 PRIV_NCSTORE_SHORT_OE(PICOJAVA, 0xff3a),
jjg@255 335 PRIV_NCSTORE_WORD_OE(PICOJAVA, 0xff3c),
jjg@255 336 PRIV_ZERO_LINE(PICOJAVA, 0xff3e),
jjg@255 337 PRIV_READ_REG_0(PICOJAVA, 0xff40),
jjg@255 338 PRIV_READ_REG_1(PICOJAVA, 0xff41),
jjg@255 339 PRIV_READ_REG_2(PICOJAVA, 0xff42),
jjg@255 340 PRIV_READ_REG_3(PICOJAVA, 0xff43),
jjg@255 341 PRIV_READ_REG_4(PICOJAVA, 0xff44),
jjg@255 342 PRIV_READ_REG_5(PICOJAVA, 0xff45),
jjg@255 343 PRIV_READ_REG_6(PICOJAVA, 0xff46),
jjg@255 344 PRIV_READ_REG_7(PICOJAVA, 0xff47),
jjg@255 345 PRIV_READ_REG_8(PICOJAVA, 0xff48),
jjg@255 346 PRIV_READ_REG_9(PICOJAVA, 0xff49),
jjg@255 347 PRIV_READ_REG_10(PICOJAVA, 0xff4a),
jjg@255 348 PRIV_READ_REG_11(PICOJAVA, 0xff4b),
jjg@255 349 PRIV_READ_REG_12(PICOJAVA, 0xff4c),
jjg@255 350 PRIV_READ_REG_13(PICOJAVA, 0xff4d),
jjg@255 351 PRIV_READ_REG_14(PICOJAVA, 0xff4e),
jjg@255 352 PRIV_READ_REG_15(PICOJAVA, 0xff4f),
jjg@255 353 PRIV_READ_REG_16(PICOJAVA, 0xff50),
jjg@255 354 PRIV_READ_REG_17(PICOJAVA, 0xff51),
jjg@255 355 PRIV_READ_REG_18(PICOJAVA, 0xff52),
jjg@255 356 PRIV_READ_REG_19(PICOJAVA, 0xff53),
jjg@255 357 PRIV_READ_REG_20(PICOJAVA, 0xff54),
jjg@255 358 PRIV_READ_REG_21(PICOJAVA, 0xff55),
jjg@255 359 PRIV_READ_REG_22(PICOJAVA, 0xff56),
jjg@255 360 PRIV_READ_REG_23(PICOJAVA, 0xff57),
jjg@255 361 PRIV_READ_REG_24(PICOJAVA, 0xff58),
jjg@255 362 PRIV_READ_REG_25(PICOJAVA, 0xff59),
jjg@255 363 PRIV_READ_REG_26(PICOJAVA, 0xff5a),
jjg@255 364 PRIV_READ_REG_27(PICOJAVA, 0xff5b),
jjg@255 365 PRIV_READ_REG_28(PICOJAVA, 0xff5c),
jjg@255 366 PRIV_READ_REG_29(PICOJAVA, 0xff5d),
jjg@255 367 PRIV_READ_REG_30(PICOJAVA, 0xff5e),
jjg@255 368 PRIV_READ_REG_31(PICOJAVA, 0xff5f),
jjg@255 369 PRIV_WRITE_REG_0(PICOJAVA, 0xff60),
jjg@255 370 PRIV_WRITE_REG_1(PICOJAVA, 0xff61),
jjg@255 371 PRIV_WRITE_REG_2(PICOJAVA, 0xff62),
jjg@255 372 PRIV_WRITE_REG_3(PICOJAVA, 0xff63),
jjg@255 373 PRIV_WRITE_REG_4(PICOJAVA, 0xff64),
jjg@255 374 PRIV_WRITE_REG_5(PICOJAVA, 0xff65),
jjg@255 375 PRIV_WRITE_REG_6(PICOJAVA, 0xff66),
jjg@255 376 PRIV_WRITE_REG_7(PICOJAVA, 0xff67),
jjg@255 377 PRIV_WRITE_REG_8(PICOJAVA, 0xff68),
jjg@255 378 PRIV_WRITE_REG_9(PICOJAVA, 0xff69),
jjg@255 379 PRIV_WRITE_REG_10(PICOJAVA, 0xff6a),
jjg@255 380 PRIV_WRITE_REG_11(PICOJAVA, 0xff6b),
jjg@255 381 PRIV_WRITE_REG_12(PICOJAVA, 0xff6c),
jjg@255 382 PRIV_WRITE_REG_13(PICOJAVA, 0xff6d),
jjg@255 383 PRIV_WRITE_REG_14(PICOJAVA, 0xff6e),
jjg@255 384 PRIV_WRITE_REG_15(PICOJAVA, 0xff6f),
jjg@255 385 PRIV_WRITE_REG_16(PICOJAVA, 0xff70),
jjg@255 386 PRIV_WRITE_REG_17(PICOJAVA, 0xff71),
jjg@255 387 PRIV_WRITE_REG_18(PICOJAVA, 0xff72),
jjg@255 388 PRIV_WRITE_REG_19(PICOJAVA, 0xff73),
jjg@255 389 PRIV_WRITE_REG_20(PICOJAVA, 0xff74),
jjg@255 390 PRIV_WRITE_REG_21(PICOJAVA, 0xff75),
jjg@255 391 PRIV_WRITE_REG_22(PICOJAVA, 0xff76),
jjg@255 392 PRIV_WRITE_REG_23(PICOJAVA, 0xff77),
jjg@255 393 PRIV_WRITE_REG_24(PICOJAVA, 0xff78),
jjg@255 394 PRIV_WRITE_REG_25(PICOJAVA, 0xff79),
jjg@255 395 PRIV_WRITE_REG_26(PICOJAVA, 0xff7a),
jjg@255 396 PRIV_WRITE_REG_27(PICOJAVA, 0xff7b),
jjg@255 397 PRIV_WRITE_REG_28(PICOJAVA, 0xff7c),
jjg@255 398 PRIV_WRITE_REG_29(PICOJAVA, 0xff7d),
jjg@255 399 PRIV_WRITE_REG_30(PICOJAVA, 0xff7e),
jjg@255 400 PRIV_WRITE_REG_31(PICOJAVA, 0xff7f);
jjg@255 401
jjg@255 402 Opcode(int opcode) {
jjg@255 403 this(STANDARD, opcode, NO_OPERANDS);
jjg@255 404 }
jjg@255 405
jjg@255 406 Opcode(int opcode, Instruction.Kind kind) {
jjg@255 407 this(STANDARD, opcode, kind);
jjg@255 408 }
jjg@255 409
jjg@255 410 Opcode(Set set, int opcode) {
jjg@255 411 this(set, opcode, (set == STANDARD ? NO_OPERANDS : WIDE_NO_OPERANDS));
jjg@255 412 }
jjg@255 413
jjg@255 414 Opcode(Set set, int opcode, Instruction.Kind kind) {
jjg@255 415 this.set = set;
jjg@255 416 this.opcode = opcode;
jjg@255 417 this.kind = kind;
jjg@255 418 }
jjg@255 419
jjg@255 420 public final Set set;
jjg@255 421 public final int opcode;
jjg@255 422 public final Instruction.Kind kind;
jjg@255 423
jjg@255 424 /** Get the Opcode for a simple standard 1-byte opcode. */
jjg@255 425 public static Opcode get(int opcode) {
jjg@255 426 return stdOpcodes[opcode];
jjg@255 427 }
jjg@255 428
jjg@255 429 /** Get the Opcode for 1- or 2-byte opcode. */
jjg@255 430 public static Opcode get(int opcodePrefix, int opcode) {
jjg@255 431 Opcode[] block = getOpcodeBlock(opcodePrefix);
jjg@255 432 return (block == null ? null : block[opcode]);
jjg@255 433 }
jjg@255 434
jjg@255 435 private static Opcode[] getOpcodeBlock(int opcodePrefix) {
jjg@255 436 switch (opcodePrefix) {
jjg@255 437 case 0:
jjg@255 438 return stdOpcodes;
jjg@255 439 case WIDE:
jjg@255 440 return wideOpcodes;
jjg@255 441 case NONPRIV:
jjg@255 442 return nonPrivOpcodes;
jjg@255 443 case PRIV:
jjg@255 444 return privOpcodes;
jjg@255 445 default:
jjg@255 446 return null;
jjg@255 447 }
jjg@255 448
jjg@255 449 }
jjg@255 450
vromero@1442 451 private static final Opcode[] stdOpcodes = new Opcode[256];
vromero@1442 452 private static final Opcode[] wideOpcodes = new Opcode[256];
vromero@1442 453 private static final Opcode[] nonPrivOpcodes = new Opcode[256];
vromero@1442 454 private static final Opcode[] privOpcodes = new Opcode[256];
jjg@255 455 static {
jjg@255 456 for (Opcode o: values())
jjg@255 457 getOpcodeBlock(o.opcode >> 8)[o.opcode & 0xff] = o;
jjg@255 458 }
jjg@255 459
jjg@255 460 /** The byte prefix for the wide instructions. */
jjg@255 461 public static final int WIDE = 0xc4;
jjg@255 462 /** The byte prefix for the PicoJava nonpriv instructions. */
jjg@255 463 public static final int NONPRIV = 0xfe;
jjg@255 464 /** The byte prefix for the PicoJava priv instructions. */
jjg@255 465 public static final int PRIV = 0xff;
jjg@255 466
jjg@255 467 public enum Set {
jjg@255 468 /** Standard opcodes. */
jjg@255 469 STANDARD,
jjg@255 470 /** Legacy support for PicoJava opcodes. */
jjg@255 471 PICOJAVA };
jjg@255 472 }

mercurial