1579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson/* 2579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Copyright (C) 2007 The Android Open Source Project 3579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 4579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 5579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * you may not use this file except in compliance with the License. 6579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * You may obtain a copy of the License at 7579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 8579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 9579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 10579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Unless required by applicable law or agreed to in writing, software 11579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 12579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * See the License for the specific language governing permissions and 14579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * limitations under the License. 15579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 16579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 17579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonpackage com.android.dx.dex.code; 18579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 19579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport com.android.dx.rop.code.Insn; 20579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport com.android.dx.rop.code.RegOps; 21579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport com.android.dx.rop.code.Rop; 22579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport com.android.dx.rop.code.Rops; 23579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport com.android.dx.rop.code.ThrowingCstInsn; 24579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport com.android.dx.rop.code.RegisterSpec; 25579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport com.android.dx.rop.cst.Constant; 26579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport com.android.dx.rop.cst.CstFieldRef; 27579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport com.android.dx.rop.cst.CstType; 28579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport com.android.dx.rop.cst.CstString; 29579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport com.android.dx.rop.type.Type; 30579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 31579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonimport java.util.HashMap; 32579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 33579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson/** 34579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Translator from rop-level {@link Insn} instances to corresponding 35579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * {@link Dop} instances. 36579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 37579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonpublic final class RopToDop { 38579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** {@code non-null;} map from all the common rops to dalvik opcodes */ 39579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson private static final HashMap<Rop, Dop> MAP; 40579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 41579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 42579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * This class is uninstantiable. 43579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 44579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson private RopToDop() { 45579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // This space intentionally left blank. 46579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 47579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 48579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 49579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * The following comment lists each opcode that should be considered 50579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * the "head" of an opcode chain, in terms of the process of fitting 51579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * an instruction's arguments to an actual opcode. This list is 52579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * automatically generated and may be of use in double-checking the 53579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * manually-generated static initialization code for this class. 54579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 55579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * TODO: Make opcode-gen produce useful code in this case instead 56579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * of just a comment. 57579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 58579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 59579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // BEGIN(first-opcodes); GENERATED AUTOMATICALLY BY opcode-gen 60579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.NOP 61579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MOVE 62579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MOVE_WIDE 63579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MOVE_OBJECT 64579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MOVE_RESULT 65579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MOVE_RESULT_WIDE 66579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MOVE_RESULT_OBJECT 67579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MOVE_EXCEPTION 68579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.RETURN_VOID 69579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.RETURN 70579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.RETURN_WIDE 71579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.RETURN_OBJECT 72579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.CONST_4 73579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.CONST_WIDE_16 74579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.CONST_STRING 75579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.CONST_CLASS 76579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MONITOR_ENTER 77579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MONITOR_EXIT 78579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.CHECK_CAST 79579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INSTANCE_OF 80579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.ARRAY_LENGTH 81579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.NEW_INSTANCE 82579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.NEW_ARRAY 83579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.FILLED_NEW_ARRAY 84579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.FILL_ARRAY_DATA 85579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.THROW 86579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.GOTO 87579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.PACKED_SWITCH 88579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SPARSE_SWITCH 89579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.CMPL_FLOAT 90579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.CMPG_FLOAT 91579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.CMPL_DOUBLE 92579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.CMPG_DOUBLE 93579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.CMP_LONG 94579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_EQ 95579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_NE 96579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_LT 97579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_GE 98579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_GT 99579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_LE 100579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_EQZ 101579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_NEZ 102579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_LTZ 103579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_GEZ 104579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_GTZ 105579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IF_LEZ 106579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.AGET 107579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.AGET_WIDE 108579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.AGET_OBJECT 109579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.AGET_BOOLEAN 110579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.AGET_BYTE 111579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.AGET_CHAR 112579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.AGET_SHORT 113579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.APUT 114579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.APUT_WIDE 115579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.APUT_OBJECT 116579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.APUT_BOOLEAN 117579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.APUT_BYTE 118579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.APUT_CHAR 119579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.APUT_SHORT 120579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IGET 121579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IGET_WIDE 122579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IGET_OBJECT 123579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IGET_BOOLEAN 124579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IGET_BYTE 125579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IGET_CHAR 126579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IGET_SHORT 127579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IPUT 128579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IPUT_WIDE 129579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IPUT_OBJECT 130579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IPUT_BOOLEAN 131579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IPUT_BYTE 132579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IPUT_CHAR 133579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.IPUT_SHORT 134579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SGET 135579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SGET_WIDE 136579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SGET_OBJECT 137579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SGET_BOOLEAN 138579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SGET_BYTE 139579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SGET_CHAR 140579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SGET_SHORT 141579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SPUT 142579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SPUT_WIDE 143579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SPUT_OBJECT 144579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SPUT_BOOLEAN 145579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SPUT_BYTE 146579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SPUT_CHAR 147579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SPUT_SHORT 148579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INVOKE_VIRTUAL 149579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INVOKE_SUPER 150579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INVOKE_DIRECT 151579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INVOKE_STATIC 152579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INVOKE_INTERFACE 153579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.NEG_INT 154579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.NOT_INT 155579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.NEG_LONG 156579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.NOT_LONG 157579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.NEG_FLOAT 158579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.NEG_DOUBLE 159579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INT_TO_LONG 160579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INT_TO_FLOAT 161579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INT_TO_DOUBLE 162579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.LONG_TO_INT 163579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.LONG_TO_FLOAT 164579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.LONG_TO_DOUBLE 165579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.FLOAT_TO_INT 166579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.FLOAT_TO_LONG 167579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.FLOAT_TO_DOUBLE 168579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.DOUBLE_TO_INT 169579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.DOUBLE_TO_LONG 170579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.DOUBLE_TO_FLOAT 171579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INT_TO_BYTE 172579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INT_TO_CHAR 173579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.INT_TO_SHORT 174579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.ADD_INT_2ADDR 175579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SUB_INT_2ADDR 176579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MUL_INT_2ADDR 177579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.DIV_INT_2ADDR 178579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.REM_INT_2ADDR 179579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.AND_INT_2ADDR 180579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.OR_INT_2ADDR 181579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.XOR_INT_2ADDR 182579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SHL_INT_2ADDR 183579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SHR_INT_2ADDR 184579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.USHR_INT_2ADDR 185579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.ADD_LONG_2ADDR 186579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SUB_LONG_2ADDR 187579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MUL_LONG_2ADDR 188579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.DIV_LONG_2ADDR 189579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.REM_LONG_2ADDR 190579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.AND_LONG_2ADDR 191579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.OR_LONG_2ADDR 192579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.XOR_LONG_2ADDR 193579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SHL_LONG_2ADDR 194579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SHR_LONG_2ADDR 195579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.USHR_LONG_2ADDR 196579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.ADD_FLOAT_2ADDR 197579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SUB_FLOAT_2ADDR 198579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MUL_FLOAT_2ADDR 199579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.DIV_FLOAT_2ADDR 200579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.REM_FLOAT_2ADDR 201579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.ADD_DOUBLE_2ADDR 202579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SUB_DOUBLE_2ADDR 203579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MUL_DOUBLE_2ADDR 204579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.DIV_DOUBLE_2ADDR 205579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.REM_DOUBLE_2ADDR 206579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.ADD_INT_LIT8 207579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.RSUB_INT_LIT8 208579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.MUL_INT_LIT8 209579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.DIV_INT_LIT8 210579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.REM_INT_LIT8 211579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.AND_INT_LIT8 212579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.OR_INT_LIT8 213579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.XOR_INT_LIT8 214579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SHL_INT_LIT8 215579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.SHR_INT_LIT8 216579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Opcodes.USHR_INT_LIT8 217579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // END(first-opcodes) 218579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 219579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson static { 220579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 221579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Note: The choices made here are to pick the optimistically 222579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * smallest Dalvik opcode, and leave it to later processing to 223579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * pessimize. See the automatically-generated comment above 224579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * for reference. 225579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 226579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP = new HashMap<Rop, Dop>(400); 227579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.NOP, Dops.NOP); 228579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MOVE_INT, Dops.MOVE); 229579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MOVE_LONG, Dops.MOVE_WIDE); 230579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MOVE_FLOAT, Dops.MOVE); 231579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MOVE_DOUBLE, Dops.MOVE_WIDE); 232579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MOVE_OBJECT, Dops.MOVE_OBJECT); 233579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MOVE_PARAM_INT, Dops.MOVE); 234579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MOVE_PARAM_LONG, Dops.MOVE_WIDE); 235579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MOVE_PARAM_FLOAT, Dops.MOVE); 236579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MOVE_PARAM_DOUBLE, Dops.MOVE_WIDE); 237579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MOVE_PARAM_OBJECT, Dops.MOVE_OBJECT); 238579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 239579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 240579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Note: No entry for MOVE_EXCEPTION, since it varies by 241579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * exception type. (That is, there is no unique instance to 242579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * add to the map.) 243579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 244579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 245579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONST_INT, Dops.CONST_4); 246579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONST_LONG, Dops.CONST_WIDE_16); 247579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONST_FLOAT, Dops.CONST_4); 248579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONST_DOUBLE, Dops.CONST_WIDE_16); 249579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 250579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 251579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Note: No entry for CONST_OBJECT, since it needs to turn 252579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * into either CONST_STRING or CONST_CLASS. 253579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 254579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 255579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 256579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * TODO: I think the only case of this is for null, and 257579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * const/4 should cover that. 258579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 259579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONST_OBJECT_NOTHROW, Dops.CONST_4); 260579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 261579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.GOTO, Dops.GOTO); 262579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_EQZ_INT, Dops.IF_EQZ); 263579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_NEZ_INT, Dops.IF_NEZ); 264579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_LTZ_INT, Dops.IF_LTZ); 265579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_GEZ_INT, Dops.IF_GEZ); 266579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_LEZ_INT, Dops.IF_LEZ); 267579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_GTZ_INT, Dops.IF_GTZ); 268579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_EQZ_OBJECT, Dops.IF_EQZ); 269579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_NEZ_OBJECT, Dops.IF_NEZ); 270579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_EQ_INT, Dops.IF_EQ); 271579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_NE_INT, Dops.IF_NE); 272579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_LT_INT, Dops.IF_LT); 273579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_GE_INT, Dops.IF_GE); 274579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_LE_INT, Dops.IF_LE); 275579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_GT_INT, Dops.IF_GT); 276579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_EQ_OBJECT, Dops.IF_EQ); 277579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.IF_NE_OBJECT, Dops.IF_NE); 278579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SWITCH, Dops.SPARSE_SWITCH); 279579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.ADD_INT, Dops.ADD_INT_2ADDR); 280579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.ADD_LONG, Dops.ADD_LONG_2ADDR); 281579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.ADD_FLOAT, Dops.ADD_FLOAT_2ADDR); 282579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.ADD_DOUBLE, Dops.ADD_DOUBLE_2ADDR); 283579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SUB_INT, Dops.SUB_INT_2ADDR); 284579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SUB_LONG, Dops.SUB_LONG_2ADDR); 285579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SUB_FLOAT, Dops.SUB_FLOAT_2ADDR); 286579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SUB_DOUBLE, Dops.SUB_DOUBLE_2ADDR); 287579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MUL_INT, Dops.MUL_INT_2ADDR); 288579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MUL_LONG, Dops.MUL_LONG_2ADDR); 289579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MUL_FLOAT, Dops.MUL_FLOAT_2ADDR); 290579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MUL_DOUBLE, Dops.MUL_DOUBLE_2ADDR); 291579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.DIV_INT, Dops.DIV_INT_2ADDR); 292579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.DIV_LONG, Dops.DIV_LONG_2ADDR); 293579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.DIV_FLOAT, Dops.DIV_FLOAT_2ADDR); 294579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.DIV_DOUBLE, Dops.DIV_DOUBLE_2ADDR); 295579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.REM_INT, Dops.REM_INT_2ADDR); 296579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.REM_LONG, Dops.REM_LONG_2ADDR); 297579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.REM_FLOAT, Dops.REM_FLOAT_2ADDR); 298579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.REM_DOUBLE, Dops.REM_DOUBLE_2ADDR); 299579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.NEG_INT, Dops.NEG_INT); 300579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.NEG_LONG, Dops.NEG_LONG); 301579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.NEG_FLOAT, Dops.NEG_FLOAT); 302579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.NEG_DOUBLE, Dops.NEG_DOUBLE); 303579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AND_INT, Dops.AND_INT_2ADDR); 304579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AND_LONG, Dops.AND_LONG_2ADDR); 305579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.OR_INT, Dops.OR_INT_2ADDR); 306579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.OR_LONG, Dops.OR_LONG_2ADDR); 307579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.XOR_INT, Dops.XOR_INT_2ADDR); 308579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.XOR_LONG, Dops.XOR_LONG_2ADDR); 309579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SHL_INT, Dops.SHL_INT_2ADDR); 310579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SHL_LONG, Dops.SHL_LONG_2ADDR); 311579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SHR_INT, Dops.SHR_INT_2ADDR); 312579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SHR_LONG, Dops.SHR_LONG_2ADDR); 313579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.USHR_INT, Dops.USHR_INT_2ADDR); 314579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.USHR_LONG, Dops.USHR_LONG_2ADDR); 315579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.NOT_INT, Dops.NOT_INT); 316579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.NOT_LONG, Dops.NOT_LONG); 317579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 318579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.ADD_CONST_INT, Dops.ADD_INT_LIT8); 319579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Note: No dalvik ops for other types of add_const. 320579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 321579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SUB_CONST_INT, Dops.RSUB_INT_LIT8); 322579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 323579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Note: No dalvik ops for any type of sub_const; instead 324579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * there's a *reverse* sub (constant - reg) for ints only. 325579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 326579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 327579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MUL_CONST_INT, Dops.MUL_INT_LIT8); 328579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Note: No dalvik ops for other types of mul_const. 329579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 330579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.DIV_CONST_INT, Dops.DIV_INT_LIT8); 331579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Note: No dalvik ops for other types of div_const. 332579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 333579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.REM_CONST_INT, Dops.REM_INT_LIT8); 334579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Note: No dalvik ops for other types of rem_const. 335579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 336579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AND_CONST_INT, Dops.AND_INT_LIT8); 337579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Note: No dalvik op for and_const_long. 338579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 339579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.OR_CONST_INT, Dops.OR_INT_LIT8); 340579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Note: No dalvik op for or_const_long. 341579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 342579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.XOR_CONST_INT, Dops.XOR_INT_LIT8); 343579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Note: No dalvik op for xor_const_long. 344579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 345579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SHL_CONST_INT, Dops.SHL_INT_LIT8); 346579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Note: No dalvik op for shl_const_long. 347579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 348579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.SHR_CONST_INT, Dops.SHR_INT_LIT8); 349579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Note: No dalvik op for shr_const_long. 350579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 351579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.USHR_CONST_INT, Dops.USHR_INT_LIT8); 352579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Note: No dalvik op for shr_const_long. 353579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 354579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CMPL_LONG, Dops.CMP_LONG); 355579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CMPL_FLOAT, Dops.CMPL_FLOAT); 356579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CMPL_DOUBLE, Dops.CMPL_DOUBLE); 357579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CMPG_FLOAT, Dops.CMPG_FLOAT); 358579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CMPG_DOUBLE, Dops.CMPG_DOUBLE); 359579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_L2I, Dops.LONG_TO_INT); 360579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_F2I, Dops.FLOAT_TO_INT); 361579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_D2I, Dops.DOUBLE_TO_INT); 362579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_I2L, Dops.INT_TO_LONG); 363579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_F2L, Dops.FLOAT_TO_LONG); 364579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_D2L, Dops.DOUBLE_TO_LONG); 365579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_I2F, Dops.INT_TO_FLOAT); 366579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_L2F, Dops.LONG_TO_FLOAT); 367579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_D2F, Dops.DOUBLE_TO_FLOAT); 368579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_I2D, Dops.INT_TO_DOUBLE); 369579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_L2D, Dops.LONG_TO_DOUBLE); 370579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CONV_F2D, Dops.FLOAT_TO_DOUBLE); 371579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.TO_BYTE, Dops.INT_TO_BYTE); 372579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.TO_CHAR, Dops.INT_TO_CHAR); 373579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.TO_SHORT, Dops.INT_TO_SHORT); 374579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.RETURN_VOID, Dops.RETURN_VOID); 375579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.RETURN_INT, Dops.RETURN); 376579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.RETURN_LONG, Dops.RETURN_WIDE); 377579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.RETURN_FLOAT, Dops.RETURN); 378579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.RETURN_DOUBLE, Dops.RETURN_WIDE); 379579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.RETURN_OBJECT, Dops.RETURN_OBJECT); 380579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.ARRAY_LENGTH, Dops.ARRAY_LENGTH); 381579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.THROW, Dops.THROW); 382579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MONITOR_ENTER, Dops.MONITOR_ENTER); 383579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.MONITOR_EXIT, Dops.MONITOR_EXIT); 384579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AGET_INT, Dops.AGET); 385579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AGET_LONG, Dops.AGET_WIDE); 386579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AGET_FLOAT, Dops.AGET); 387579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AGET_DOUBLE, Dops.AGET_WIDE); 388579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AGET_OBJECT, Dops.AGET_OBJECT); 389579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AGET_BOOLEAN, Dops.AGET_BOOLEAN); 390579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AGET_BYTE, Dops.AGET_BYTE); 391579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AGET_CHAR, Dops.AGET_CHAR); 392579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.AGET_SHORT, Dops.AGET_SHORT); 393579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.APUT_INT, Dops.APUT); 394579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.APUT_LONG, Dops.APUT_WIDE); 395579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.APUT_FLOAT, Dops.APUT); 396579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.APUT_DOUBLE, Dops.APUT_WIDE); 397579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.APUT_OBJECT, Dops.APUT_OBJECT); 398579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.APUT_BOOLEAN, Dops.APUT_BOOLEAN); 399579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.APUT_BYTE, Dops.APUT_BYTE); 400579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.APUT_CHAR, Dops.APUT_CHAR); 401579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.APUT_SHORT, Dops.APUT_SHORT); 402579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.NEW_INSTANCE, Dops.NEW_INSTANCE); 403579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.CHECK_CAST, Dops.CHECK_CAST); 404579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.INSTANCE_OF, Dops.INSTANCE_OF); 405579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 406579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.GET_FIELD_LONG, Dops.IGET_WIDE); 407579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.GET_FIELD_FLOAT, Dops.IGET); 408579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.GET_FIELD_DOUBLE, Dops.IGET_WIDE); 409579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.GET_FIELD_OBJECT, Dops.IGET_OBJECT); 410579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 411579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Note: No map entries for get_field_* for non-long integral types, 412579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * since they need to be handled specially (see dopFor() below). 413579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 414579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 415579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.GET_STATIC_LONG, Dops.SGET_WIDE); 416579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.GET_STATIC_FLOAT, Dops.SGET); 417579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.GET_STATIC_DOUBLE, Dops.SGET_WIDE); 418579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.GET_STATIC_OBJECT, Dops.SGET_OBJECT); 419579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 420579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Note: No map entries for get_static* for non-long integral types, 421579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * since they need to be handled specially (see dopFor() below). 422579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 423579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 424579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.PUT_FIELD_LONG, Dops.IPUT_WIDE); 425579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.PUT_FIELD_FLOAT, Dops.IPUT); 426579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.PUT_FIELD_DOUBLE, Dops.IPUT_WIDE); 427579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.PUT_FIELD_OBJECT, Dops.IPUT_OBJECT); 428579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 429579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Note: No map entries for put_field_* for non-long integral types, 430579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * since they need to be handled specially (see dopFor() below). 431579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 432579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 433579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.PUT_STATIC_LONG, Dops.SPUT_WIDE); 434579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.PUT_STATIC_FLOAT, Dops.SPUT); 435579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.PUT_STATIC_DOUBLE, Dops.SPUT_WIDE); 436579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson MAP.put(Rops.PUT_STATIC_OBJECT, Dops.SPUT_OBJECT); 437579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 438579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Note: No map entries for put_static* for non-long integral types, 439579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * since they need to be handled specially (see dopFor() below). 440579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 441579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 442579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 443579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Note: No map entries for invoke*, new_array, and 444579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * filled_new_array, since they need to be handled specially 445579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * (see dopFor() below). 446579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 447579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 448579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 449579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /** 450579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Returns the dalvik opcode appropriate for the given register-based 451579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * instruction. 452579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 453579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @param insn {@code non-null;} the original instruction 454579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * @return the corresponding dalvik opcode; one of the constants in 455579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * {@link Dops} 456579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 457579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson public static Dop dopFor(Insn insn) { 458579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson Rop rop = insn.getOpcode(); 459579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 460579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 461579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * First, just try looking up the rop in the MAP of easy 462579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * cases. 463579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 464579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson Dop result = MAP.get(rop); 465579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson if (result != null) { 466579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return result; 467579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 468579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 469579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson /* 470579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * There was no easy case for the rop, so look up the opcode, and 471579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * do something special for each: 472579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 473579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * The move_exception, new_array, filled_new_array, and 474579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * invoke* opcodes won't be found in MAP, since they'll each 475579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * have different source and/or result register types / lists. 476579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 477579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * The get* and put* opcodes for (non-long) integral types 478579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * aren't in the map, since the type signatures aren't 479579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * sufficient to distinguish between the types (the salient 480579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * source or result will always be just "int"). 481579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * 482579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * And const instruction need to distinguish between strings and 483579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * classes. 484579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */ 485579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 486579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson switch (rop.getOpcode()) { 487579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.MOVE_EXCEPTION: return Dops.MOVE_EXCEPTION; 488579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.INVOKE_STATIC: return Dops.INVOKE_STATIC; 489579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.INVOKE_VIRTUAL: return Dops.INVOKE_VIRTUAL; 490579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.INVOKE_SUPER: return Dops.INVOKE_SUPER; 491579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.INVOKE_DIRECT: return Dops.INVOKE_DIRECT; 492579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.INVOKE_INTERFACE: return Dops.INVOKE_INTERFACE; 493579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.NEW_ARRAY: return Dops.NEW_ARRAY; 494579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.FILLED_NEW_ARRAY: return Dops.FILLED_NEW_ARRAY; 495579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.FILL_ARRAY_DATA: return Dops.FILL_ARRAY_DATA; 496579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.MOVE_RESULT: { 497579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson RegisterSpec resultReg = insn.getResult(); 498579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 499579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson if (resultReg == null) { 500579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return Dops.NOP; 501579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } else { 502579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson switch (resultReg.getBasicType()) { 503579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_INT: 504579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_FLOAT: 505579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_BOOLEAN: 506579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_BYTE: 507579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_CHAR: 508579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_SHORT: 509579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return Dops.MOVE_RESULT; 510579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_LONG: 511579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_DOUBLE: 512579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return Dops.MOVE_RESULT_WIDE; 513579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_OBJECT: 514579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return Dops.MOVE_RESULT_OBJECT; 515579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson default: { 516579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson throw new RuntimeException("Unexpected basic type"); 517579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 518579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 519579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 520579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 521579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 522579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.GET_FIELD: { 523579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson CstFieldRef ref = 524579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); 525579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson int basicType = ref.getBasicType(); 526579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson switch (basicType) { 527579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_BOOLEAN: return Dops.IGET_BOOLEAN; 528579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_BYTE: return Dops.IGET_BYTE; 529579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_CHAR: return Dops.IGET_CHAR; 530579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_SHORT: return Dops.IGET_SHORT; 531579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_INT: return Dops.IGET; 532579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 533579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson break; 534579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 535579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.PUT_FIELD: { 536579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson CstFieldRef ref = 537579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); 538579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson int basicType = ref.getBasicType(); 539579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson switch (basicType) { 540579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_BOOLEAN: return Dops.IPUT_BOOLEAN; 541579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_BYTE: return Dops.IPUT_BYTE; 542579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_CHAR: return Dops.IPUT_CHAR; 543579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_SHORT: return Dops.IPUT_SHORT; 544579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_INT: return Dops.IPUT; 545579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 546579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson break; 547579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 548579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.GET_STATIC: { 549579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson CstFieldRef ref = 550579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); 551579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson int basicType = ref.getBasicType(); 552579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson switch (basicType) { 553579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_BOOLEAN: return Dops.SGET_BOOLEAN; 554579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_BYTE: return Dops.SGET_BYTE; 555579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_CHAR: return Dops.SGET_CHAR; 556579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_SHORT: return Dops.SGET_SHORT; 557579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_INT: return Dops.SGET; 558579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 559579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson break; 560579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 561579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.PUT_STATIC: { 562579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson CstFieldRef ref = 563579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); 564579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson int basicType = ref.getBasicType(); 565579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson switch (basicType) { 566579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_BOOLEAN: return Dops.SPUT_BOOLEAN; 567579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_BYTE: return Dops.SPUT_BYTE; 568579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_CHAR: return Dops.SPUT_CHAR; 569579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_SHORT: return Dops.SPUT_SHORT; 570579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case Type.BT_INT: return Dops.SPUT; 571579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 572579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson break; 573579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 574579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson case RegOps.CONST: { 575579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson Constant cst = ((ThrowingCstInsn) insn).getConstant(); 576579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson if (cst instanceof CstType) { 577579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return Dops.CONST_CLASS; 578579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } else if (cst instanceof CstString) { 579579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return Dops.CONST_STRING; 580579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 581579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson break; 582579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 583579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 584579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 585579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson throw new RuntimeException("unknown rop: " + rop); 586579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 587579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson} 588