
/*
 * Janino - An embedded Java[TM] compiler
 *
 * Copyright (c) 2001-2010, Arno Unkrig
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
 * following conditions are met:
 *
 *    1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
 *       following disclaimer.
 *    2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
 *       following disclaimer in the documentation and/or other materials provided with the distribution.
 *    3. The name of the author may not be used to endorse or promote products derived from this software without
 *       specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
 * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

package org.codehaus.janino;

/**
 * Definitions of Java bytecode opcodes.
 */

/*package*/ final
class Opcode {
    private Opcode() {}

    public static final byte AALOAD          = 50;
    public static final byte AASTORE         = 83;
    public static final byte ACONST_NULL     = 1;
    public static final byte ALOAD           = 25;
    public static final byte ALOAD_0         = 42;
    public static final byte ALOAD_1         = 43;
    public static final byte ALOAD_2         = 44;
    public static final byte ALOAD_3         = 45;
    public static final byte ANEWARRAY       = (byte) 189;
    public static final byte ARETURN         = (byte) 176;
    public static final byte ARRAYLENGTH     = (byte) 190;
    public static final byte ASTORE          = 58;
    public static final byte ASTORE_0        = 75;
    public static final byte ASTORE_1        = 76;
    public static final byte ASTORE_2        = 77;
    public static final byte ASTORE_3        = 78;
    public static final byte ATHROW          = (byte) 191;
    public static final byte BALOAD          = 51;
    public static final byte BASTORE         = 84;
    public static final byte BIPUSH          = 16;
    public static final byte CALOAD          = 52;
    public static final byte CASTORE         = 85;
    public static final byte CHECKCAST       = (byte) 192;
    public static final byte D2F             = (byte) 144;
    public static final byte D2I             = (byte) 142;
    public static final byte D2L             = (byte) 143;
    public static final byte DADD            = 99;
    public static final byte DALOAD          = 49;
    public static final byte DASTORE         = 82;
    public static final byte DCMPG           = (byte) 152;
    public static final byte DCMPL           = (byte) 151;
    public static final byte DCONST_0        = 14;
    public static final byte DCONST_1        = 15;
    public static final byte DDIV            = 111;
    public static final byte DLOAD           = 24;
    public static final byte DLOAD_0         = 38;
    public static final byte DLOAD_1         = 39;
    public static final byte DLOAD_2         = 40;
    public static final byte DLOAD_3         = 41;
    public static final byte DMUL            = 107;
    public static final byte DNEG            = 119;
    public static final byte DREM            = 115;
    public static final byte DRETURN         = (byte) 175;
    public static final byte DSTORE          = 57;
    public static final byte DSTORE_0        = 71;
    public static final byte DSTORE_1        = 72;
    public static final byte DSTORE_2        = 73;
    public static final byte DSTORE_3        = 74;
    public static final byte DSUB            = 103;
    public static final byte DUP             = 89;
    public static final byte DUP_X1          = 90;
    public static final byte DUP_X2          = 91;
    public static final byte DUP2            = 92;
    public static final byte DUP2_X1         = 93;
    public static final byte DUP2_X2         = 94;
    public static final byte F2D             = (byte) 141;
    public static final byte F2I             = (byte) 139;
    public static final byte F2L             = (byte) 140;
    public static final byte FADD            = 98;
    public static final byte FALOAD          = 48;
    public static final byte FASTORE         = 81;
    public static final byte FCMPG           = (byte) 150;
    public static final byte FCMPL           = (byte) 149;
    public static final byte FCONST_0        = 11;
    public static final byte FCONST_1        = 12;
    public static final byte FCONST_2        = 13;
    public static final byte FDIV            = 110;
    public static final byte FLOAD           = 23;
    public static final byte FLOAD_0         = 34;
    public static final byte FLOAD_1         = 35;
    public static final byte FLOAD_2         = 36;
    public static final byte FLOAD_3         = 37;
    public static final byte FMUL            = 106;
    public static final byte FNEG            = 118;
    public static final byte FREM            = 114;
    public static final byte FRETURN         = (byte) 174;
    public static final byte FSTORE          = 56;
    public static final byte FSTORE_0        = 67;
    public static final byte FSTORE_1        = 68;
    public static final byte FSTORE_2        = 69;
    public static final byte FSTORE_3        = 70;
    public static final byte FSUB            = 102;
    public static final byte GETFIELD        = (byte) 180;
    public static final byte GETSTATIC       = (byte) 178;
    public static final byte GOTO            = (byte) 167;
    public static final byte GOTO_W          = (byte) 200;
    public static final byte I2B             = (byte) 145;
    public static final byte I2C             = (byte) 146;
    public static final byte I2D             = (byte) 135;
    public static final byte I2F             = (byte) 134;
    public static final byte I2L             = (byte) 133;
    public static final byte I2S             = (byte) 147;
    public static final byte IADD            = 96;
    public static final byte IALOAD          = 46;
    public static final byte IAND            = 126;
    public static final byte IASTORE         = 79;
    public static final byte ICONST_M1       = 2;
    public static final byte ICONST_0        = 3;
    public static final byte ICONST_1        = 4;
    public static final byte ICONST_2        = 5;
    public static final byte ICONST_3        = 6;
    public static final byte ICONST_4        = 7;
    public static final byte ICONST_5        = 8;
    public static final byte IDIV            = 108;
    public static final byte IF_ACMPEQ       = (byte) 165;
    public static final byte IF_ACMPNE       = (byte) 166;
    public static final byte IF_ICMPEQ       = (byte) 159;
    public static final byte IF_ICMPNE       = (byte) 160;
    public static final byte IF_ICMPLT       = (byte) 161;
    public static final byte IF_ICMPGE       = (byte) 162;
    public static final byte IF_ICMPGT       = (byte) 163;
    public static final byte IF_ICMPLE       = (byte) 164;
    public static final byte IFEQ            = (byte) 153;
    public static final byte IFNE            = (byte) 154;
    public static final byte IFLT            = (byte) 155;
    public static final byte IFGE            = (byte) 156;
    public static final byte IFGT            = (byte) 157;
    public static final byte IFLE            = (byte) 158;
    public static final byte IFNONNULL       = (byte) 199;
    public static final byte IFNULL          = (byte) 198;
    public static final byte IINC            = (byte) 132;
    public static final byte ILOAD           = 21;
    public static final byte ILOAD_0         = 26;
    public static final byte ILOAD_1         = 27;
    public static final byte ILOAD_2         = 28;
    public static final byte ILOAD_3         = 29;
    public static final byte IMUL            = 104;
    public static final byte INEG            = 116;
    public static final byte INSTANCEOF      = (byte) 193;
    public static final byte INVOKEINTERFACE = (byte) 185;
    public static final byte INVOKESPECIAL   = (byte) 183;
    public static final byte INVOKESTATIC    = (byte) 184;
    public static final byte INVOKEVIRTUAL   = (byte) 182;
    public static final byte IOR             = (byte) 128;
    public static final byte IREM            = 112;
    public static final byte IRETURN         = (byte) 172;
    public static final byte ISHL            = 120;
    public static final byte ISHR            = 122;
    public static final byte ISTORE          = 54;
    public static final byte ISTORE_0        = 59;
    public static final byte ISTORE_1        = 60;
    public static final byte ISTORE_2        = 61;
    public static final byte ISTORE_3        = 62;
    public static final byte ISUB            = 100;
    public static final byte IUSHR           = 124;
    public static final byte IXOR            = (byte) 130;
    public static final byte JSR             = (byte) 168;
    public static final byte JSR_W           = (byte) 201;
    public static final byte L2D             = (byte) 138;
    public static final byte L2F             = (byte) 137;
    public static final byte L2I             = (byte) 136;
    public static final byte LADD            = 97;
    public static final byte LALOAD          = 47;
    public static final byte LAND            = 127;
    public static final byte LASTORE         = 80;
    public static final byte LCMP            = (byte) 148;
    public static final byte LCONST_0        = 9;
    public static final byte LCONST_1        = 10;
    public static final byte LDC             = 18;
    public static final byte LDC_W           = 19;
    public static final byte LDC2_W          = 20;
    public static final byte LDIV            = 109;
    public static final byte LLOAD           = 22;
    public static final byte LLOAD_0         = 30;
    public static final byte LLOAD_1         = 31;
    public static final byte LLOAD_2         = 32;
    public static final byte LLOAD_3         = 33;
    public static final byte LMUL            = 105;
    public static final byte LNEG            = 117;
    public static final byte LOOKUPSWITCH    = (byte) 171;
    public static final byte LOR             = (byte) 129;
    public static final byte LREM            = 113;
    public static final byte LRETURN         = (byte) 173;
    public static final byte LSHL            = 121;
    public static final byte LSHR            = 123;
    public static final byte LSTORE          = 55;
    public static final byte LSTORE_0        = 63;
    public static final byte LSTORE_1        = 64;
    public static final byte LSTORE_2        = 65;
    public static final byte LSTORE_3        = 66;
    public static final byte LSUB            = 101;
    public static final byte LUSHR           = 125;
    public static final byte LXOR            = (byte) 131;
    public static final byte MONITORENTER    = (byte) 194;
    public static final byte MONITOREXIT     = (byte) 195;
    public static final byte MULTIANEWARRAY  = (byte) 197;
    public static final byte NEW             = (byte) 187;
    public static final byte NEWARRAY        = (byte) 188;
    public static final byte NOP             = 0;
    public static final byte POP             = 87;
    public static final byte POP2            = 88;
    public static final byte PUTFIELD        = (byte) 181;
    public static final byte PUTSTATIC       = (byte) 179;
    public static final byte RET             = (byte) 169;
    public static final byte RETURN          = (byte) 177;
    public static final byte SALOAD          = 53;
    public static final byte SASTORE         = 86;
    public static final byte SIPUSH          = 17;
    public static final byte SWAP            = 95;
    public static final byte TABLESWITCH     = (byte) 170;
    public static final byte WIDE            = (byte) 196;

