bcv-vf/src/org/codehaus/janino/Opcode.java

615 lines
32 KiB
Java

/*
* 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. */
final
class Opcode {
private Opcode() {}
// Symbolic JVM opcodes, in alphabetical order.
// CHECKSTYLE JavadocVariable:OFF
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;
// CHECKSTYLE JavadocVariable:ON
// Constants for the "OPCODE_PROPERTIES" array.
/** Special value for {@link #OPCODE_PROPERTIES} indicating that this element represents an invalid opcode. */
public static final short INVALID_OPCODE = -1;
/** Masks the 'stack delta' portion of {@link #OPCODE_PROPERTIES}. */
public static final short SD_MASK = 31;
/**
* Indicates that the opcode represented by this element of {@link #OPCODE_PROPERTIES} reduces the operand stack
* size by 4 elements.
*/
public static final short SD_M4 = 0;
/**
* Indicates that the opcode represented by this element of {@link #OPCODE_PROPERTIES} reduces the operand stack
* size by 3 elements.
*/
public static final short SD_M3 = 1;
/**
* Indicates that the opcode represented by this element of {@link #OPCODE_PROPERTIES} reduces the operand stack
* size by 2 elements.
*/
public static final short SD_M2 = 2;
/**
* Indicates that the opcode represented by this element of {@link #OPCODE_PROPERTIES} reduces the operand stack
* size by 1 element.
*/
public static final short SD_M1 = 3;
/**
* Indicates that the opcode represented by this element of {@link #OPCODE_PROPERTIES} results in the same operand
* stack size.
*/
public static final short SD_P0 = 4;
/**
* Indicates that the opcode represented by this element of {@link #OPCODE_PROPERTIES} increases the operand stack
* size by 1 element.
*/
public static final short SD_P1 = 5;
/**
* Indicates that the opcode represented by this element of {@link #OPCODE_PROPERTIES} increases the operand stack
* size by 2 elements.
*/
public static final short SD_P2 = 6;
/** Indicates that the opcode represented by this element of {@link #OPCODE_PROPERTIES} clears the operand stack. */
public static final short SD_0 = 7;
/** This element of {@link #OPCODE_PROPERTIES} represents the GETFIELD opcode. */
public static final short SD_GETFIELD = 9;
/** This element of {@link #OPCODE_PROPERTIES} represents the GETSTATIC opcode. */
public static final short SD_GETSTATIC = 10;
/** This element of {@link #OPCODE_PROPERTIES} represents the PUTFIELD opcode. */
public static final short SD_PUTFIELD = 11;
/** This element of {@link #OPCODE_PROPERTIES} represents the PUTSTATIC opcode. */
public static final short SD_PUTSTATIC = 12;
/** This element of {@link #OPCODE_PROPERTIES} represents the INVOKEVIRTUAL opcode. */
public static final short SD_INVOKEVIRTUAL = 13;
/** This element of {@link #OPCODE_PROPERTIES} represents the INVOKESPECIAL opcode. */
public static final short SD_INVOKESPECIAL = 14;
/** This element of {@link #OPCODE_PROPERTIES} represents the INVOKESTATIC opcode. */
public static final short SD_INVOKESTATIC = 15;
/** This element of {@link #OPCODE_PROPERTIES} represents the INVOKEINTERFACE opcode. */
public static final short SD_INVOKEINTERFACE = 16;
/** This element of {@link #OPCODE_PROPERTIES} represents the MULTIANEWARRAY opcode. */
public static final short SD_MULTIANEWARRAY = 18;
// Properties of the opcode's first operand.
/** Masks the 'first operand' portion of {@link #OPCODE_PROPERTIES}. */
public static final short OP1_MASK = 15 * 32;
/** The first operand of this opcode is a signed byte. */
public static final short OP1_SB = 1 * 32;
/** The first operand of this opcode is an unsigned byte. */
public static final short OP1_UB = 2 * 32;
/** The first operand of this opcode is a signed short. */
public static final short OP1_SS = 3 * 32;
/** The first operand of this opcode is a one-byte constant pool index. */
public static final short OP1_CP1 = 4 * 32;
/** The first operand of this opcode is a two-byte constant pool index. */
public static final short OP1_CP2 = 5 * 32;
/** The first operand of this opcode is a one-byte local variable array index. */
public static final short OP1_LV1 = 6 * 32;
/** The first operand of this opcode is a two-byte local variable array index. */
public static final short OP1_LV2 = 7 * 32;
/** The first operand of this opcode is a two-byte branch offset. */
public static final short OP1_BO2 = 8 * 32;
/** The first operand of this opcode is a four-byte branch offset. */
public static final short OP1_BO4 = 9 * 32;
/** The first operand of this opcode is a signed byte. */
public static final short OP1_LOOKUPSWITCH = 10 * 32;
/** The first operand of this opcode is a signed byte. */
public static final short OP1_TABLESWITCH = 11 * 32;
/** The first operand of this opcode is a signed byte. */
public static final short OP1_JSR = 12 * 32;
// Properties of the opcode's second operand.
/** Masks the 'second operand' portion of {@link #OPCODE_PROPERTIES}. */
public static final short OP2_MASK = 3 * 512;
/** The second operand of this opcode is a signed byte. */
public static final short OP2_SB = 1 * 512;
/** The second operand of this opcode is a signed short. */
public static final short OP2_SS = 2 * 512;
// Properties of the opcode's third operand.
/** Masks the 'third operand' portion of {@link #OPCODE_PROPERTIES}. */
public static final short OP3_MASK = 1 * 2048;
/** The third operand of this opcode is a signed byte. */
public static final short OP3_SB = 1 * 2048;
// Properties of the opcode's 'implicit' operand.
/** Masks the 'implicit operand' portion of {@link #OPCODE_PROPERTIES}. */
public static final short IO_MASK = 7 * 4096;
/** The local variable wiht index 0 is the opcode's implicit operand. */
public static final short IO_LV_0 = 1 * 4096;
/** The local variable wiht index 1 is the opcode's implicit operand. */
public static final short IO_LV_1 = 2 * 4096;
/** The local variable wiht index 2 is the opcode's implicit operand. */
public static final short IO_LV_2 = 3 * 4096;
/** The local variable wiht index 3 is the opcode's implicit operand. */
public static final short IO_LV_3 = 4 * 4096;
/**
* This opcode never 'completes normally', i.e. it never passes the control flow to the immediately following
* opcode.
*/
public static final short NO_FALLTHROUGH = (short) 32768;
/** The {@code n}th element of this array describes the properties of the JVM opcode {@code n}. */
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
};
/** The {@code n}th element of this array describes the properties of the JVM opcode {@code WIDE n}. */
public static final short[] WIDE_OPCODE_PROPERTIES = new short[256];
static {
for (int i = 0; i < Opcode.WIDE_OPCODE_PROPERTIES.length; ++i) {
Opcode.WIDE_OPCODE_PROPERTIES[i] = Opcode.INVALID_OPCODE;
}
// load instructions
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.ILOAD] = Opcode.SD_P1 | Opcode.OP1_LV2;
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.FLOAD] = Opcode.SD_P1 | Opcode.OP1_LV2;
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.ALOAD] = Opcode.SD_P1 | Opcode.OP1_LV2;
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.LLOAD] = Opcode.SD_P2 | Opcode.OP1_LV2;
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.DLOAD] = Opcode.SD_P2 | Opcode.OP1_LV2;
// store instructions
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.ISTORE] = Opcode.SD_M1 | Opcode.OP1_LV2;
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.FSTORE] = Opcode.SD_M1 | Opcode.OP1_LV2;
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.ASTORE] = Opcode.SD_M1 | Opcode.OP1_LV2;
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.LSTORE] = Opcode.SD_M2 | Opcode.OP1_LV2;
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.DSTORE] = Opcode.SD_M2 | Opcode.OP1_LV2;
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.IINC] = Opcode.SD_P0 | Opcode.OP1_LV2 | Opcode.OP2_SS;
Opcode.WIDE_OPCODE_PROPERTIES[0xff & Opcode.RET] = Opcode.SD_P0 | Opcode.OP1_LV2;
}
}