/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.dx.io;

import com.android.dx.util.Hex;

/**
 * Information about each Dalvik opcode.
 */
public final class OpcodeInfo {
    /*
     * TODO: Merge at least most of the info from the Dops class into
     * this one.
     */

    /** non-null; array containing all the information */
    private static final Info[] INFO;

    /**
     * pseudo-opcode used for nonstandard formatted "instructions"
     * (which are mostly not actually instructions, though they do
     * appear in instruction lists). TODO: Retire the usage of this
     * constant.
     */
    public static final Info SPECIAL_FORMAT =
        new Info(Opcodes.SPECIAL_FORMAT, "<special>",
                InstructionCodec.FORMAT_00X, IndexType.NONE);

    // TODO: These payload opcodes should be generated by opcode-gen.

    public static final Info PACKED_SWITCH_PAYLOAD =
        new Info(Opcodes.PACKED_SWITCH_PAYLOAD, "packed-switch-payload",
                InstructionCodec.FORMAT_PACKED_SWITCH_PAYLOAD,
                IndexType.NONE);

    public static final Info SPARSE_SWITCH_PAYLOAD =
        new Info(Opcodes.SPARSE_SWITCH_PAYLOAD, "sparse-switch-payload",
                InstructionCodec.FORMAT_SPARSE_SWITCH_PAYLOAD,
                IndexType.NONE);

    public static final Info FILL_ARRAY_DATA_PAYLOAD =
        new Info(Opcodes.FILL_ARRAY_DATA_PAYLOAD, "fill-array-data-payload",
                InstructionCodec.FORMAT_FILL_ARRAY_DATA_PAYLOAD,
                IndexType.NONE);

    // BEGIN(opcode-info-defs); GENERATED AUTOMATICALLY BY opcode-gen
    public static final Info NOP =
        new Info(Opcodes.NOP, "nop",
            InstructionCodec.FORMAT_10X, IndexType.NONE);