    /**
     * Constants for the "OPCODE_PROPERTIES" array.
     */
    public static final short INVALID_OPCODE = -1;

    // "Stack delta" constants.
    public static final short SD_MASK            = 31;
    public static final short SD_M4              = 0;
    public static final short SD_M3              = 1;
    public static final short SD_M2              = 2;
    public static final short SD_M1              = 3;
    public static final short SD_P0              = 4;
    public static final short SD_P1              = 5;
    public static final short SD_P2              = 6;
    public static final short SD_0               = 7;
    public static final short SD_GETFIELD        = 9;
    public static final short SD_GETSTATIC       = 10;
    public static final short SD_PUTFIELD        = 11;
    public static final short SD_PUTSTATIC       = 12;
    public static final short SD_INVOKEVIRTUAL   = 13;
    public static final short SD_INVOKESPECIAL   = 14;
    public static final short SD_INVOKESTATIC    = 15;
    public static final short SD_INVOKEINTERFACE = 16;
    public static final short SD_MULTIANEWARRAY  = 18;

    // Operand 1 types.
    public static final short OP1_MASK         = 15 * 32;
    public static final short OP1_SB           =  1 * 32;
    public static final short OP1_UB           =  2 * 32;
    public static final short OP1_SS           =  3 * 32;
    public static final short OP1_CP1          =  4 * 32;
    public static final short OP1_CP2          =  5 * 32;
    public static final short OP1_LV1          =  6 * 32;
    public static final short OP1_LV2          =  7 * 32;
    public static final short OP1_BO2          =  8 * 32;
    public static final short OP1_BO4          =  9 * 32;
    public static final short OP1_LOOKUPSWITCH = 10 * 32;
    public static final short OP1_TABLESWITCH  = 11 * 32;
    public static final short OP1_JSR          = 12 * 32;

