/*
 * Copyright (C) 2008 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.
 */

/*
 * Table of Dalvik opcode names.
 *
 * IMPORTANT NOTE: The contents of this file are mostly generated
 * automatically by the opcode-gen tool. Any edits to the generated
 * sections will get wiped out the next time the tool is run.
 */

#include "DexOpcodes.h"
#include <assert.h>

/*
 * Dalvik opcode names.
 */
static const char* gOpNames[kNumPackedOpcodes] = {
    // BEGIN(libdex-opcode-names); GENERATED AUTOMATICALLY BY opcode-gen
    "nop",
    "move",
    "move/from16",
    "move/16",
    "move-wide",
    "move-wide/from16",
    "move-wide/16",
    "move-object",
    "move-object/from16",
    "move-object/16",
    "move-result",
    "move-result-wide",
    "move-result-object",
    "move-exception",
    "return-void",
    "return",
    "return-wide",
    "return-object",
    "const/4",
    "const/16",
    "const",
    "const/high16",
    "const-wide/16",
    "const-wide/32",
    "const-wide",
    "const-wide/high16",
    "const-string",
    "const-string/jumbo",
    "const-class",
    "monitor-enter",
    "monitor-exit",
    "check-cast",
    "instance-of",
    "array-length",
    "new-instance",
    "new-array",
    "filled-new-array",
    "filled-new-array/range",
    "fill-array-data",
    "throw",
    "goto",
    "goto/16",
    "goto/32",
    "packed-switch",
    "sparse-switch",
    "cmpl-float",
    "cmpg-float",
    "cmpl-double",
    "cmpg-double",
    "cmp-long",
    "if-eq",
    "if-ne",
    "if-lt",
    "if-ge",
    "if-gt",
    "if-le",
    "if-eqz",
    "if-nez",
    "if-ltz",
    "if-gez",
    "if-gtz",
    "if-lez",
    "unused-3e",
    "unused-3f",
    "unused-40",
    "unused-41",
    "unused-42",
    "unused-43",
    "aget",
    "aget-wide",
    "aget-object",
    "aget-boolean",
    "aget-byte",
    "aget-char",
    "aget-short",
    "aput",
    "aput-wide",
    "aput-object",
    "aput-boolean",
    "aput-byte",
    "aput-char",
    "aput-short",
    "iget",
    "iget-wide",
    "iget-object",
    "iget-boolean",
    "iget-byte",
    "iget-char",
    "iget-short",
    "iput",
    "iput-wide",
    "iput-object",
    "iput-boolean",
    "iput-byte",
    "iput-char",
    "iput-short",
    "sget",
    "sget-wide",
    "sget-object",
    "sget-boolean",
    "sget-byte",
    "sget-char",
    "sget-short",
    "sput",
    "sput-wide",
    "sput-object",
    "sput-boolean",
    "sput-byte",
    "sput-char",
    "sput-short",
    "invoke-virtual",
    "invoke-super",
    "invoke-direct",
    "invoke-static",
    "invoke-interface",
    "unused-73",
    "invoke-virtual/range",
    "invoke-super/range",
    "invoke-direct/range",
    "invoke-static/range",
    "invoke-interface/range",
    "unused-79",
    "unused-7a",
    "neg-int",
    "not-int",
    "neg-long",
    "not-long",
    "neg-float",
    "neg-double",
    "int-to-long",
    "int-to-float",
    "int-to-double",
    "long-to-int",
    "long-to-float",
    "long-to-double",
    "float-to-int",
    "float-to-long",
    "float-to-double",
    "double-to-int",
    "double-to-long",
    "double-to-float",
    "int-to-byte",
    "int-to-char",
    "int-to-short",
    "add-int",
    "sub-int",
    "mul-int",
    "div-int",
    "rem-int",
    "and-int",
    "or-int",
    "xor-int",
    "shl-int",
    "shr-int",
    "ushr-int",
    "add-long",
    "sub-long",
    "mul-long",
    "div-long",
    "rem-long",
    "and-long",
    "or-long",
    "xor-long",
    "shl-long",
    "shr-long",
    "ushr-long",
    "add-float",
    "sub-float",
    "mul-float",
    "div-float",
    "rem-float",
    "add-double",
    "sub-double",
    "mul-double",
    "div-double",
    "rem-double",
    "add-int/2addr",
    "sub-int/2addr",
    "mul-int/2addr",
    "div-int/2addr",
    "rem-int/2addr",
    "and-int/2addr",
    "or-int/2addr",
    "xor-int/2addr",
    "shl-int/2addr",
    "shr-int/2addr",
    "ushr-int/2addr",
    "add-long/2addr",
    "sub-long/2addr",
    "mul-long/2addr",
    "div-long/2addr",
    "rem-long/2addr",
    "and-long/2addr",
    "or-long/2addr",
    "xor-long/2addr",
    "shl-long/2addr",
    "shr-long/2addr",
    "ushr-long/2addr",
    "add-float/2addr",
    "sub-float/2addr",
    "mul-float/2addr",
    "div-float/2addr",
    "rem-float/2addr",
    "add-double/2addr",
    "sub-double/2addr",
    "mul-double/2addr",
    "div-double/2addr",
    "rem-double/2addr",
    "add-int/lit16",
    "rsub-int",
    "mul-int/lit16",
    "div-int/lit16",
    "rem-int/lit16",
    "and-int/lit16",
    "or-int/lit16",
    "xor-int/lit16",
    "add-int/lit8",
    "rsub-int/lit8",
    "mul-int/lit8",
    "div-int/lit8",
    "rem-int/lit8",
    "and-int/lit8",
    "or-int/lit8",
    "xor-int/lit8",
    "shl-int/lit8",
    "shr-int/lit8",
    "ushr-int/lit8",
    "+iget-volatile",
    "+iput-volatile",
    "+sget-volatile",
    "+sput-volatile",
    "+iget-object-volatile",
    "+iget-wide-volatile",
    "+iput-wide-volatile",
    "+sget-wide-volatile",
    "+sput-wide-volatile",
    "^breakpoint",
    "^throw-verification-error",
    "+execute-inline",
    "+execute-inline/range",
    "+invoke-object-init/range",
    "+return-void-barrier",
    "+iget-quick",
    "+iget-wide-quick",
    "+iget-object-quick",
    "+iput-quick",
    "+iput-wide-quick",
    "+iput-object-quick",
    "+invoke-virtual-quick",
    "+invoke-virtual-quick/range",
    "+invoke-super-quick",
    "+invoke-super-quick/range",
    "+iput-object-volatile",
    "+sget-object-volatile",
    "+sput-object-volatile",
    "dispatch-ff",
    "const-class/jumbo",
    "check-cast/jumbo",
    "instance-of/jumbo",
    "new-instance/jumbo",
    "new-array/jumbo",
    "filled-new-array/jumbo",
    "iget/jumbo",
    "iget-wide/jumbo",
    "iget-object/jumbo",
    "iget-boolean/jumbo",
    "iget-byte/jumbo",
    "iget-char/jumbo",
    "iget-short/jumbo",
    "iput/jumbo",
    "iput-wide/jumbo",
    "iput-object/jumbo",
    "iput-boolean/jumbo",
    "iput-byte/jumbo",
    "iput-char/jumbo",
    "iput-short/jumbo",
    "sget/jumbo",
    "sget-wide/jumbo",
    "sget-object/jumbo",
    "sget-boolean/jumbo",
    "sget-byte/jumbo",
    "sget-char/jumbo",
    "sget-short/jumbo",
    "sput/jumbo",
    "sput-wide/jumbo",
    "sput-object/jumbo",
    "sput-boolean/jumbo",
    "sput-byte/jumbo",
    "sput-char/jumbo",
    "sput-short/jumbo",
    "invoke-virtual/jumbo",
    "invoke-super/jumbo",
    "invoke-direct/jumbo",
    "invoke-static/jumbo",
    "invoke-interface/jumbo",
    "unused-27ff",
    "unused-28ff",
    "unused-29ff",
    "unused-2aff",
    "unused-2bff",
    "unused-2cff",
    "unused-2dff",
    "unused-2eff",
    "unused-2fff",
    "unused-30ff",
    "unused-31ff",
    "unused-32ff",
    "unused-33ff",
    "unused-34ff",
    "unused-35ff",
    "unused-36ff",
    "unused-37ff",
    "unused-38ff",
    "unused-39ff",
    "unused-3aff",
    "unused-3bff",
    "unused-3cff",
    "unused-3dff",
    "unused-3eff",
    "unused-3fff",
    "unused-40ff",
    "unused-41ff",
    "unused-42ff",
    "unused-43ff",
    "unused-44ff",
    "unused-45ff",
    "unused-46ff",
    "unused-47ff",
    "unused-48ff",
    "unused-49ff",
    "unused-4aff",
    "unused-4bff",
    "unused-4cff",
    "unused-4dff",
    "unused-4eff",
    "unused-4fff",
    "unused-50ff",
    "unused-51ff",
    "unused-52ff",
    "unused-53ff",
    "unused-54ff",
    "unused-55ff",
    "unused-56ff",
    "unused-57ff",
    "unused-58ff",
    "unused-59ff",
    "unused-5aff",
    "unused-5bff",
    "unused-5cff",
    "unused-5dff",
    "unused-5eff",
    "unused-5fff",
    "unused-60ff",
    "unused-61ff",
    "unused-62ff",
    "unused-63ff",
    "unused-64ff",
    "unused-65ff",
    "unused-66ff",
    "unused-67ff",
    "unused-68ff",
    "unused-69ff",
    "unused-6aff",
    "unused-6bff",
    "unused-6cff",
    "unused-6dff",
    "unused-6eff",
    "unused-6fff",
    "unused-70ff",
    "unused-71ff",
    "unused-72ff",
    "unused-73ff",
    "unused-74ff",
    "unused-75ff",
    "unused-76ff",
    "unused-77ff",
    "unused-78ff",
    "unused-79ff",
    "unused-7aff",
    "unused-7bff",
    "unused-7cff",
    "unused-7dff",
    "unused-7eff",
    "unused-7fff",
    "unused-80ff",
    "unused-81ff",
    "unused-82ff",
    "unused-83ff",
    "unused-84ff",
    "unused-85ff",
    "unused-86ff",
    "unused-87ff",
    "unused-88ff",
    "unused-89ff",
    "unused-8aff",
    "unused-8bff",
    "unused-8cff",
    "unused-8dff",
    "unused-8eff",
    "unused-8fff",
    "unused-90ff",
    "unused-91ff",
    "unused-92ff",
    "unused-93ff",
    "unused-94ff",
    "unused-95ff",
    "unused-96ff",
    "unused-97ff",
    "unused-98ff",
    "unused-99ff",
    "unused-9aff",
    "unused-9bff",
    "unused-9cff",
    "unused-9dff",
    "unused-9eff",
    "unused-9fff",
    "unused-a0ff",
    "unused-a1ff",
    "unused-a2ff",
    "unused-a3ff",
    "unused-a4ff",
    "unused-a5ff",
    "unused-a6ff",
    "unused-a7ff",
    "unused-a8ff",
    "unused-a9ff",
    "unused-aaff",
    "unused-abff",
    "unused-acff",
    "unused-adff",
    "unused-aeff",
    "unused-afff",
    "unused-b0ff",
    "unused-b1ff",
    "unused-b2ff",
    "unused-b3ff",
    "unused-b4ff",
    "unused-b5ff",
    "unused-b6ff",
    "unused-b7ff",
    "unused-b8ff",
    "unused-b9ff",
    "unused-baff",
    "unused-bbff",
    "unused-bcff",
    "unused-bdff",
    "unused-beff",
    "unused-bfff",
    "unused-c0ff",
    "unused-c1ff",
    "unused-c2ff",
    "unused-c3ff",
    "unused-c4ff",
    "unused-c5ff",
    "unused-c6ff",
    "unused-c7ff",
    "unused-c8ff",
    "unused-c9ff",
    "unused-caff",
    "unused-cbff",
    "unused-ccff",
    "unused-cdff",
    "unused-ceff",
    "unused-cfff",
    "unused-d0ff",
    "unused-d1ff",
    "unused-d2ff",
    "unused-d3ff",
    "unused-d4ff",
    "unused-d5ff",
    "unused-d6ff",
    "unused-d7ff",
    "unused-d8ff",
    "unused-d9ff",
    "unused-daff",
    "unused-dbff",
    "unused-dcff",
    "unused-ddff",
    "unused-deff",
    "unused-dfff",
    "unused-e0ff",
    "unused-e1ff",
    "unused-e2ff",
    "unused-e3ff",
    "unused-e4ff",
    "unused-e5ff",
    "unused-e6ff",
    "unused-e7ff",
    "unused-e8ff",
    "unused-e9ff",
    "unused-eaff",
    "unused-ebff",
    "unused-ecff",
    "unused-edff",
    "unused-eeff",
    "unused-efff",
    "unused-f0ff",
    "unused-f1ff",
    "+invoke-object-init/jumbo",
    "+iget-volatile/jumbo",
    "+iget-wide-volatile/jumbo",
    "+iget-object-volatile/jumbo",
    "+iput-volatile/jumbo",
    "+iput-wide-volatile/jumbo",
    "+iput-object-volatile/jumbo",
    "+sget-volatile/jumbo",
    "+sget-wide-volatile/jumbo",
    "+sget-object-volatile/jumbo",
    "+sput-volatile/jumbo",
    "+sput-wide-volatile/jumbo",
    "+sput-object-volatile/jumbo",
    "^throw-verification-error/jumbo",
    // END(libdex-opcode-names)
};

/*
 * Return the name of an opcode.
 */
const char* dexGetOpcodeName(Opcode op)
{
    assert(op >= 0 && op < kNumPackedOpcodes);
    return gOpNames[op];
}