    public static final Info MOVE =
        new Info(Opcodes.MOVE, "move",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info MOVE_FROM16 =
        new Info(Opcodes.MOVE_FROM16, "move/from16",
            InstructionCodec.FORMAT_22X, IndexType.NONE);

    public static final Info MOVE_16 =
        new Info(Opcodes.MOVE_16, "move/16",
            InstructionCodec.FORMAT_32X, IndexType.NONE);

    public static final Info MOVE_WIDE =
        new Info(Opcodes.MOVE_WIDE, "move-wide",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info MOVE_WIDE_FROM16 =
        new Info(Opcodes.MOVE_WIDE_FROM16, "move-wide/from16",
            InstructionCodec.FORMAT_22X, IndexType.NONE);

    public static final Info MOVE_WIDE_16 =
        new Info(Opcodes.MOVE_WIDE_16, "move-wide/16",
            InstructionCodec.FORMAT_32X, IndexType.NONE);

    public static final Info MOVE_OBJECT =
        new Info(Opcodes.MOVE_OBJECT, "move-object",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info MOVE_OBJECT_FROM16 =
        new Info(Opcodes.MOVE_OBJECT_FROM16, "move-object/from16",
            InstructionCodec.FORMAT_22X, IndexType.NONE);

    public static final Info MOVE_OBJECT_16 =
        new Info(Opcodes.MOVE_OBJECT_16, "move-object/16",
            InstructionCodec.FORMAT_32X, IndexType.NONE);

    public static final Info MOVE_RESULT =
        new Info(Opcodes.MOVE_RESULT, "move-result",
            InstructionCodec.FORMAT_11X, IndexType.NONE);

    public static final Info MOVE_RESULT_WIDE =
        new Info(Opcodes.MOVE_RESULT_WIDE, "move-result-wide",
            InstructionCodec.FORMAT_11X, IndexType.NONE);

    public static final Info MOVE_RESULT_OBJECT =
        new Info(Opcodes.MOVE_RESULT_OBJECT, "move-result-object",
            InstructionCodec.FORMAT_11X, IndexType.NONE);

    public static final Info MOVE_EXCEPTION =
        new Info(Opcodes.MOVE_EXCEPTION, "move-exception",
            InstructionCodec.FORMAT_11X, IndexType.NONE);

    public static final Info RETURN_VOID =
        new Info(Opcodes.RETURN_VOID, "return-void",
            InstructionCodec.FORMAT_10X, IndexType.NONE);

    public static final Info RETURN =
        new Info(Opcodes.RETURN, "return",
            InstructionCodec.FORMAT_11X, IndexType.NONE);

    public static final Info RETURN_WIDE =
        new Info(Opcodes.RETURN_WIDE, "return-wide",
            InstructionCodec.FORMAT_11X, IndexType.NONE);

    public static final Info RETURN_OBJECT =
        new Info(Opcodes.RETURN_OBJECT, "return-object",
            InstructionCodec.FORMAT_11X, IndexType.NONE);

    public static final Info CONST_4 =
        new Info(Opcodes.CONST_4, "const/4",
            InstructionCodec.FORMAT_11N, IndexType.NONE);

    public static final Info CONST_16 =
        new Info(Opcodes.CONST_16, "const/16",
            InstructionCodec.FORMAT_21S, IndexType.NONE);

    public static final Info CONST =
        new Info(Opcodes.CONST, "const",
            InstructionCodec.FORMAT_31I, IndexType.NONE);

    public static final Info CONST_HIGH16 =
        new Info(Opcodes.CONST_HIGH16, "const/high16",
            InstructionCodec.FORMAT_21H, IndexType.NONE);

    public static final Info CONST_WIDE_16 =
        new Info(Opcodes.CONST_WIDE_16, "const-wide/16",
            InstructionCodec.FORMAT_21S, IndexType.NONE);

    public static final Info CONST_WIDE_32 =
        new Info(Opcodes.CONST_WIDE_32, "const-wide/32",
            InstructionCodec.FORMAT_31I, IndexType.NONE);

    public static final Info CONST_WIDE =
        new Info(Opcodes.CONST_WIDE, "const-wide",
            InstructionCodec.FORMAT_51L, IndexType.NONE);

    public static final Info CONST_WIDE_HIGH16 =
        new Info(Opcodes.CONST_WIDE_HIGH16, "const-wide/high16",
            InstructionCodec.FORMAT_21H, IndexType.NONE);

    public static final Info CONST_STRING =
        new Info(Opcodes.CONST_STRING, "const-string",
            InstructionCodec.FORMAT_21C, IndexType.STRING_REF);

    public static final Info CONST_STRING_JUMBO =
        new Info(Opcodes.CONST_STRING_JUMBO, "const-string/jumbo",
            InstructionCodec.FORMAT_31C, IndexType.STRING_REF);

    public static final Info CONST_CLASS =
        new Info(Opcodes.CONST_CLASS, "const-class",
            InstructionCodec.FORMAT_21C, IndexType.TYPE_REF);

    public static final Info MONITOR_ENTER =
        new Info(Opcodes.MONITOR_ENTER, "monitor-enter",
            InstructionCodec.FORMAT_11X, IndexType.NONE);

    public static final Info MONITOR_EXIT =
        new Info(Opcodes.MONITOR_EXIT, "monitor-exit",
            InstructionCodec.FORMAT_11X, IndexType.NONE);

    public static final Info CHECK_CAST =
        new Info(Opcodes.CHECK_CAST, "check-cast",
            InstructionCodec.FORMAT_21C, IndexType.TYPE_REF);

    public static final Info INSTANCE_OF =
        new Info(Opcodes.INSTANCE_OF, "instance-of",
            InstructionCodec.FORMAT_22C, IndexType.TYPE_REF);

    public static final Info ARRAY_LENGTH =
        new Info(Opcodes.ARRAY_LENGTH, "array-length",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info NEW_INSTANCE =
        new Info(Opcodes.NEW_INSTANCE, "new-instance",
            InstructionCodec.FORMAT_21C, IndexType.TYPE_REF);

    public static final Info NEW_ARRAY =
        new Info(Opcodes.NEW_ARRAY, "new-array",
            InstructionCodec.FORMAT_22C, IndexType.TYPE_REF);

    public static final Info FILLED_NEW_ARRAY =
        new Info(Opcodes.FILLED_NEW_ARRAY, "filled-new-array",
            InstructionCodec.FORMAT_35C, IndexType.TYPE_REF);

    public static final Info FILLED_NEW_ARRAY_RANGE =
        new Info(Opcodes.FILLED_NEW_ARRAY_RANGE, "filled-new-array/range",
            InstructionCodec.FORMAT_3RC, IndexType.TYPE_REF);

    public static final Info FILL_ARRAY_DATA =
        new Info(Opcodes.FILL_ARRAY_DATA, "fill-array-data",
            InstructionCodec.FORMAT_31T, IndexType.NONE);

    public static final Info THROW =
        new Info(Opcodes.THROW, "throw",
            InstructionCodec.FORMAT_11X, IndexType.NONE);

    public static final Info GOTO =
        new Info(Opcodes.GOTO, "goto",
            InstructionCodec.FORMAT_10T, IndexType.NONE);

    public static final Info GOTO_16 =
        new Info(Opcodes.GOTO_16, "goto/16",
            InstructionCodec.FORMAT_20T, IndexType.NONE);

    public static final Info GOTO_32 =
        new Info(Opcodes.GOTO_32, "goto/32",
            InstructionCodec.FORMAT_30T, IndexType.NONE);

    public static final Info PACKED_SWITCH =
        new Info(Opcodes.PACKED_SWITCH, "packed-switch",
            InstructionCodec.FORMAT_31T, IndexType.NONE);

    public static final Info SPARSE_SWITCH =
        new Info(Opcodes.SPARSE_SWITCH, "sparse-switch",
            InstructionCodec.FORMAT_31T, IndexType.NONE);

    public static final Info CMPL_FLOAT =
        new Info(Opcodes.CMPL_FLOAT, "cmpl-float",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info CMPG_FLOAT =
        new Info(Opcodes.CMPG_FLOAT, "cmpg-float",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info CMPL_DOUBLE =
        new Info(Opcodes.CMPL_DOUBLE, "cmpl-double",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info CMPG_DOUBLE =
        new Info(Opcodes.CMPG_DOUBLE, "cmpg-double",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info CMP_LONG =
        new Info(Opcodes.CMP_LONG, "cmp-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info IF_EQ =
        new Info(Opcodes.IF_EQ, "if-eq",
            InstructionCodec.FORMAT_22T, IndexType.NONE);

    public static final Info IF_NE =
        new Info(Opcodes.IF_NE, "if-ne",
            InstructionCodec.FORMAT_22T, IndexType.NONE);

    public static final Info IF_LT =
        new Info(Opcodes.IF_LT, "if-lt",
            InstructionCodec.FORMAT_22T, IndexType.NONE);

    public static final Info IF_GE =
        new Info(Opcodes.IF_GE, "if-ge",
            InstructionCodec.FORMAT_22T, IndexType.NONE);

    public static final Info IF_GT =
        new Info(Opcodes.IF_GT, "if-gt",
            InstructionCodec.FORMAT_22T, IndexType.NONE);

    public static final Info IF_LE =
        new Info(Opcodes.IF_LE, "if-le",
            InstructionCodec.FORMAT_22T, IndexType.NONE);

    public static final Info IF_EQZ =
        new Info(Opcodes.IF_EQZ, "if-eqz",
            InstructionCodec.FORMAT_21T, IndexType.NONE);

    public static final Info IF_NEZ =
        new Info(Opcodes.IF_NEZ, "if-nez",
            InstructionCodec.FORMAT_21T, IndexType.NONE);

    public static final Info IF_LTZ =
        new Info(Opcodes.IF_LTZ, "if-ltz",
            InstructionCodec.FORMAT_21T, IndexType.NONE);

    public static final Info IF_GEZ =
        new Info(Opcodes.IF_GEZ, "if-gez",
            InstructionCodec.FORMAT_21T, IndexType.NONE);

    public static final Info IF_GTZ =
        new Info(Opcodes.IF_GTZ, "if-gtz",
            InstructionCodec.FORMAT_21T, IndexType.NONE);

    public static final Info IF_LEZ =
        new Info(Opcodes.IF_LEZ, "if-lez",
            InstructionCodec.FORMAT_21T, IndexType.NONE);

    public static final Info AGET =
        new Info(Opcodes.AGET, "aget",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info AGET_WIDE =
        new Info(Opcodes.AGET_WIDE, "aget-wide",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info AGET_OBJECT =
        new Info(Opcodes.AGET_OBJECT, "aget-object",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info AGET_BOOLEAN =
        new Info(Opcodes.AGET_BOOLEAN, "aget-boolean",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info AGET_BYTE =
        new Info(Opcodes.AGET_BYTE, "aget-byte",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info AGET_CHAR =
        new Info(Opcodes.AGET_CHAR, "aget-char",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info AGET_SHORT =
        new Info(Opcodes.AGET_SHORT, "aget-short",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info APUT =
        new Info(Opcodes.APUT, "aput",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info APUT_WIDE =
        new Info(Opcodes.APUT_WIDE, "aput-wide",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info APUT_OBJECT =
        new Info(Opcodes.APUT_OBJECT, "aput-object",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info APUT_BOOLEAN =
        new Info(Opcodes.APUT_BOOLEAN, "aput-boolean",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info APUT_BYTE =
        new Info(Opcodes.APUT_BYTE, "aput-byte",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info APUT_CHAR =
        new Info(Opcodes.APUT_CHAR, "aput-char",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info APUT_SHORT =
        new Info(Opcodes.APUT_SHORT, "aput-short",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info IGET =
        new Info(Opcodes.IGET, "iget",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IGET_WIDE =
        new Info(Opcodes.IGET_WIDE, "iget-wide",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IGET_OBJECT =
        new Info(Opcodes.IGET_OBJECT, "iget-object",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IGET_BOOLEAN =
        new Info(Opcodes.IGET_BOOLEAN, "iget-boolean",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IGET_BYTE =
        new Info(Opcodes.IGET_BYTE, "iget-byte",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IGET_CHAR =
        new Info(Opcodes.IGET_CHAR, "iget-char",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IGET_SHORT =
        new Info(Opcodes.IGET_SHORT, "iget-short",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IPUT =
        new Info(Opcodes.IPUT, "iput",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IPUT_WIDE =
        new Info(Opcodes.IPUT_WIDE, "iput-wide",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IPUT_OBJECT =
        new Info(Opcodes.IPUT_OBJECT, "iput-object",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IPUT_BOOLEAN =
        new Info(Opcodes.IPUT_BOOLEAN, "iput-boolean",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IPUT_BYTE =
        new Info(Opcodes.IPUT_BYTE, "iput-byte",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IPUT_CHAR =
        new Info(Opcodes.IPUT_CHAR, "iput-char",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info IPUT_SHORT =
        new Info(Opcodes.IPUT_SHORT, "iput-short",
            InstructionCodec.FORMAT_22C, IndexType.FIELD_REF);

    public static final Info SGET =
        new Info(Opcodes.SGET, "sget",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SGET_WIDE =
        new Info(Opcodes.SGET_WIDE, "sget-wide",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SGET_OBJECT =
        new Info(Opcodes.SGET_OBJECT, "sget-object",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SGET_BOOLEAN =
        new Info(Opcodes.SGET_BOOLEAN, "sget-boolean",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SGET_BYTE =
        new Info(Opcodes.SGET_BYTE, "sget-byte",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SGET_CHAR =
        new Info(Opcodes.SGET_CHAR, "sget-char",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SGET_SHORT =
        new Info(Opcodes.SGET_SHORT, "sget-short",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SPUT =
        new Info(Opcodes.SPUT, "sput",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SPUT_WIDE =
        new Info(Opcodes.SPUT_WIDE, "sput-wide",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SPUT_OBJECT =
        new Info(Opcodes.SPUT_OBJECT, "sput-object",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SPUT_BOOLEAN =
        new Info(Opcodes.SPUT_BOOLEAN, "sput-boolean",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SPUT_BYTE =
        new Info(Opcodes.SPUT_BYTE, "sput-byte",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SPUT_CHAR =
        new Info(Opcodes.SPUT_CHAR, "sput-char",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info SPUT_SHORT =
        new Info(Opcodes.SPUT_SHORT, "sput-short",
            InstructionCodec.FORMAT_21C, IndexType.FIELD_REF);

    public static final Info INVOKE_VIRTUAL =
        new Info(Opcodes.INVOKE_VIRTUAL, "invoke-virtual",
            InstructionCodec.FORMAT_35C, IndexType.METHOD_REF);

    public static final Info INVOKE_SUPER =
        new Info(Opcodes.INVOKE_SUPER, "invoke-super",
            InstructionCodec.FORMAT_35C, IndexType.METHOD_REF);

    public static final Info INVOKE_DIRECT =
        new Info(Opcodes.INVOKE_DIRECT, "invoke-direct",
            InstructionCodec.FORMAT_35C, IndexType.METHOD_REF);

    public static final Info INVOKE_STATIC =
        new Info(Opcodes.INVOKE_STATIC, "invoke-static",
            InstructionCodec.FORMAT_35C, IndexType.METHOD_REF);

    public static final Info INVOKE_INTERFACE =
        new Info(Opcodes.INVOKE_INTERFACE, "invoke-interface",
            InstructionCodec.FORMAT_35C, IndexType.METHOD_REF);

    public static final Info INVOKE_VIRTUAL_RANGE =
        new Info(Opcodes.INVOKE_VIRTUAL_RANGE, "invoke-virtual/range",
            InstructionCodec.FORMAT_3RC, IndexType.METHOD_REF);

    public static final Info INVOKE_SUPER_RANGE =
        new Info(Opcodes.INVOKE_SUPER_RANGE, "invoke-super/range",
            InstructionCodec.FORMAT_3RC, IndexType.METHOD_REF);

    public static final Info INVOKE_DIRECT_RANGE =
        new Info(Opcodes.INVOKE_DIRECT_RANGE, "invoke-direct/range",
            InstructionCodec.FORMAT_3RC, IndexType.METHOD_REF);

    public static final Info INVOKE_STATIC_RANGE =
        new Info(Opcodes.INVOKE_STATIC_RANGE, "invoke-static/range",
            InstructionCodec.FORMAT_3RC, IndexType.METHOD_REF);

    public static final Info INVOKE_INTERFACE_RANGE =
        new Info(Opcodes.INVOKE_INTERFACE_RANGE, "invoke-interface/range",
            InstructionCodec.FORMAT_3RC, IndexType.METHOD_REF);

    public static final Info NEG_INT =
        new Info(Opcodes.NEG_INT, "neg-int",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info NOT_INT =
        new Info(Opcodes.NOT_INT, "not-int",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info NEG_LONG =
        new Info(Opcodes.NEG_LONG, "neg-long",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info NOT_LONG =
        new Info(Opcodes.NOT_LONG, "not-long",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info NEG_FLOAT =
        new Info(Opcodes.NEG_FLOAT, "neg-float",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info NEG_DOUBLE =
        new Info(Opcodes.NEG_DOUBLE, "neg-double",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info INT_TO_LONG =
        new Info(Opcodes.INT_TO_LONG, "int-to-long",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info INT_TO_FLOAT =
        new Info(Opcodes.INT_TO_FLOAT, "int-to-float",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info INT_TO_DOUBLE =
        new Info(Opcodes.INT_TO_DOUBLE, "int-to-double",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info LONG_TO_INT =
        new Info(Opcodes.LONG_TO_INT, "long-to-int",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info LONG_TO_FLOAT =
        new Info(Opcodes.LONG_TO_FLOAT, "long-to-float",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info LONG_TO_DOUBLE =
        new Info(Opcodes.LONG_TO_DOUBLE, "long-to-double",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info FLOAT_TO_INT =
        new Info(Opcodes.FLOAT_TO_INT, "float-to-int",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info FLOAT_TO_LONG =
        new Info(Opcodes.FLOAT_TO_LONG, "float-to-long",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info FLOAT_TO_DOUBLE =
        new Info(Opcodes.FLOAT_TO_DOUBLE, "float-to-double",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info DOUBLE_TO_INT =
        new Info(Opcodes.DOUBLE_TO_INT, "double-to-int",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info DOUBLE_TO_LONG =
        new Info(Opcodes.DOUBLE_TO_LONG, "double-to-long",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info DOUBLE_TO_FLOAT =
        new Info(Opcodes.DOUBLE_TO_FLOAT, "double-to-float",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info INT_TO_BYTE =
        new Info(Opcodes.INT_TO_BYTE, "int-to-byte",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info INT_TO_CHAR =
        new Info(Opcodes.INT_TO_CHAR, "int-to-char",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info INT_TO_SHORT =
        new Info(Opcodes.INT_TO_SHORT, "int-to-short",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info ADD_INT =
        new Info(Opcodes.ADD_INT, "add-int",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info SUB_INT =
        new Info(Opcodes.SUB_INT, "sub-int",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info MUL_INT =
        new Info(Opcodes.MUL_INT, "mul-int",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info DIV_INT =
        new Info(Opcodes.DIV_INT, "div-int",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info REM_INT =
        new Info(Opcodes.REM_INT, "rem-int",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info AND_INT =
        new Info(Opcodes.AND_INT, "and-int",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info OR_INT =
        new Info(Opcodes.OR_INT, "or-int",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info XOR_INT =
        new Info(Opcodes.XOR_INT, "xor-int",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info SHL_INT =
        new Info(Opcodes.SHL_INT, "shl-int",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info SHR_INT =
        new Info(Opcodes.SHR_INT, "shr-int",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info USHR_INT =
        new Info(Opcodes.USHR_INT, "ushr-int",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info ADD_LONG =
        new Info(Opcodes.ADD_LONG, "add-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info SUB_LONG =
        new Info(Opcodes.SUB_LONG, "sub-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info MUL_LONG =
        new Info(Opcodes.MUL_LONG, "mul-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info DIV_LONG =
        new Info(Opcodes.DIV_LONG, "div-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info REM_LONG =
        new Info(Opcodes.REM_LONG, "rem-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info AND_LONG =
        new Info(Opcodes.AND_LONG, "and-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info OR_LONG =
        new Info(Opcodes.OR_LONG, "or-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info XOR_LONG =
        new Info(Opcodes.XOR_LONG, "xor-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info SHL_LONG =
        new Info(Opcodes.SHL_LONG, "shl-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info SHR_LONG =
        new Info(Opcodes.SHR_LONG, "shr-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info USHR_LONG =
        new Info(Opcodes.USHR_LONG, "ushr-long",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info ADD_FLOAT =
        new Info(Opcodes.ADD_FLOAT, "add-float",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info SUB_FLOAT =
        new Info(Opcodes.SUB_FLOAT, "sub-float",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info MUL_FLOAT =
        new Info(Opcodes.MUL_FLOAT, "mul-float",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info DIV_FLOAT =
        new Info(Opcodes.DIV_FLOAT, "div-float",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info REM_FLOAT =
        new Info(Opcodes.REM_FLOAT, "rem-float",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info ADD_DOUBLE =
        new Info(Opcodes.ADD_DOUBLE, "add-double",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info SUB_DOUBLE =
        new Info(Opcodes.SUB_DOUBLE, "sub-double",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info MUL_DOUBLE =
        new Info(Opcodes.MUL_DOUBLE, "mul-double",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info DIV_DOUBLE =
        new Info(Opcodes.DIV_DOUBLE, "div-double",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info REM_DOUBLE =
        new Info(Opcodes.REM_DOUBLE, "rem-double",
            InstructionCodec.FORMAT_23X, IndexType.NONE);

    public static final Info ADD_INT_2ADDR =
        new Info(Opcodes.ADD_INT_2ADDR, "add-int/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info SUB_INT_2ADDR =
        new Info(Opcodes.SUB_INT_2ADDR, "sub-int/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info MUL_INT_2ADDR =
        new Info(Opcodes.MUL_INT_2ADDR, "mul-int/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info DIV_INT_2ADDR =
        new Info(Opcodes.DIV_INT_2ADDR, "div-int/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info REM_INT_2ADDR =
        new Info(Opcodes.REM_INT_2ADDR, "rem-int/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info AND_INT_2ADDR =
        new Info(Opcodes.AND_INT_2ADDR, "and-int/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info OR_INT_2ADDR =
        new Info(Opcodes.OR_INT_2ADDR, "or-int/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info XOR_INT_2ADDR =
        new Info(Opcodes.XOR_INT_2ADDR, "xor-int/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info SHL_INT_2ADDR =
        new Info(Opcodes.SHL_INT_2ADDR, "shl-int/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info SHR_INT_2ADDR =
        new Info(Opcodes.SHR_INT_2ADDR, "shr-int/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info USHR_INT_2ADDR =
        new Info(Opcodes.USHR_INT_2ADDR, "ushr-int/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info ADD_LONG_2ADDR =
        new Info(Opcodes.ADD_LONG_2ADDR, "add-long/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info SUB_LONG_2ADDR =
        new Info(Opcodes.SUB_LONG_2ADDR, "sub-long/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info MUL_LONG_2ADDR =
        new Info(Opcodes.MUL_LONG_2ADDR, "mul-long/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info DIV_LONG_2ADDR =
        new Info(Opcodes.DIV_LONG_2ADDR, "div-long/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info REM_LONG_2ADDR =
        new Info(Opcodes.REM_LONG_2ADDR, "rem-long/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info AND_LONG_2ADDR =
        new Info(Opcodes.AND_LONG_2ADDR, "and-long/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info OR_LONG_2ADDR =
        new Info(Opcodes.OR_LONG_2ADDR, "or-long/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info XOR_LONG_2ADDR =
        new Info(Opcodes.XOR_LONG_2ADDR, "xor-long/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info SHL_LONG_2ADDR =
        new Info(Opcodes.SHL_LONG_2ADDR, "shl-long/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info SHR_LONG_2ADDR =
        new Info(Opcodes.SHR_LONG_2ADDR, "shr-long/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info USHR_LONG_2ADDR =
        new Info(Opcodes.USHR_LONG_2ADDR, "ushr-long/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info ADD_FLOAT_2ADDR =
        new Info(Opcodes.ADD_FLOAT_2ADDR, "add-float/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info SUB_FLOAT_2ADDR =
        new Info(Opcodes.SUB_FLOAT_2ADDR, "sub-float/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info MUL_FLOAT_2ADDR =
        new Info(Opcodes.MUL_FLOAT_2ADDR, "mul-float/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info DIV_FLOAT_2ADDR =
        new Info(Opcodes.DIV_FLOAT_2ADDR, "div-float/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info REM_FLOAT_2ADDR =
        new Info(Opcodes.REM_FLOAT_2ADDR, "rem-float/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info ADD_DOUBLE_2ADDR =
        new Info(Opcodes.ADD_DOUBLE_2ADDR, "add-double/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info SUB_DOUBLE_2ADDR =
        new Info(Opcodes.SUB_DOUBLE_2ADDR, "sub-double/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info MUL_DOUBLE_2ADDR =
        new Info(Opcodes.MUL_DOUBLE_2ADDR, "mul-double/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info DIV_DOUBLE_2ADDR =
        new Info(Opcodes.DIV_DOUBLE_2ADDR, "div-double/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info REM_DOUBLE_2ADDR =
        new Info(Opcodes.REM_DOUBLE_2ADDR, "rem-double/2addr",
            InstructionCodec.FORMAT_12X, IndexType.NONE);

    public static final Info ADD_INT_LIT16 =
        new Info(Opcodes.ADD_INT_LIT16, "add-int/lit16",
            InstructionCodec.FORMAT_22S, IndexType.NONE);

    public static final Info RSUB_INT =
        new Info(Opcodes.RSUB_INT, "rsub-int",
            InstructionCodec.FORMAT_22S, IndexType.NONE);

    public static final Info MUL_INT_LIT16 =
        new Info(Opcodes.MUL_INT_LIT16, "mul-int/lit16",
            InstructionCodec.FORMAT_22S, IndexType.NONE);

    public static final Info DIV_INT_LIT16 =
        new Info(Opcodes.DIV_INT_LIT16, "div-int/lit16",
            InstructionCodec.FORMAT_22S, IndexType.NONE);

    public static final Info REM_INT_LIT16 =
        new Info(Opcodes.REM_INT_LIT16, "rem-int/lit16",
            InstructionCodec.FORMAT_22S, IndexType.NONE);

    public static final Info AND_INT_LIT16 =
        new Info(Opcodes.AND_INT_LIT16, "and-int/lit16",
            InstructionCodec.FORMAT_22S, IndexType.NONE);

    public static final Info OR_INT_LIT16 =
        new Info(Opcodes.OR_INT_LIT16, "or-int/lit16",
            InstructionCodec.FORMAT_22S, IndexType.NONE);

    public static final Info XOR_INT_LIT16 =
        new Info(Opcodes.XOR_INT_LIT16, "xor-int/lit16",
            InstructionCodec.FORMAT_22S, IndexType.NONE);

    public static final Info ADD_INT_LIT8 =
        new Info(Opcodes.ADD_INT_LIT8, "add-int/lit8",
            InstructionCodec.FORMAT_22B, IndexType.NONE);

    public static final Info RSUB_INT_LIT8 =
        new Info(Opcodes.RSUB_INT_LIT8, "rsub-int/lit8",
            InstructionCodec.FORMAT_22B, IndexType.NONE);

    public static final Info MUL_INT_LIT8 =
        new Info(Opcodes.MUL_INT_LIT8, "mul-int/lit8",
            InstructionCodec.FORMAT_22B, IndexType.NONE);

    public static final Info DIV_INT_LIT8 =
        new Info(Opcodes.DIV_INT_LIT8, "div-int/lit8",
            InstructionCodec.FORMAT_22B, IndexType.NONE);

    public static final Info REM_INT_LIT8 =
        new Info(Opcodes.REM_INT_LIT8, "rem-int/lit8",
            InstructionCodec.FORMAT_22B, IndexType.NONE);

    public static final Info AND_INT_LIT8 =
        new Info(Opcodes.AND_INT_LIT8, "and-int/lit8",
            InstructionCodec.FORMAT_22B, IndexType.NONE);

    public static final Info OR_INT_LIT8 =
        new Info(Opcodes.OR_INT_LIT8, "or-int/lit8",
            InstructionCodec.FORMAT_22B, IndexType.NONE);

    public static final Info XOR_INT_LIT8 =
        new Info(Opcodes.XOR_INT_LIT8, "xor-int/lit8",
            InstructionCodec.FORMAT_22B, IndexType.NONE);

    public static final Info SHL_INT_LIT8 =
        new Info(Opcodes.SHL_INT_LIT8, "shl-int/lit8",
            InstructionCodec.FORMAT_22B, IndexType.NONE);

    public static final Info SHR_INT_LIT8 =
        new Info(Opcodes.SHR_INT_LIT8, "shr-int/lit8",
            InstructionCodec.FORMAT_22B, IndexType.NONE);

    public static final Info USHR_INT_LIT8 =
        new Info(Opcodes.USHR_INT_LIT8, "ushr-int/lit8",
            InstructionCodec.FORMAT_22B, IndexType.NONE);

    public static final Info CONST_CLASS_JUMBO =
        new Info(Opcodes.CONST_CLASS_JUMBO, "const-class/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.TYPE_REF);

    public static final Info CHECK_CAST_JUMBO =
        new Info(Opcodes.CHECK_CAST_JUMBO, "check-cast/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.TYPE_REF);

    public static final Info INSTANCE_OF_JUMBO =
        new Info(Opcodes.INSTANCE_OF_JUMBO, "instance-of/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.TYPE_REF);

    public static final Info NEW_INSTANCE_JUMBO =
        new Info(Opcodes.NEW_INSTANCE_JUMBO, "new-instance/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.TYPE_REF);

    public static final Info NEW_ARRAY_JUMBO =
        new Info(Opcodes.NEW_ARRAY_JUMBO, "new-array/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.TYPE_REF);

    public static final Info FILLED_NEW_ARRAY_JUMBO =
        new Info(Opcodes.FILLED_NEW_ARRAY_JUMBO, "filled-new-array/jumbo",
            InstructionCodec.FORMAT_5RC, IndexType.TYPE_REF);

    public static final Info IGET_JUMBO =
        new Info(Opcodes.IGET_JUMBO, "iget/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IGET_WIDE_JUMBO =
        new Info(Opcodes.IGET_WIDE_JUMBO, "iget-wide/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IGET_OBJECT_JUMBO =
        new Info(Opcodes.IGET_OBJECT_JUMBO, "iget-object/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IGET_BOOLEAN_JUMBO =
        new Info(Opcodes.IGET_BOOLEAN_JUMBO, "iget-boolean/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IGET_BYTE_JUMBO =
        new Info(Opcodes.IGET_BYTE_JUMBO, "iget-byte/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IGET_CHAR_JUMBO =
        new Info(Opcodes.IGET_CHAR_JUMBO, "iget-char/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IGET_SHORT_JUMBO =
        new Info(Opcodes.IGET_SHORT_JUMBO, "iget-short/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IPUT_JUMBO =
        new Info(Opcodes.IPUT_JUMBO, "iput/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IPUT_WIDE_JUMBO =
        new Info(Opcodes.IPUT_WIDE_JUMBO, "iput-wide/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IPUT_OBJECT_JUMBO =
        new Info(Opcodes.IPUT_OBJECT_JUMBO, "iput-object/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IPUT_BOOLEAN_JUMBO =
        new Info(Opcodes.IPUT_BOOLEAN_JUMBO, "iput-boolean/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IPUT_BYTE_JUMBO =
        new Info(Opcodes.IPUT_BYTE_JUMBO, "iput-byte/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IPUT_CHAR_JUMBO =
        new Info(Opcodes.IPUT_CHAR_JUMBO, "iput-char/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info IPUT_SHORT_JUMBO =
        new Info(Opcodes.IPUT_SHORT_JUMBO, "iput-short/jumbo",
            InstructionCodec.FORMAT_52C, IndexType.FIELD_REF);

    public static final Info SGET_JUMBO =
        new Info(Opcodes.SGET_JUMBO, "sget/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SGET_WIDE_JUMBO =
        new Info(Opcodes.SGET_WIDE_JUMBO, "sget-wide/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SGET_OBJECT_JUMBO =
        new Info(Opcodes.SGET_OBJECT_JUMBO, "sget-object/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SGET_BOOLEAN_JUMBO =
        new Info(Opcodes.SGET_BOOLEAN_JUMBO, "sget-boolean/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SGET_BYTE_JUMBO =
        new Info(Opcodes.SGET_BYTE_JUMBO, "sget-byte/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SGET_CHAR_JUMBO =
        new Info(Opcodes.SGET_CHAR_JUMBO, "sget-char/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SGET_SHORT_JUMBO =
        new Info(Opcodes.SGET_SHORT_JUMBO, "sget-short/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SPUT_JUMBO =
        new Info(Opcodes.SPUT_JUMBO, "sput/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SPUT_WIDE_JUMBO =
        new Info(Opcodes.SPUT_WIDE_JUMBO, "sput-wide/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SPUT_OBJECT_JUMBO =
        new Info(Opcodes.SPUT_OBJECT_JUMBO, "sput-object/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SPUT_BOOLEAN_JUMBO =
        new Info(Opcodes.SPUT_BOOLEAN_JUMBO, "sput-boolean/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SPUT_BYTE_JUMBO =
        new Info(Opcodes.SPUT_BYTE_JUMBO, "sput-byte/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SPUT_CHAR_JUMBO =
        new Info(Opcodes.SPUT_CHAR_JUMBO, "sput-char/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info SPUT_SHORT_JUMBO =
        new Info(Opcodes.SPUT_SHORT_JUMBO, "sput-short/jumbo",
            InstructionCodec.FORMAT_41C, IndexType.FIELD_REF);

    public static final Info INVOKE_VIRTUAL_JUMBO =
        new Info(Opcodes.INVOKE_VIRTUAL_JUMBO, "invoke-virtual/jumbo",
            InstructionCodec.FORMAT_5RC, IndexType.METHOD_REF);

    public static final Info INVOKE_SUPER_JUMBO =
        new Info(Opcodes.INVOKE_SUPER_JUMBO, "invoke-super/jumbo",
            InstructionCodec.FORMAT_5RC, IndexType.METHOD_REF);

    public static final Info INVOKE_DIRECT_JUMBO =
        new Info(Opcodes.INVOKE_DIRECT_JUMBO, "invoke-direct/jumbo",
            InstructionCodec.FORMAT_5RC, IndexType.METHOD_REF);

    public static final Info INVOKE_STATIC_JUMBO =
        new Info(Opcodes.INVOKE_STATIC_JUMBO, "invoke-static/jumbo",
            InstructionCodec.FORMAT_5RC, IndexType.METHOD_REF);

    public static final Info INVOKE_INTERFACE_JUMBO =
        new Info(Opcodes.INVOKE_INTERFACE_JUMBO, "invoke-interface/jumbo",
            InstructionCodec.FORMAT_5RC, IndexType.METHOD_REF);

    // END(opcode-info-defs)

    // Static initialization.
    static {
        INFO = new Info[Opcodes.MAX_VALUE - Opcodes.MIN_VALUE + 1];

        // TODO: Stop using this constant.
        set(SPECIAL_FORMAT);

        // TODO: These payload opcodes should be generated by opcode-gen.
        set(PACKED_SWITCH_PAYLOAD);
        set(SPARSE_SWITCH_PAYLOAD);
        set(FILL_ARRAY_DATA_PAYLOAD);

        // BEGIN(opcode-info-init); GENERATED AUTOMATICALLY BY opcode-gen
        set(NOP);
        set(MOVE);
        set(MOVE_FROM16);
        set(MOVE_16);
        set(MOVE_WIDE);
        set(MOVE_WIDE_FROM16);
        set(MOVE_WIDE_16);
        set(MOVE_OBJECT);
        set(MOVE_OBJECT_FROM16);
        set(MOVE_OBJECT_16);
        set(MOVE_RESULT);
        set(MOVE_RESULT_WIDE);
        set(MOVE_RESULT_OBJECT);
        set(MOVE_EXCEPTION);
        set(RETURN_VOID);
        set(RETURN);
        set(RETURN_WIDE);
        set(RETURN_OBJECT);
        set(CONST_4);
        set(CONST_16);
        set(CONST);
        set(CONST_HIGH16);
        set(CONST_WIDE_16);
        set(CONST_WIDE_32);
        set(CONST_WIDE);
        set(CONST_WIDE_HIGH16);
        set(CONST_STRING);
        set(CONST_STRING_JUMBO);
        set(CONST_CLASS);
        set(MONITOR_ENTER);
        set(MONITOR_EXIT);
        set(CHECK_CAST);
        set(INSTANCE_OF);
        set(ARRAY_LENGTH);
        set(NEW_INSTANCE);
        set(NEW_ARRAY);
        set(FILLED_NEW_ARRAY);
        set(FILLED_NEW_ARRAY_RANGE);
        set(FILL_ARRAY_DATA);
        set(THROW);
        set(GOTO);
        set(GOTO_16);
        set(GOTO_32);
        set(PACKED_SWITCH);
        set(SPARSE_SWITCH);
        set(CMPL_FLOAT);
        set(CMPG_FLOAT);
        set(CMPL_DOUBLE);
        set(CMPG_DOUBLE);
        set(CMP_LONG);
        set(IF_EQ);
        set(IF_NE);
        set(IF_LT);
        set(IF_GE);
        set(IF_GT);
        set(IF_LE);
        set(IF_EQZ);
        set(IF_NEZ);
        set(IF_LTZ);
        set(IF_GEZ);
        set(IF_GTZ);
        set(IF_LEZ);
        set(AGET);
        set(AGET_WIDE);
        set(AGET_OBJECT);
        set(AGET_BOOLEAN);
        set(AGET_BYTE);
        set(AGET_CHAR);
        set(AGET_SHORT);
        set(APUT);
        set(APUT_WIDE);
        set(APUT_OBJECT);
        set(APUT_BOOLEAN);
        set(APUT_BYTE);
        set(APUT_CHAR);
        set(APUT_SHORT);
        set(IGET);
        set(IGET_WIDE);
        set(IGET_OBJECT);
        set(IGET_BOOLEAN);
        set(IGET_BYTE);
        set(IGET_CHAR);
        set(IGET_SHORT);
        set(IPUT);
        set(IPUT_WIDE);
        set(IPUT_OBJECT);
        set(IPUT_BOOLEAN);
        set(IPUT_BYTE);
        set(IPUT_CHAR);
        set(IPUT_SHORT);
        set(SGET);
        set(SGET_WIDE);
        set(SGET_OBJECT);
        set(SGET_BOOLEAN);
        set(SGET_BYTE);
        set(SGET_CHAR);
        set(SGET_SHORT);
        set(SPUT);
        set(SPUT_WIDE);
        set(SPUT_OBJECT);
        set(SPUT_BOOLEAN);
        set(SPUT_BYTE);
        set(SPUT_CHAR);
        set(SPUT_SHORT);
        set(INVOKE_VIRTUAL);
        set(INVOKE_SUPER);
        set(INVOKE_DIRECT);
        set(INVOKE_STATIC);
        set(INVOKE_INTERFACE);
        set(INVOKE_VIRTUAL_RANGE);
        set(INVOKE_SUPER_RANGE);
        set(INVOKE_DIRECT_RANGE);
        set(INVOKE_STATIC_RANGE);
        set(INVOKE_INTERFACE_RANGE);
        set(NEG_INT);
        set(NOT_INT);
        set(NEG_LONG);
        set(NOT_LONG);
        set(NEG_FLOAT);
        set(NEG_DOUBLE);
        set(INT_TO_LONG);
        set(INT_TO_FLOAT);
        set(INT_TO_DOUBLE);
        set(LONG_TO_INT);
        set(LONG_TO_FLOAT);
        set(LONG_TO_DOUBLE);
        set(FLOAT_TO_INT);
        set(FLOAT_TO_LONG);
        set(FLOAT_TO_DOUBLE);
        set(DOUBLE_TO_INT);
        set(DOUBLE_TO_LONG);
        set(DOUBLE_TO_FLOAT);
        set(INT_TO_BYTE);
        set(INT_TO_CHAR);
        set(INT_TO_SHORT);
        set(ADD_INT);
        set(SUB_INT);
        set(MUL_INT);
        set(DIV_INT);
        set(REM_INT);
        set(AND_INT);
        set(OR_INT);
        set(XOR_INT);
        set(SHL_INT);
        set(SHR_INT);
        set(USHR_INT);
        set(ADD_LONG);
        set(SUB_LONG);
        set(MUL_LONG);
        set(DIV_LONG);
        set(REM_LONG);
        set(AND_LONG);
        set(OR_LONG);
        set(XOR_LONG);
        set(SHL_LONG);
        set(SHR_LONG);
        set(USHR_LONG);
        set(ADD_FLOAT);
        set(SUB_FLOAT);
        set(MUL_FLOAT);
        set(DIV_FLOAT);
        set(REM_FLOAT);
        set(ADD_DOUBLE);
        set(SUB_DOUBLE);
        set(MUL_DOUBLE);
        set(DIV_DOUBLE);
        set(REM_DOUBLE);
        set(ADD_INT_2ADDR);
        set(SUB_INT_2ADDR);
        set(MUL_INT_2ADDR);
        set(DIV_INT_2ADDR);
        set(REM_INT_2ADDR);
        set(AND_INT_2ADDR);
        set(OR_INT_2ADDR);
        set(XOR_INT_2ADDR);
        set(SHL_INT_2ADDR);
        set(SHR_INT_2ADDR);
        set(USHR_INT_2ADDR);
        set(ADD_LONG_2ADDR);
        set(SUB_LONG_2ADDR);
        set(MUL_LONG_2ADDR);
        set(DIV_LONG_2ADDR);
        set(REM_LONG_2ADDR);
        set(AND_LONG_2ADDR);
        set(OR_LONG_2ADDR);
        set(XOR_LONG_2ADDR);
        set(SHL_LONG_2ADDR);
        set(SHR_LONG_2ADDR);
        set(USHR_LONG_2ADDR);
        set(ADD_FLOAT_2ADDR);
        set(SUB_FLOAT_2ADDR);
        set(MUL_FLOAT_2ADDR);
        set(DIV_FLOAT_2ADDR);
        set(REM_FLOAT_2ADDR);
        set(ADD_DOUBLE_2ADDR);
        set(SUB_DOUBLE_2ADDR);
        set(MUL_DOUBLE_2ADDR);
        set(DIV_DOUBLE_2ADDR);
        set(REM_DOUBLE_2ADDR);
        set(ADD_INT_LIT16);
        set(RSUB_INT);
        set(MUL_INT_LIT16);
        set(DIV_INT_LIT16);
        set(REM_INT_LIT16);
        set(AND_INT_LIT16);
        set(OR_INT_LIT16);
        set(XOR_INT_LIT16);
        set(ADD_INT_LIT8);
        set(RSUB_INT_LIT8);
        set(MUL_INT_LIT8);
        set(DIV_INT_LIT8);
        set(REM_INT_LIT8);
        set(AND_INT_LIT8);
        set(OR_INT_LIT8);
        set(XOR_INT_LIT8);
        set(SHL_INT_LIT8);
        set(SHR_INT_LIT8);
        set(USHR_INT_LIT8);
        set(CONST_CLASS_JUMBO);
        set(CHECK_CAST_JUMBO);
        set(INSTANCE_OF_JUMBO);
        set(NEW_INSTANCE_JUMBO);
        set(NEW_ARRAY_JUMBO);
        set(FILLED_NEW_ARRAY_JUMBO);
        set(IGET_JUMBO);
        set(IGET_WIDE_JUMBO);
        set(IGET_OBJECT_JUMBO);
        set(IGET_BOOLEAN_JUMBO);
        set(IGET_BYTE_JUMBO);
        set(IGET_CHAR_JUMBO);
        set(IGET_SHORT_JUMBO);
        set(IPUT_JUMBO);
        set(IPUT_WIDE_JUMBO);
        set(IPUT_OBJECT_JUMBO);
        set(IPUT_BOOLEAN_JUMBO);
        set(IPUT_BYTE_JUMBO);
        set(IPUT_CHAR_JUMBO);
        set(IPUT_SHORT_JUMBO);
        set(SGET_JUMBO);
        set(SGET_WIDE_JUMBO);
        set(SGET_OBJECT_JUMBO);
        set(SGET_BOOLEAN_JUMBO);
        set(SGET_BYTE_JUMBO);
        set(SGET_CHAR_JUMBO);
        set(SGET_SHORT_JUMBO);
        set(SPUT_JUMBO);
        set(SPUT_WIDE_JUMBO);
        set(SPUT_OBJECT_JUMBO);
        set(SPUT_BOOLEAN_JUMBO);
        set(SPUT_BYTE_JUMBO);
        set(SPUT_CHAR_JUMBO);
        set(SPUT_SHORT_JUMBO);
        set(INVOKE_VIRTUAL_JUMBO);
        set(INVOKE_SUPER_JUMBO);
        set(INVOKE_DIRECT_JUMBO);
        set(INVOKE_STATIC_JUMBO);
        set(INVOKE_INTERFACE_JUMBO);
        // END(opcode-info-init)
    }

    /**
     * This class is uninstantiable.
     */
    private OpcodeInfo() {
        // This space intentionally left blank.
    }

    /**
     * Gets the {@link @Info} for the given opcode value.
     *
     * @param opcode {@code Opcodes.MIN_VALUE..Opcodes.MAX_VALUE;} the
     * opcode value
     * @return non-null; the associated opcode information instance
     */
    public static Info get(int opcode) {
        int idx = opcode - Opcodes.MIN_VALUE;

        try {
            Info result = INFO[idx];
            if (result != null) {
                return result;
            }
        } catch (ArrayIndexOutOfBoundsException ex) {
            // Fall through.
        }

        throw new IllegalArgumentException("bogus opcode: "
                + Hex.u2or4(opcode));
    }

    /**
     * Gets the name of the given opcode.
     */
    public static String getName(int opcode) {
        return get(opcode).getName();
    }

    /**
     * Gets the format (an {@link InstructionCodec}) for the given opcode
     * value.
     */
    public static InstructionCodec getFormat(int opcode) {
        return get(opcode).getFormat();
    }

    /**
     * Gets the {@link IndexType} for the given opcode value.
     */
    public static IndexType getIndexType(int opcode) {
        return get(opcode).getIndexType();
    }

    /**
     * Puts the given opcode into the table of all ops.
     *
     * @param opcode non-null; the opcode
     */
    private static void set(Info opcode) {
        int idx = opcode.getOpcode() - Opcodes.MIN_VALUE;
        INFO[idx] = opcode;
    }

    /**
     * Information about an opcode.
     */
    public static class Info {
        private final int opcode;
        private final String name;
        private final InstructionCodec format;
        private final IndexType indexType;

        public Info(int opcode, String name, InstructionCodec format,
                IndexType indexType) {
            this.opcode = opcode;
            this.name = name;
            this.format = format;
            this.indexType = indexType;
        }

        public int getOpcode() {
            return opcode;
        }

        public String getName() {
            return name;
        }

        public InstructionCodec getFormat() {
            return format;
        }

        public IndexType getIndexType() {
            return indexType;
        }
    }
}
