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