    // Operand 2 types.
    public static final short OP2_MASK = 3 * 512;
    public static final short OP2_SB   = 1 * 512;
    public static final short OP2_SS   = 2 * 512;

    // Operand 3 types.
    public static final short OP3_MASK = 1 * 2048;
    public static final short OP3_SB   = 1 * 2048;

    // Implicit operands.
    public static final short IO_MASK = 7 * 4096;
    public static final short IO_LV_0 = 1 * 4096;
    public static final short IO_LV_1 = 2 * 4096;
    public static final short IO_LV_2 = 3 * 4096;
    public static final short IO_LV_3 = 4 * 4096;

    public static final short NO_FALLTHROUGH = (short) 32768;

    public static final short[] OPCODE_PROPERTIES = {
        // CHECKSTYLE WrapAndIndent:OFF
/*  0*/ /*NOP*/             Opcode.SD_P0,
        /*ACONST_NULL*/     Opcode.SD_P1,
        /*ICONST_M1*/       Opcode.SD_P1,
        /*ICONST_0*/        Opcode.SD_P1,
        /*ICONST_1*/        Opcode.SD_P1,
        /*ICONST_2*/        Opcode.SD_P1,
        /*ICONST_3*/        Opcode.SD_P1,
        /*ICONST_4*/        Opcode.SD_P1,
        /*ICONST_5*/        Opcode.SD_P1,
        /*LCONST_0*/        Opcode.SD_P2,
/* 10*/ /*LCONST_1*/        Opcode.SD_P2,
        /*FCONST_0*/        Opcode.SD_P1,
        /*FCONST_1*/        Opcode.SD_P1,
        /*FCONST_2*/        Opcode.SD_P1,
        /*DCONST_0*/        Opcode.SD_P2,
        /*DCONST_1*/        Opcode.SD_P2,
        /*BIPUSH*/          Opcode.SD_P1 | Opcode.OP1_SB,
        /*SIPUSH*/          Opcode.SD_P1 | Opcode.OP1_SS,
        /*LDC*/             Opcode.SD_P1 | Opcode.OP1_CP1,
        /*LDC_W*/           Opcode.SD_P1 | Opcode.OP1_CP2,
/* 20*/ /*LDC2_W*/          Opcode.SD_P2 | Opcode.OP1_CP2,
        /*ILOAD*/           Opcode.SD_P1 | Opcode.OP1_LV1,
        /*LLOAD*/           Opcode.SD_P2 | Opcode.OP1_LV1,
        /*FLOAD*/           Opcode.SD_P1 | Opcode.OP1_LV1,
        /*DLOAD*/           Opcode.SD_P2 | Opcode.OP1_LV1,
        /*ALOAD*/           Opcode.SD_P1 | Opcode.OP1_LV1,
        /*ILOAD_0*/         Opcode.SD_P1 | Opcode.IO_LV_0,
        /*ILOAD_1*/         Opcode.SD_P1 | Opcode.IO_LV_1,
        /*ILOAD_2*/         Opcode.SD_P1 | Opcode.IO_LV_2,
        /*ILOAD_3*/         Opcode.SD_P1 | Opcode.IO_LV_3,
/* 30*/ /*LLOAD_0*/         Opcode.SD_P2 | Opcode.IO_LV_0,
        /*LLOAD_1*/         Opcode.SD_P2 | Opcode.IO_LV_1,
        /*LLOAD_2*/         Opcode.SD_P2 | Opcode.IO_LV_2,
        /*LLOAD_3*/         Opcode.SD_P2 | Opcode.IO_LV_3,
        /*FLOAD_0*/         Opcode.SD_P1 | Opcode.IO_LV_0,
        /*FLOAD_1*/         Opcode.SD_P1 | Opcode.IO_LV_1,
        /*FLOAD_2*/         Opcode.SD_P1 | Opcode.IO_LV_2,
        /*FLOAD_3*/         Opcode.SD_P1 | Opcode.IO_LV_3,
        /*DLOAD_0*/         Opcode.SD_P2 | Opcode.IO_LV_0,
        /*DLOAD_1*/         Opcode.SD_P2 | Opcode.IO_LV_1,
/* 40*/ /*DLOAD_2*/         Opcode.SD_P2 | Opcode.IO_LV_2,
        /*DLOAD_3*/         Opcode.SD_P2 | Opcode.IO_LV_3,
        /*ALOAD_0*/         Opcode.SD_P1 | Opcode.IO_LV_0,
        /*ALOAD_1*/         Opcode.SD_P1 | Opcode.IO_LV_1,
        /*ALOAD_2*/         Opcode.SD_P1 | Opcode.IO_LV_2,
        /*ALOAD_3*/         Opcode.SD_P1 | Opcode.IO_LV_3,
        /*IALOAD*/          Opcode.SD_M1,
        /*LALOAD*/          Opcode.SD_P0,
        /*FALOAD*/          Opcode.SD_M1,
        /*DALOAD*/          Opcode.SD_P0,
/* 50*/ /*AALOAD*/          Opcode.SD_M1,
        /*BALOAD*/          Opcode.SD_M1,
        /*CALOAD*/          Opcode.SD_M1,
        /*SALOAD*/          Opcode.SD_M1,
        /*ISTORE*/          Opcode.SD_M1 | Opcode.OP1_LV1,
        /*LSTORE*/          Opcode.SD_M2 | Opcode.OP1_LV1,
        /*FSTORE*/          Opcode.SD_M1 | Opcode.OP1_LV1,
        /*DSTORE*/          Opcode.SD_M2 | Opcode.OP1_LV1,
        /*ASTORE*/          Opcode.SD_M1 | Opcode.OP1_LV1,
        /*ISTORE_0*/        Opcode.SD_M1 | Opcode.IO_LV_0,
/* 60*/ /*ISTORE_1*/        Opcode.SD_M1 | Opcode.IO_LV_1,
        /*ISTORE_2*/        Opcode.SD_M1 | Opcode.IO_LV_2,
        /*ISTORE_3*/        Opcode.SD_M1 | Opcode.IO_LV_3,
        /*LSTORE_0*/        Opcode.SD_M2 | Opcode.IO_LV_0,
        /*LSTORE_1*/        Opcode.SD_M2 | Opcode.IO_LV_1,
        /*LSTORE_2*/        Opcode.SD_M2 | Opcode.IO_LV_2,
        /*LSTORE_3*/        Opcode.SD_M2 | Opcode.IO_LV_3,
        /*FSTORE_0*/        Opcode.SD_M1 | Opcode.IO_LV_0,
        /*FSTORE_1*/        Opcode.SD_M1 | Opcode.IO_LV_1,
        /*FSTORE_2*/        Opcode.SD_M1 | Opcode.IO_LV_2,
/* 70*/ /*FSTORE_3*/        Opcode.SD_M1 | Opcode.IO_LV_3,
        /*DSTORE_0*/        Opcode.SD_M2 | Opcode.IO_LV_0,
        /*DSTORE_1*/        Opcode.SD_M2 | Opcode.IO_LV_1,
        /*DSTORE_2*/        Opcode.SD_M2 | Opcode.IO_LV_2,
        /*DSTORE_3*/        Opcode.SD_M2 | Opcode.IO_LV_3,
        /*ASTORE_0*/        Opcode.SD_M1 | Opcode.IO_LV_0,
        /*ASTORE_1*/        Opcode.SD_M1 | Opcode.IO_LV_1,
        /*ASTORE_2*/        Opcode.SD_M1 | Opcode.IO_LV_2,
        /*ASTORE_3*/        Opcode.SD_M1 | Opcode.IO_LV_3,
        /*IASTORE*/         Opcode.SD_M3,
/* 80*/ /*LASTORE*/         Opcode.SD_M4,
        /*FASTORE*/         Opcode.SD_M3,
        /*DASTORE*/         Opcode.SD_M4,
        /*AASTORE*/         Opcode.SD_M3,
        /*BASTORE*/         Opcode.SD_M3,
        /*CASTORE*/         Opcode.SD_M3,
        /*SASTORE*/         Opcode.SD_M3,
        /*POP*/             Opcode.SD_M1,
        /*POP2*/            Opcode.SD_M2,
        /*DUP*/             Opcode.SD_P1,
/* 90*/ /*DUP_X1*/          Opcode.SD_P1,
        /*DUP_X2*/          Opcode.SD_P1,
        /*DUP2*/            Opcode.SD_P2,
        /*DUP2_X1*/         Opcode.SD_P2,
        /*DUP2_X2*/         Opcode.SD_P2,
        /*SWAP*/            Opcode.SD_P0,
        /*IADD*/            Opcode.SD_M1,
        /*LADD*/            Opcode.SD_M2,
        /*FADD*/            Opcode.SD_M1,
        /*DADD*/            Opcode.SD_M2,
/*100*/ /*ISUB*/            Opcode.SD_M1,
        /*LSUB*/            Opcode.SD_M2,
        /*FSUB*/            Opcode.SD_M1,
        /*DSUB*/            Opcode.SD_M2,
        /*IMUL*/            Opcode.SD_M1,
        /*LMUL*/            Opcode.SD_M2,
        /*FMUL*/            Opcode.SD_M1,
        /*DMUL*/            Opcode.SD_M2,
        /*IDIV*/            Opcode.SD_M1,
        /*LDIV*/            Opcode.SD_M2,
/*110*/ /*FDIV*/            Opcode.SD_M1,
        /*DDIV*/            Opcode.SD_M2,
        /*IREM*/            Opcode.SD_M1,
        /*LREM*/            Opcode.SD_M2,
        /*FREM*/            Opcode.SD_M1,
        /*DREM*/            Opcode.SD_M2,
        /*INEG*/            Opcode.SD_P0,
        /*LNEG*/            Opcode.SD_P0,
        /*FNEG*/            Opcode.SD_P0,
        /*DNEG*/            Opcode.SD_P0,
/*120*/ /*ISHL*/            Opcode.SD_M1,
        /*LSHL*/            Opcode.SD_M1,
        /*ISHR*/            Opcode.SD_M1,
        /*LSHR*/            Opcode.SD_M1,
        /*IUSHR*/           Opcode.SD_M1,
        /*LUSHR*/           Opcode.SD_M1,
        /*IAND*/            Opcode.SD_M1,
        /*LAND*/            Opcode.SD_M2,
        /*IOR*/             Opcode.SD_M1,
        /*LOR*/             Opcode.SD_M2,
/*130*/ /*IXOR*/            Opcode.SD_M1,
        /*LXOR*/            Opcode.SD_M2,
        /*IINC*/            Opcode.SD_P0 | Opcode.OP1_LV1 | Opcode.OP2_SB,
        /*I2L*/             Opcode.SD_P1,
        /*I2F*/             Opcode.SD_P0,
        /*I2D*/             Opcode.SD_P1,
        /*L2I*/             Opcode.SD_M1,
        /*L2F*/             Opcode.SD_M1,
        /*L2D*/             Opcode.SD_P0,
        /*F2I*/             Opcode.SD_P0,
/*140*/ /*F2L*/             Opcode.SD_P1,
        /*F2D*/             Opcode.SD_P1,
        /*D2I*/             Opcode.SD_M1,
        /*D2L*/             Opcode.SD_P0,
        /*D2F*/             Opcode.SD_M1,
        /*I2B*/             Opcode.SD_P0,
        /*I2C*/             Opcode.SD_P0,
        /*I2S*/             Opcode.SD_P0,
        /*LCMP*/            Opcode.SD_M3,
        /*FCMPL*/           Opcode.SD_M1,
/*150*/ /*FCMPG*/           Opcode.SD_M1,
        /*DCMPL*/           Opcode.SD_M3,
        /*DCMPG*/           Opcode.SD_M3,
        /*IFEQ*/            Opcode.SD_M1 | Opcode.OP1_BO2,
        /*IFNE*/            Opcode.SD_M1 | Opcode.OP1_BO2,
        /*IFLT*/            Opcode.SD_M1 | Opcode.OP1_BO2,
        /*IFGE*/            Opcode.SD_M1 | Opcode.OP1_BO2,
        /*IFGT*/            Opcode.SD_M1 | Opcode.OP1_BO2,
        /*IFLE*/            Opcode.SD_M1 | Opcode.OP1_BO2,
        /*IF_ICMPEQ*/       Opcode.SD_M2 | Opcode.OP1_BO2,
/*160*/ /*IF_ICMPNE*/       Opcode.SD_M2 | Opcode.OP1_BO2,
        /*IF_ICMPLT*/       Opcode.SD_M2 | Opcode.OP1_BO2,
        /*IF_ICMPGE*/       Opcode.SD_M2 | Opcode.OP1_BO2,
        /*IF_ICMPGT*/       Opcode.SD_M2 | Opcode.OP1_BO2,
        /*IF_ICMPLE*/       Opcode.SD_M2 | Opcode.OP1_BO2,
        /*IF_ACMPEQ*/       Opcode.SD_M2 | Opcode.OP1_BO2,
        /*IF_ACMPNE*/       Opcode.SD_M2 | Opcode.OP1_BO2,
        /*GOTO*/            Opcode.SD_P0 | Opcode.OP1_BO2 | Opcode.NO_FALLTHROUGH,
        /*JSR*/             Opcode.SD_P0 | Opcode.OP1_JSR,
        /*RET*/             Opcode.SD_P0 | Opcode.OP1_LV1 | Opcode.NO_FALLTHROUGH,
/*170*/ /*TABLESWITCH*/     Opcode.SD_M1 | Opcode.OP1_TABLESWITCH,
        /*LOOKUPSWITCH*/    Opcode.SD_M1 | Opcode.OP1_LOOKUPSWITCH,
        /*IRETURN*/         Opcode.SD_0 | Opcode.NO_FALLTHROUGH,
        /*LRETURN*/         Opcode.SD_0 | Opcode.NO_FALLTHROUGH,
        /*FRETURN*/         Opcode.SD_0 | Opcode.NO_FALLTHROUGH,
        /*DRETURN*/         Opcode.SD_0 | Opcode.NO_FALLTHROUGH,
        /*ARETURN*/         Opcode.SD_M1 | Opcode.NO_FALLTHROUGH,
        /*RETURN*/          Opcode.SD_0 | Opcode.NO_FALLTHROUGH,
        /*GETSTATIC*/       Opcode.SD_GETSTATIC | Opcode.OP1_CP2,
        /*PUTSTATIC*/       Opcode.SD_PUTSTATIC | Opcode.OP1_CP2,
/*180*/ /*GETFIELD*/        Opcode.SD_GETFIELD | Opcode.OP1_CP2,
        /*PUTFIELD*/        Opcode.SD_PUTFIELD | Opcode.OP1_CP2,
        /*INVOKEVIRTUAL*/   Opcode.SD_INVOKEVIRTUAL | Opcode.OP1_CP2,
        /*INVOKESPECIAL*/   Opcode.SD_INVOKESPECIAL | Opcode.OP1_CP2,
        /*INVOKESTATIC*/    Opcode.SD_INVOKESTATIC | Opcode.OP1_CP2,
        /*INVOKEINTERFACE*/ Opcode.SD_INVOKEINTERFACE | Opcode.OP1_CP2 | Opcode.OP2_SB | Opcode.OP3_SB,
        /*UNUSED*/          Opcode.INVALID_OPCODE,
        /*NEW*/             Opcode.SD_P1 | Opcode.OP1_CP2,
        /*NEWARRAY*/        Opcode.SD_P0 | Opcode.OP1_UB,
        /*ANEWARRAY*/       Opcode.SD_P0 | Opcode.OP1_CP2,
/*190*/ /*ARRAYLENGTH*/     Opcode.SD_P0,
        /*ATHROW*/          Opcode.SD_M1 | Opcode.NO_FALLTHROUGH,
        /*CHECKCAST*/       Opcode.SD_P0 | Opcode.OP1_CP2,
        /*INSTANCEOF*/      Opcode.SD_P0 | Opcode.OP1_CP2,
        /*MONITORENTER*/    Opcode.SD_M1,
        /*MONITOREXIT*/     Opcode.SD_M1,
        /*WIDE*/            Opcode.INVALID_OPCODE,
        /*MULTIANEWARRAY*/  Opcode.SD_MULTIANEWARRAY | Opcode.OP1_CP2 | Opcode.OP2_SB,
        /*IFNULL*/          Opcode.SD_M1 | Opcode.OP1_BO2,
        /*IFNONNULL*/       Opcode.SD_M1 | Opcode.OP1_BO2,
/*200*/ /*GOTO_W*/          Opcode.SD_P0 | Opcode.OP1_BO4 | Opcode.NO_FALLTHROUGH,
        /*JSR_W*/           Opcode.SD_P1 | Opcode.OP1_BO4,
        Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
        Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
/*210*/ Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
        Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
        Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
/*220*/ Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
        Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
        Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
/*230*/ Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
        Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
        Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
/*240*/ Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
        Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
        Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
/*250*/ Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
        Opcode.INVALID_OPCODE, Opcode.INVALID_OPCODE,
        // CHECKSTYLE WrapAndIndent:ON
    };

