1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 177ba91291bb6ce64691398a8751656207e8e3e98dDan Bornsteinpackage com.android.dx.io; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * All the Dalvik opcode value constants. See the related spec 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * document for the meaning and instruction format of each opcode. 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 237ba91291bb6ce64691398a8751656207e8e3e98dDan Bornsteinpublic final class Opcodes { 2432dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein /** 2532dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein * pseudo-opcode used for nonstandard format payload "instructions". TODO: 2632dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein * Retire this concept, and start treating the payload instructions 2732dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein * more like the rest. 2832dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein */ 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SPECIAL_FORMAT = -1; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 317ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein /** 327ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein * pseudo-opcode used to indicate there is no next opcode; used 337ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein * in opcode chaining lists 347ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein */ 35ec85aa98842a86cb68664de8149f8ff495babe79Dan Bornstein public static final int NO_NEXT = -1; 36ec85aa98842a86cb68664de8149f8ff495babe79Dan Bornstein 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** minimum valid opcode value */ 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MIN_VALUE = -1; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** maximum valid opcode value */ 41737fac2604600f92a47156a7f15a1f008996a7dfDan Bornstein public static final int MAX_VALUE = 0xffff; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN(opcodes); GENERATED AUTOMATICALLY BY opcode-gen 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int NOP = 0x00; 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE = 0x01; 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_FROM16 = 0x02; 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_16 = 0x03; 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_WIDE = 0x04; 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_WIDE_FROM16 = 0x05; 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_WIDE_16 = 0x06; 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_OBJECT = 0x07; 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_OBJECT_FROM16 = 0x08; 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_OBJECT_16 = 0x09; 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_RESULT = 0x0a; 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_RESULT_WIDE = 0x0b; 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_RESULT_OBJECT = 0x0c; 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MOVE_EXCEPTION = 0x0d; 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int RETURN_VOID = 0x0e; 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int RETURN = 0x0f; 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int RETURN_WIDE = 0x10; 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int RETURN_OBJECT = 0x11; 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CONST_4 = 0x12; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CONST_16 = 0x13; 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CONST = 0x14; 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CONST_HIGH16 = 0x15; 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CONST_WIDE_16 = 0x16; 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CONST_WIDE_32 = 0x17; 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CONST_WIDE = 0x18; 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CONST_WIDE_HIGH16 = 0x19; 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CONST_STRING = 0x1a; 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CONST_STRING_JUMBO = 0x1b; 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CONST_CLASS = 0x1c; 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MONITOR_ENTER = 0x1d; 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MONITOR_EXIT = 0x1e; 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CHECK_CAST = 0x1f; 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INSTANCE_OF = 0x20; 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ARRAY_LENGTH = 0x21; 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int NEW_INSTANCE = 0x22; 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int NEW_ARRAY = 0x23; 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int FILLED_NEW_ARRAY = 0x24; 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int FILLED_NEW_ARRAY_RANGE = 0x25; 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int FILL_ARRAY_DATA = 0x26; 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int THROW = 0x27; 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int GOTO = 0x28; 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int GOTO_16 = 0x29; 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int GOTO_32 = 0x2a; 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int PACKED_SWITCH = 0x2b; 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SPARSE_SWITCH = 0x2c; 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CMPL_FLOAT = 0x2d; 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CMPG_FLOAT = 0x2e; 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CMPL_DOUBLE = 0x2f; 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CMPG_DOUBLE = 0x30; 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int CMP_LONG = 0x31; 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_EQ = 0x32; 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_NE = 0x33; 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_LT = 0x34; 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_GE = 0x35; 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_GT = 0x36; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_LE = 0x37; 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_EQZ = 0x38; 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_NEZ = 0x39; 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_LTZ = 0x3a; 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_GEZ = 0x3b; 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_GTZ = 0x3c; 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IF_LEZ = 0x3d; 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AGET = 0x44; 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AGET_WIDE = 0x45; 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AGET_OBJECT = 0x46; 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AGET_BOOLEAN = 0x47; 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AGET_BYTE = 0x48; 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AGET_CHAR = 0x49; 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AGET_SHORT = 0x4a; 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int APUT = 0x4b; 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int APUT_WIDE = 0x4c; 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int APUT_OBJECT = 0x4d; 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int APUT_BOOLEAN = 0x4e; 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int APUT_BYTE = 0x4f; 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int APUT_CHAR = 0x50; 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int APUT_SHORT = 0x51; 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IGET = 0x52; 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IGET_WIDE = 0x53; 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IGET_OBJECT = 0x54; 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IGET_BOOLEAN = 0x55; 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IGET_BYTE = 0x56; 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IGET_CHAR = 0x57; 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IGET_SHORT = 0x58; 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IPUT = 0x59; 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IPUT_WIDE = 0x5a; 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IPUT_OBJECT = 0x5b; 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IPUT_BOOLEAN = 0x5c; 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IPUT_BYTE = 0x5d; 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IPUT_CHAR = 0x5e; 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int IPUT_SHORT = 0x5f; 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SGET = 0x60; 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SGET_WIDE = 0x61; 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SGET_OBJECT = 0x62; 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SGET_BOOLEAN = 0x63; 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SGET_BYTE = 0x64; 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SGET_CHAR = 0x65; 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SGET_SHORT = 0x66; 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SPUT = 0x67; 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SPUT_WIDE = 0x68; 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SPUT_OBJECT = 0x69; 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SPUT_BOOLEAN = 0x6a; 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SPUT_BYTE = 0x6b; 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SPUT_CHAR = 0x6c; 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SPUT_SHORT = 0x6d; 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INVOKE_VIRTUAL = 0x6e; 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INVOKE_SUPER = 0x6f; 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INVOKE_DIRECT = 0x70; 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INVOKE_STATIC = 0x71; 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INVOKE_INTERFACE = 0x72; 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INVOKE_VIRTUAL_RANGE = 0x74; 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INVOKE_SUPER_RANGE = 0x75; 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INVOKE_DIRECT_RANGE = 0x76; 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INVOKE_STATIC_RANGE = 0x77; 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INVOKE_INTERFACE_RANGE = 0x78; 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int NEG_INT = 0x7b; 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int NOT_INT = 0x7c; 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int NEG_LONG = 0x7d; 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int NOT_LONG = 0x7e; 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int NEG_FLOAT = 0x7f; 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int NEG_DOUBLE = 0x80; 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INT_TO_LONG = 0x81; 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INT_TO_FLOAT = 0x82; 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INT_TO_DOUBLE = 0x83; 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int LONG_TO_INT = 0x84; 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int LONG_TO_FLOAT = 0x85; 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int LONG_TO_DOUBLE = 0x86; 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int FLOAT_TO_INT = 0x87; 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int FLOAT_TO_LONG = 0x88; 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int FLOAT_TO_DOUBLE = 0x89; 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DOUBLE_TO_INT = 0x8a; 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DOUBLE_TO_LONG = 0x8b; 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DOUBLE_TO_FLOAT = 0x8c; 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INT_TO_BYTE = 0x8d; 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INT_TO_CHAR = 0x8e; 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int INT_TO_SHORT = 0x8f; 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ADD_INT = 0x90; 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SUB_INT = 0x91; 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MUL_INT = 0x92; 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DIV_INT = 0x93; 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int REM_INT = 0x94; 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AND_INT = 0x95; 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int OR_INT = 0x96; 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int XOR_INT = 0x97; 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SHL_INT = 0x98; 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SHR_INT = 0x99; 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int USHR_INT = 0x9a; 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ADD_LONG = 0x9b; 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SUB_LONG = 0x9c; 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MUL_LONG = 0x9d; 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DIV_LONG = 0x9e; 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int REM_LONG = 0x9f; 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AND_LONG = 0xa0; 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int OR_LONG = 0xa1; 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int XOR_LONG = 0xa2; 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SHL_LONG = 0xa3; 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SHR_LONG = 0xa4; 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int USHR_LONG = 0xa5; 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ADD_FLOAT = 0xa6; 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SUB_FLOAT = 0xa7; 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MUL_FLOAT = 0xa8; 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DIV_FLOAT = 0xa9; 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int REM_FLOAT = 0xaa; 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ADD_DOUBLE = 0xab; 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SUB_DOUBLE = 0xac; 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MUL_DOUBLE = 0xad; 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DIV_DOUBLE = 0xae; 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int REM_DOUBLE = 0xaf; 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ADD_INT_2ADDR = 0xb0; 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SUB_INT_2ADDR = 0xb1; 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MUL_INT_2ADDR = 0xb2; 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DIV_INT_2ADDR = 0xb3; 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int REM_INT_2ADDR = 0xb4; 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AND_INT_2ADDR = 0xb5; 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int OR_INT_2ADDR = 0xb6; 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int XOR_INT_2ADDR = 0xb7; 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SHL_INT_2ADDR = 0xb8; 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SHR_INT_2ADDR = 0xb9; 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int USHR_INT_2ADDR = 0xba; 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ADD_LONG_2ADDR = 0xbb; 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SUB_LONG_2ADDR = 0xbc; 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MUL_LONG_2ADDR = 0xbd; 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DIV_LONG_2ADDR = 0xbe; 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int REM_LONG_2ADDR = 0xbf; 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AND_LONG_2ADDR = 0xc0; 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int OR_LONG_2ADDR = 0xc1; 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int XOR_LONG_2ADDR = 0xc2; 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SHL_LONG_2ADDR = 0xc3; 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SHR_LONG_2ADDR = 0xc4; 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int USHR_LONG_2ADDR = 0xc5; 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ADD_FLOAT_2ADDR = 0xc6; 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SUB_FLOAT_2ADDR = 0xc7; 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MUL_FLOAT_2ADDR = 0xc8; 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DIV_FLOAT_2ADDR = 0xc9; 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int REM_FLOAT_2ADDR = 0xca; 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ADD_DOUBLE_2ADDR = 0xcb; 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SUB_DOUBLE_2ADDR = 0xcc; 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MUL_DOUBLE_2ADDR = 0xcd; 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DIV_DOUBLE_2ADDR = 0xce; 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int REM_DOUBLE_2ADDR = 0xcf; 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ADD_INT_LIT16 = 0xd0; 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int RSUB_INT = 0xd1; 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MUL_INT_LIT16 = 0xd2; 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DIV_INT_LIT16 = 0xd3; 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int REM_INT_LIT16 = 0xd4; 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AND_INT_LIT16 = 0xd5; 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int OR_INT_LIT16 = 0xd6; 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int XOR_INT_LIT16 = 0xd7; 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int ADD_INT_LIT8 = 0xd8; 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int RSUB_INT_LIT8 = 0xd9; 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int MUL_INT_LIT8 = 0xda; 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int DIV_INT_LIT8 = 0xdb; 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int REM_INT_LIT8 = 0xdc; 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int AND_INT_LIT8 = 0xdd; 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int OR_INT_LIT8 = 0xde; 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int XOR_INT_LIT8 = 0xdf; 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SHL_INT_LIT8 = 0xe0; 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int SHR_INT_LIT8 = 0xe1; 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int USHR_INT_LIT8 = 0xe2; 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END(opcodes) 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 26432dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein // TODO: Generate these payload opcodes with opcode-gen. 26532dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2677ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein * special pseudo-opcode value for packed-switch data payload 2687ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein * instructions 2697ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein */ 2707ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein public static final int PACKED_SWITCH_PAYLOAD = 0x100; 2717ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein 2727ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein /** special pseudo-opcode value for packed-switch data payload 2737ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein * instructions 2747ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein */ 2757ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein public static final int SPARSE_SWITCH_PAYLOAD = 0x200; 2767ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein 2777ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein /** special pseudo-opcode value for fill-array-data data payload 2787ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein * instructions 2797ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein */ 2807ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein public static final int FILL_ARRAY_DATA_PAYLOAD = 0x300; 2817ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein 2827ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein /** 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This class is uninstantiable. 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2857ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein private Opcodes() { 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // This space intentionally left blank. 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 28825f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein 28925f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein /** 29025f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein * Determines if the given opcode has the right "shape" to be 2919f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * valid. This includes the range {@code 0x01..0xfe}, the range 2929f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * {@code 0x00ff..0xffff} where the low-order byte is either 2939f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * {@code 0} or {@code 0xff}, and the special opcode values {@code 2949f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * SPECIAL_FORMAT} and {@code NO_NEXT}. Note that not all of the 2959f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * opcode values that pass this test are in fact used. This method 2969f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * is meant to perform a quick check to reject blatantly wrong 2979f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * values (e.g. when validating arguments). 29825f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein * 29925f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein * @param opcode the opcode value 30025f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein * @return {@code true} iff the value has the right "shape" to be 30125f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein * possibly valid 30225f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein */ 30325f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein public static boolean isValidShape(int opcode) { 304a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein /* 305a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein * Note: This method bakes in knowledge that all opcodes are 3069f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * one of the forms: 3079f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * 3089f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * * single byte in range 0x01..0xfe -- normal opcodes 3099f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * * (byteValue << 8) -- nop and data payload opcodes 3109f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * * ((byteValue << 8) | 0xff) -- 16-bit extended opcodes 3119f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * * SPECIAL_FORMAT or NO_NEXT -- pseudo-opcodes 312a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein */ 313a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein 31425f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein // Note: SPECIAL_FORMAT == NO_NEXT. 31532dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein if (opcode < SPECIAL_FORMAT) { 31632dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein return false; 31732dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein } else if (opcode == SPECIAL_FORMAT) { 31825f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein return true; 31925f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein } 32025f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein 32132dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein int lowByte = opcode & 0xff; 32232dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein if ((lowByte == 0) || (lowByte == 0xff)) { 32325f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein return true; 32425f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein } 32525f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein 32632dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein return (opcode & 0xff00) == 0; 32725f7980a51488db2ebcd7822c83c3f4b25a2a730Dan Bornstein } 328a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein 329a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein /** 3309f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * Gets whether ({@code true}) or not ({@code false}) the given 3319f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * opcode value is an "extended" opcode (not counting the nop-like 3329f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * payload opcodes). Extended opcodes require a full 16-bit code 3339f655606b10fdbf2c9e240a42c78f0eb4798acafDan Bornstein * unit to represent, without leaving space for an argument byte. 334f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein * 335f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein * @param opcode the opcode value 336f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein * @return {@code true} iff the opcode is an "extended" opcode 337f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein */ 338f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein public static boolean isExtended(int opcode) { 33918fde740e929347510f08b0b5faccd2bac1d4c22Dan Bornstein /* 34018fde740e929347510f08b0b5faccd2bac1d4c22Dan Bornstein * Note: Extended opcodes all have the form ((byteValue << 8) 34118fde740e929347510f08b0b5faccd2bac1d4c22Dan Bornstein * | 0xff). 34218fde740e929347510f08b0b5faccd2bac1d4c22Dan Bornstein */ 343f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein return (opcode >= 0x00ff); 344f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein } 345f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein 346f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein /** 347a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein * Gets the opcode out of an opcode unit, the latter of which may also 348a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein * include one or more argument values. 349f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein * 350f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein * @param opcodeUnit the opcode-containing code unit 351f4955a1a2eb1c06aafc9e314b221c448d15623d9Dan Bornstein * @return the extracted opcode 352a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein */ 353a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein public static int extractOpcodeFromUnit(int opcodeUnit) { 354a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein /* 355a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein * Note: This method bakes in knowledge that all opcodes are 35632dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein * either single-byte or of the forms (byteValue << 8) or 35718fde740e929347510f08b0b5faccd2bac1d4c22Dan Bornstein * ((byteValue << 8) | 0xff). 358a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein */ 359a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein 360a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein int lowByte = opcodeUnit & 0xff; 36132dd826ad1742993cf0627448cd083a5021d71bbDan Bornstein return ((lowByte == 0) || (lowByte == 0xff)) ? opcodeUnit : lowByte; 362a2c9b2631e0e0034fdd6518e45a20d27914c731fDan Bornstein } 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 364