| /* |
| * 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. |
| */ |
| #include "OpCodeNames.h" |
| |
| /* |
| * The following two lines work, but slashes and dashes both turn into |
| * underscores, and the strings are all upper case. The output is easier |
| * to read if we do the strings by hand (could probably write a |
| * post-processing function easily enough if maintenance becomes annoying). |
| */ |
| //#define H(_op) #_op |
| //DEFINE_GOTO_TABLE(gOpNames) |
| |
| /* |
| * Dalvik opcode names. |
| */ |
| static const char* gOpNames[256] = { |
| /* 0x00 */ |
| "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", |
| |
| /* 0x10 */ |
| "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", |
| |
| /* 0x20 */ |
| "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", |
| |
| /* 0x30 */ |
| "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", |
| "UNUSED", |
| |
| /* 0x40 */ |
| "UNUSED", |
| "UNUSED", |
| "UNUSED", |
| "UNUSED", |
| "aget", |
| "aget-wide", |
| "aget-object", |
| "aget-boolean", |
| "aget-byte", |
| "aget-char", |
| "aget-short", |
| "aput", |
| "aput-wide", |
| "aput-object", |
| "aput-boolean", |
| "aput-byte", |
| |
| /* 0x50 */ |
| "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", |
| |
| /* 0x60 */ |
| "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", |
| |
| /* 0x70 */ |
| "invoke-direct", |
| "invoke-static", |
| "invoke-interface", |
| "UNUSED", |
| "invoke-virtual/range", |
| "invoke-super/range", |
| "invoke-direct/range", |
| "invoke-static/range", |
| "invoke-interface/range", |
| "UNUSED", |
| "UNUSED", |
| "neg-int", |
| "not-int", |
| "neg-long", |
| "not-long", |
| "neg-float", |
| |
| /* 0x80 */ |
| "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", |
| |
| /* 0x90 */ |
| "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", |
| |
| /* 0xa0 */ |
| "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", |
| |
| /* 0xb0 */ |
| "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", |
| |
| /* 0xc0 */ |
| "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", |
| |
| /* 0xd0 */ |
| "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", |
| |
| /* 0xe0 */ |
| "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", // does not appear in DEX files |
| "^throw-verification-error", // does not appear in DEX files |
| "+execute-inline", |
| "+execute-inline/range", |
| |
| /* 0xf0 */ |
| "+invoke-direct-empty", |
| "UNUSED", |
| "+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", |
| "UNUSED", |
| }; |
| |
| /* |
| * Return the name of an opcode. |
| */ |
| const char* getOpcodeName(OpCode op) |
| { |
| return gOpNames[op]; |
| } |