    public static final short[] WIDE_OPCODE_PROPERTIES = new short[256];
    static {
        for (int i = 0; i < WIDE_OPCODE_PROPERTIES.length; ++i) {
            WIDE_OPCODE_PROPERTIES[i] = Opcode.INVALID_OPCODE;
        }
        // load instructions
        WIDE_OPCODE_PROPERTIES[0xff & Opcode.ILOAD] = Opcode.SD_P1 | Opcode.OP1_LV2;
        WIDE_OPCODE_PROPERTIES[0xff & Opcode.FLOAD] = Opcode.SD_P1 | Opcode.OP1_LV2;
        WIDE_OPCODE_PROPERTIES[0xff & Opcode.ALOAD] = Opcode.SD_P1 | Opcode.OP1_LV2;
        WIDE_OPCODE_PROPERTIES[0xff & Opcode.LLOAD] = Opcode.SD_P2 | Opcode.OP1_LV2;
        WIDE_OPCODE_PROPERTIES[0xff & Opcode.DLOAD] = Opcode.SD_P2 | Opcode.OP1_LV2;

        // store instructions
        WIDE_OPCODE_PROPERTIES[0xff & Opcode.ISTORE] = Opcode.SD_M1 | Opcode.OP1_LV2;
        WIDE_OPCODE_PROPERTIES[0xff & Opcode.FSTORE] = Opcode.SD_M1 | Opcode.OP1_LV2;
        WIDE_OPCODE_PROPERTIES[0xff & Opcode.ASTORE] = Opcode.SD_M1 | Opcode.OP1_LV2;
        WIDE_OPCODE_PROPERTIES[0xff & Opcode.LSTORE] = Opcode.SD_M2 | Opcode.OP1_LV2;
        WIDE_OPCODE_PROPERTIES[0xff & Opcode.DSTORE] = Opcode.SD_M2 | Opcode.OP1_LV2;

        WIDE_OPCODE_PROPERTIES[0xff & Opcode.IINC] = Opcode.SD_P0 | Opcode.OP1_LV2 | Opcode.OP2_SS;
        WIDE_OPCODE_PROPERTIES[0xff & Opcode.RET]  = Opcode.SD_P0 | Opcode.OP1_LV2;
    }
}
