blob: a6f053a2917b4066c569a0329ebcddbbb3c1bdd8 [file] [log] [blame]
/*
* Copyright (C) 2007 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 dalvik.bytecode;
/**
* This is a list of Dalvik opcodes.
*
* (This was converted from //device/dalvik/libdex/OpCode.h)
*/
public interface Opcodes {
int OP_NOP = 0x00;
int OP_MOVE = 0x01;
int OP_MOVE_FROM16 = 0x02;
int OP_MOVE_16 = 0x03;
int OP_MOVE_WIDE = 0x04;
int OP_MOVE_WIDE_FROM16 = 0x05;
int OP_MOVE_WIDE_16 = 0x06;
int OP_MOVE_OBJECT = 0x07;
int OP_MOVE_OBJECT_FROM16 = 0x08;
int OP_MOVE_OBJECT_16 = 0x09;
int OP_MOVE_RESULT = 0x0a;
int OP_MOVE_RESULT_WIDE = 0x0b;
int OP_MOVE_RESULT_OBJECT = 0x0c;
int OP_MOVE_EXCEPTION = 0x0d;
int OP_RETURN_VOID = 0x0e;
int OP_RETURN = 0x0f;
int OP_RETURN_WIDE = 0x10;
int OP_RETURN_OBJECT = 0x11;
int OP_CONST_4 = 0x12;
int OP_CONST_16 = 0x13;
int OP_CONST = 0x14;
int OP_CONST_HIGH16 = 0x15;
int OP_CONST_WIDE_16 = 0x16;
int OP_CONST_WIDE_32 = 0x17;
int OP_CONST_WIDE = 0x18;
int OP_CONST_WIDE_HIGH16 = 0x19;
int OP_CONST_STRING = 0x1a;
int OP_CONST_STRING_JUMBO = 0x1b;
int OP_CONST_CLASS = 0x1c;
int OP_MONITOR_ENTER = 0x1d;
int OP_MONITOR_EXIT = 0x1e;
int OP_CHECK_CAST = 0x1f;
int OP_INSTANCE_OF = 0x20;
int OP_ARRAY_LENGTH = 0x21;
int OP_NEW_INSTANCE = 0x22;
int OP_NEW_ARRAY = 0x23;
int OP_FILLED_NEW_ARRAY = 0x24;
int OP_FILLED_NEW_ARRAY_RANGE = 0x25;
int OP_FILL_ARRAY_DATA = 0x26;
int OP_THROW = 0x27;
int OP_GOTO = 0x28;
int OP_GOTO_16 = 0x29;
int OP_GOTO_32 = 0x2a;
int OP_PACKED_SWITCH = 0x2b;
int OP_SPARSE_SWITCH = 0x2c;
int OP_CMPL_FLOAT = 0x2d;
int OP_CMPG_FLOAT = 0x2e;
int OP_CMPL_DOUBLE = 0x2f;
int OP_CMPG_DOUBLE = 0x30;
int OP_CMP_LONG = 0x31;
int OP_IF_EQ = 0x32;
int OP_IF_NE = 0x33;
int OP_IF_LT = 0x34;
int OP_IF_GE = 0x35;
int OP_IF_GT = 0x36;
int OP_IF_LE = 0x37;
int OP_IF_EQZ = 0x38;
int OP_IF_NEZ = 0x39;
int OP_IF_LTZ = 0x3a;
int OP_IF_GEZ = 0x3b;
int OP_IF_GTZ = 0x3c;
int OP_IF_LEZ = 0x3d;
/* 3e-43 unused */
int OP_AGET = 0x44;
int OP_AGET_WIDE = 0x45;
int OP_AGET_OBJECT = 0x46;
int OP_AGET_BOOLEAN = 0x47;
int OP_AGET_BYTE = 0x48;
int OP_AGET_CHAR = 0x49;
int OP_AGET_SHORT = 0x4a;
int OP_APUT = 0x4b;
int OP_APUT_WIDE = 0x4c;
int OP_APUT_OBJECT = 0x4d;
int OP_APUT_BOOLEAN = 0x4e;
int OP_APUT_BYTE = 0x4f;
int OP_APUT_CHAR = 0x50;
int OP_APUT_SHORT = 0x51;
int OP_IGET = 0x52;
int OP_IGET_WIDE = 0x53;
int OP_IGET_OBJECT = 0x54;
int OP_IGET_BOOLEAN = 0x55;
int OP_IGET_BYTE = 0x56;
int OP_IGET_CHAR = 0x57;
int OP_IGET_SHORT = 0x58;
int OP_IPUT = 0x59;
int OP_IPUT_WIDE = 0x5a;
int OP_IPUT_OBJECT = 0x5b;
int OP_IPUT_BOOLEAN = 0x5c;
int OP_IPUT_BYTE = 0x5d;
int OP_IPUT_CHAR = 0x5e;
int OP_IPUT_SHORT = 0x5f;
int OP_SGET = 0x60;
int OP_SGET_WIDE = 0x61;
int OP_SGET_OBJECT = 0x62;
int OP_SGET_BOOLEAN = 0x63;
int OP_SGET_BYTE = 0x64;
int OP_SGET_CHAR = 0x65;
int OP_SGET_SHORT = 0x66;
int OP_SPUT = 0x67;
int OP_SPUT_WIDE = 0x68;
int OP_SPUT_OBJECT = 0x69;
int OP_SPUT_BOOLEAN = 0x6a;
int OP_SPUT_BYTE = 0x6b;
int OP_SPUT_CHAR = 0x6c;
int OP_SPUT_SHORT = 0x6d;
int OP_INVOKE_VIRTUAL = 0x6e;
int OP_INVOKE_SUPER = 0x6f;
int OP_INVOKE_DIRECT = 0x70;
int OP_INVOKE_STATIC = 0x71;
int OP_INVOKE_INTERFACE = 0x72;
/* 73 unused */
int OP_INVOKE_VIRTUAL_RANGE = 0x74;
int OP_INVOKE_SUPER_RANGE = 0x75;
int OP_INVOKE_DIRECT_RANGE = 0x76;
int OP_INVOKE_STATIC_RANGE = 0x77;
int OP_INVOKE_INTERFACE_RANGE = 0x78;
/* 79-7a unused */
int OP_NEG_INT = 0x7b;
int OP_NOT_INT = 0x7c;
int OP_NEG_LONG = 0x7d;
int OP_NOT_LONG = 0x7e;
int OP_NEG_FLOAT = 0x7f;
int OP_NEG_DOUBLE = 0x80;
int OP_INT_TO_LONG = 0x81;
int OP_INT_TO_FLOAT = 0x82;
int OP_INT_TO_DOUBLE = 0x83;
int OP_LONG_TO_INT = 0x84;
int OP_LONG_TO_FLOAT = 0x85;
int OP_LONG_TO_DOUBLE = 0x86;
int OP_FLOAT_TO_INT = 0x87;
int OP_FLOAT_TO_LONG = 0x88;
int OP_FLOAT_TO_DOUBLE = 0x89;
int OP_DOUBLE_TO_INT = 0x8a;
int OP_DOUBLE_TO_LONG = 0x8b;
int OP_DOUBLE_TO_FLOAT = 0x8c;
int OP_INT_TO_BYTE = 0x8d;
int OP_INT_TO_CHAR = 0x8e;
int OP_INT_TO_SHORT = 0x8f;
int OP_ADD_INT = 0x90;
int OP_SUB_INT = 0x91;
int OP_MUL_INT = 0x92;
int OP_DIV_INT = 0x93;
int OP_REM_INT = 0x94;
int OP_AND_INT = 0x95;
int OP_OR_INT = 0x96;
int OP_XOR_INT = 0x97;
int OP_SHL_INT = 0x98;
int OP_SHR_INT = 0x99;
int OP_USHR_INT = 0x9a;
int OP_ADD_LONG = 0x9b;
int OP_SUB_LONG = 0x9c;
int OP_MUL_LONG = 0x9d;
int OP_DIV_LONG = 0x9e;
int OP_REM_LONG = 0x9f;
int OP_AND_LONG = 0xa0;
int OP_OR_LONG = 0xa1;
int OP_XOR_LONG = 0xa2;
int OP_SHL_LONG = 0xa3;
int OP_SHR_LONG = 0xa4;
int OP_USHR_LONG = 0xa5;
int OP_ADD_FLOAT = 0xa6;
int OP_SUB_FLOAT = 0xa7;
int OP_MUL_FLOAT = 0xa8;
int OP_DIV_FLOAT = 0xa9;
int OP_REM_FLOAT = 0xaa;
int OP_ADD_DOUBLE = 0xab;
int OP_SUB_DOUBLE = 0xac;
int OP_MUL_DOUBLE = 0xad;
int OP_DIV_DOUBLE = 0xae;
int OP_REM_DOUBLE = 0xaf;
int OP_ADD_INT_2ADDR = 0xb0;
int OP_SUB_INT_2ADDR = 0xb1;
int OP_MUL_INT_2ADDR = 0xb2;
int OP_DIV_INT_2ADDR = 0xb3;
int OP_REM_INT_2ADDR = 0xb4;
int OP_AND_INT_2ADDR = 0xb5;
int OP_OR_INT_2ADDR = 0xb6;
int OP_XOR_INT_2ADDR = 0xb7;
int OP_SHL_INT_2ADDR = 0xb8;
int OP_SHR_INT_2ADDR = 0xb9;
int OP_USHR_INT_2ADDR = 0xba;
int OP_ADD_LONG_2ADDR = 0xbb;
int OP_SUB_LONG_2ADDR = 0xbc;
int OP_MUL_LONG_2ADDR = 0xbd;
int OP_DIV_LONG_2ADDR = 0xbe;
int OP_REM_LONG_2ADDR = 0xbf;
int OP_AND_LONG_2ADDR = 0xc0;
int OP_OR_LONG_2ADDR = 0xc1;
int OP_XOR_LONG_2ADDR = 0xc2;
int OP_SHL_LONG_2ADDR = 0xc3;
int OP_SHR_LONG_2ADDR = 0xc4;
int OP_USHR_LONG_2ADDR = 0xc5;
int OP_ADD_FLOAT_2ADDR = 0xc6;
int OP_SUB_FLOAT_2ADDR = 0xc7;
int OP_MUL_FLOAT_2ADDR = 0xc8;
int OP_DIV_FLOAT_2ADDR = 0xc9;
int OP_REM_FLOAT_2ADDR = 0xca;
int OP_ADD_DOUBLE_2ADDR = 0xcb;
int OP_SUB_DOUBLE_2ADDR = 0xcc;
int OP_MUL_DOUBLE_2ADDR = 0xcd;
int OP_DIV_DOUBLE_2ADDR = 0xce;
int OP_REM_DOUBLE_2ADDR = 0xcf;
int OP_ADD_INT_LIT16 = 0xd0;
int OP_RSUB_INT = 0xd1; /* no _LIT16 suffix for this */
int OP_MUL_INT_LIT16 = 0xd2;
int OP_DIV_INT_LIT16 = 0xd3;
int OP_REM_INT_LIT16 = 0xd4;
int OP_AND_INT_LIT16 = 0xd5;
int OP_OR_INT_LIT16 = 0xd6;
int OP_XOR_INT_LIT16 = 0xd7;
int OP_ADD_INT_LIT8 = 0xd8;
int OP_RSUB_INT_LIT8 = 0xd9;
int OP_MUL_INT_LIT8 = 0xda;
int OP_DIV_INT_LIT8 = 0xdb;
int OP_REM_INT_LIT8 = 0xdc;
int OP_AND_INT_LIT8 = 0xdd;
int OP_OR_INT_LIT8 = 0xde;
int OP_XOR_INT_LIT8 = 0xdf;
int OP_SHL_INT_LIT8 = 0xe0;
int OP_SHR_INT_LIT8 = 0xe1;
int OP_USHR_INT_LIT8 = 0xe2;
/* e3-e7 unused */
/*
* The rest of these are either generated by dexopt for optimized
* code, or inserted by the VM at runtime. They are never generated
* by "dx".
*/
int OP_IGET_WIDE_VOLATILE = 0xe8;
int OP_IPUT_WIDE_VOLATILE = 0xe9;
int OP_SGET_WIDE_VOLATILE = 0xea;
int OP_SPUT_WIDE_VOLATILE = 0xeb;
int OP_BREAKPOINT = 0xec;
int OP_THROW_VERIFICATION_ERROR = 0xed;
int OP_EXECUTE_INLINE = 0xee;
int OP_EXECUTE_INLINE_RANGE = 0xef;
int OP_INVOKE_DIRECT_EMPTY = 0xf0;
/* f1 unused (OP_INVOKE_DIRECT_EMPTY_RANGE?) */
int OP_IGET_QUICK = 0xf2;
int OP_IGET_WIDE_QUICK = 0xf3;
int OP_IGET_OBJECT_QUICK = 0xf4;
int OP_IPUT_QUICK = 0xf5;
int OP_IPUT_WIDE_QUICK = 0xf6;
int OP_IPUT_OBJECT_QUICK = 0xf7;
int OP_INVOKE_VIRTUAL_QUICK = 0xf8;
int OP_INVOKE_VIRTUAL_QUICK_RANGE = 0xf9;
int OP_INVOKE_SUPER_QUICK = 0xfa;
int OP_INVOKE_SUPER_QUICK_RANGE = 0xfb;
/* fc unused (OP_INVOKE_DIRECT_QUICK?) */
/* fd unused (OP_INVOKE_DIRECT_QUICK_RANGE?) */
/* fe unused (OP_INVOKE_INTERFACE_QUICK?) */
/* ff unused (OP_INVOKE_INTERFACE_QUICK_RANGE?) */
}