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 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage com.android.dx.dex.code; 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.code.Insn; 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.code.RegOps; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.code.Rop; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.code.Rops; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.code.ThrowingCstInsn; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.code.RegisterSpec; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.cst.Constant; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.cst.CstFieldRef; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.cst.CstType; 28333201833d506a3accdeac6ceb7caba8d4b95797Jesse Wilsonimport com.android.dx.rop.cst.CstString; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.type.Type; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.HashMap; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Translator from rop-level {@link Insn} instances to corresponding 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link Dop} instances. 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic final class RopToDop { 3899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project /** {@code non-null;} map from all the common rops to dalvik opcodes */ 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final HashMap<Rop, Dop> MAP; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This class is uninstantiable. 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private RopToDop() { 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // This space intentionally left blank. 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 4812209c24903959d41f887c05e6a04e0b08367463Dan Bornstein /* 4912209c24903959d41f887c05e6a04e0b08367463Dan Bornstein * The following comment lists each opcode that should be considered 5012209c24903959d41f887c05e6a04e0b08367463Dan Bornstein * the "head" of an opcode chain, in terms of the process of fitting 5112209c24903959d41f887c05e6a04e0b08367463Dan Bornstein * an instruction's arguments to an actual opcode. This list is 5212209c24903959d41f887c05e6a04e0b08367463Dan Bornstein * automatically generated and may be of use in double-checking the 5312209c24903959d41f887c05e6a04e0b08367463Dan Bornstein * manually-generated static initialization code for this class. 5412209c24903959d41f887c05e6a04e0b08367463Dan Bornstein * 5512209c24903959d41f887c05e6a04e0b08367463Dan Bornstein * TODO: Make opcode-gen produce useful code in this case instead 5612209c24903959d41f887c05e6a04e0b08367463Dan Bornstein * of just a comment. 5712209c24903959d41f887c05e6a04e0b08367463Dan Bornstein */ 5812209c24903959d41f887c05e6a04e0b08367463Dan Bornstein 5912209c24903959d41f887c05e6a04e0b08367463Dan Bornstein // BEGIN(first-opcodes); GENERATED AUTOMATICALLY BY opcode-gen 607ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.NOP 617ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MOVE 627ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MOVE_WIDE 637ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MOVE_OBJECT 647ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MOVE_RESULT 657ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MOVE_RESULT_WIDE 667ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MOVE_RESULT_OBJECT 677ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MOVE_EXCEPTION 687ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.RETURN_VOID 697ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.RETURN 707ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.RETURN_WIDE 717ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.RETURN_OBJECT 727ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.CONST_4 737ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.CONST_WIDE_16 747ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.CONST_STRING 757ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.CONST_CLASS 767ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MONITOR_ENTER 777ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MONITOR_EXIT 787ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.CHECK_CAST 797ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INSTANCE_OF 807ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.ARRAY_LENGTH 817ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.NEW_INSTANCE 827ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.NEW_ARRAY 837ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.FILLED_NEW_ARRAY 847ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.FILL_ARRAY_DATA 857ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.THROW 867ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.GOTO 877ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.PACKED_SWITCH 887ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SPARSE_SWITCH 897ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.CMPL_FLOAT 907ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.CMPG_FLOAT 917ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.CMPL_DOUBLE 927ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.CMPG_DOUBLE 937ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.CMP_LONG 947ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_EQ 957ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_NE 967ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_LT 977ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_GE 987ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_GT 997ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_LE 1007ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_EQZ 1017ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_NEZ 1027ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_LTZ 1037ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_GEZ 1047ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_GTZ 1057ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IF_LEZ 1067ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.AGET 1077ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.AGET_WIDE 1087ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.AGET_OBJECT 1097ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.AGET_BOOLEAN 1107ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.AGET_BYTE 1117ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.AGET_CHAR 1127ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.AGET_SHORT 1137ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.APUT 1147ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.APUT_WIDE 1157ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.APUT_OBJECT 1167ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.APUT_BOOLEAN 1177ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.APUT_BYTE 1187ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.APUT_CHAR 1197ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.APUT_SHORT 1207ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IGET 1217ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IGET_WIDE 1227ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IGET_OBJECT 1237ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IGET_BOOLEAN 1247ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IGET_BYTE 1257ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IGET_CHAR 1267ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IGET_SHORT 1277ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IPUT 1287ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IPUT_WIDE 1297ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IPUT_OBJECT 1307ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IPUT_BOOLEAN 1317ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IPUT_BYTE 1327ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IPUT_CHAR 1337ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.IPUT_SHORT 1347ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SGET 1357ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SGET_WIDE 1367ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SGET_OBJECT 1377ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SGET_BOOLEAN 1387ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SGET_BYTE 1397ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SGET_CHAR 1407ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SGET_SHORT 1417ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SPUT 1427ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SPUT_WIDE 1437ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SPUT_OBJECT 1447ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SPUT_BOOLEAN 1457ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SPUT_BYTE 1467ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SPUT_CHAR 1477ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SPUT_SHORT 1487ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INVOKE_VIRTUAL 1497ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INVOKE_SUPER 1507ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INVOKE_DIRECT 1517ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INVOKE_STATIC 1527ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INVOKE_INTERFACE 1537ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.NEG_INT 1547ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.NOT_INT 1557ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.NEG_LONG 1567ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.NOT_LONG 1577ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.NEG_FLOAT 1587ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.NEG_DOUBLE 1597ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INT_TO_LONG 1607ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INT_TO_FLOAT 1617ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INT_TO_DOUBLE 1627ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.LONG_TO_INT 1637ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.LONG_TO_FLOAT 1647ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.LONG_TO_DOUBLE 1657ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.FLOAT_TO_INT 1667ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.FLOAT_TO_LONG 1677ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.FLOAT_TO_DOUBLE 1687ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.DOUBLE_TO_INT 1697ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.DOUBLE_TO_LONG 1707ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.DOUBLE_TO_FLOAT 1717ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INT_TO_BYTE 1727ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INT_TO_CHAR 1737ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.INT_TO_SHORT 1747ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.ADD_INT_2ADDR 1757ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SUB_INT_2ADDR 1767ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MUL_INT_2ADDR 1777ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.DIV_INT_2ADDR 1787ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.REM_INT_2ADDR 1797ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.AND_INT_2ADDR 1807ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.OR_INT_2ADDR 1817ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.XOR_INT_2ADDR 1827ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SHL_INT_2ADDR 1837ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SHR_INT_2ADDR 1847ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.USHR_INT_2ADDR 1857ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.ADD_LONG_2ADDR 1867ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SUB_LONG_2ADDR 1877ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MUL_LONG_2ADDR 1887ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.DIV_LONG_2ADDR 1897ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.REM_LONG_2ADDR 1907ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.AND_LONG_2ADDR 1917ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.OR_LONG_2ADDR 1927ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.XOR_LONG_2ADDR 1937ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SHL_LONG_2ADDR 1947ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SHR_LONG_2ADDR 1957ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.USHR_LONG_2ADDR 1967ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.ADD_FLOAT_2ADDR 1977ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SUB_FLOAT_2ADDR 1987ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MUL_FLOAT_2ADDR 1997ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.DIV_FLOAT_2ADDR 2007ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.REM_FLOAT_2ADDR 2017ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.ADD_DOUBLE_2ADDR 2027ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SUB_DOUBLE_2ADDR 2037ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MUL_DOUBLE_2ADDR 2047ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.DIV_DOUBLE_2ADDR 2057ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.REM_DOUBLE_2ADDR 2067ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.ADD_INT_LIT8 2077ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.RSUB_INT_LIT8 2087ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.MUL_INT_LIT8 2097ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.DIV_INT_LIT8 2107ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.REM_INT_LIT8 2117ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.AND_INT_LIT8 2127ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.OR_INT_LIT8 2137ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.XOR_INT_LIT8 2147ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SHL_INT_LIT8 2157ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.SHR_INT_LIT8 2167ba91291bb6ce64691398a8751656207e8e3e98dDan Bornstein // Opcodes.USHR_INT_LIT8 21712209c24903959d41f887c05e6a04e0b08367463Dan Bornstein // END(first-opcodes) 21812209c24903959d41f887c05e6a04e0b08367463Dan Bornstein 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static { 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: The choices made here are to pick the optimistically 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * smallest Dalvik opcode, and leave it to later processing to 22312209c24903959d41f887c05e6a04e0b08367463Dan Bornstein * pessimize. See the automatically-generated comment above 22412209c24903959d41f887c05e6a04e0b08367463Dan Bornstein * for reference. 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP = new HashMap<Rop, Dop>(400); 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.NOP, Dops.NOP); 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MOVE_INT, Dops.MOVE); 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MOVE_LONG, Dops.MOVE_WIDE); 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MOVE_FLOAT, Dops.MOVE); 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MOVE_DOUBLE, Dops.MOVE_WIDE); 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MOVE_OBJECT, Dops.MOVE_OBJECT); 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MOVE_PARAM_INT, Dops.MOVE); 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MOVE_PARAM_LONG, Dops.MOVE_WIDE); 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MOVE_PARAM_FLOAT, Dops.MOVE); 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MOVE_PARAM_DOUBLE, Dops.MOVE_WIDE); 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MOVE_PARAM_OBJECT, Dops.MOVE_OBJECT); 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: No entry for MOVE_EXCEPTION, since it varies by 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * exception type. (That is, there is no unique instance to 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * add to the map.) 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONST_INT, Dops.CONST_4); 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONST_LONG, Dops.CONST_WIDE_16); 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONST_FLOAT, Dops.CONST_4); 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONST_DOUBLE, Dops.CONST_WIDE_16); 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: No entry for CONST_OBJECT, since it needs to turn 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * into either CONST_STRING or CONST_CLASS. 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: I think the only case of this is for null, and 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * const/4 should cover that. 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONST_OBJECT_NOTHROW, Dops.CONST_4); 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.GOTO, Dops.GOTO); 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_EQZ_INT, Dops.IF_EQZ); 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_NEZ_INT, Dops.IF_NEZ); 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_LTZ_INT, Dops.IF_LTZ); 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_GEZ_INT, Dops.IF_GEZ); 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_LEZ_INT, Dops.IF_LEZ); 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_GTZ_INT, Dops.IF_GTZ); 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_EQZ_OBJECT, Dops.IF_EQZ); 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_NEZ_OBJECT, Dops.IF_NEZ); 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_EQ_INT, Dops.IF_EQ); 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_NE_INT, Dops.IF_NE); 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_LT_INT, Dops.IF_LT); 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_GE_INT, Dops.IF_GE); 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_LE_INT, Dops.IF_LE); 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_GT_INT, Dops.IF_GT); 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_EQ_OBJECT, Dops.IF_EQ); 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.IF_NE_OBJECT, Dops.IF_NE); 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.SWITCH, Dops.SPARSE_SWITCH); 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.ADD_INT, Dops.ADD_INT_2ADDR); 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.ADD_LONG, Dops.ADD_LONG_2ADDR); 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.ADD_FLOAT, Dops.ADD_FLOAT_2ADDR); 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.ADD_DOUBLE, Dops.ADD_DOUBLE_2ADDR); 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.SUB_INT, Dops.SUB_INT_2ADDR); 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.SUB_LONG, Dops.SUB_LONG_2ADDR); 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.SUB_FLOAT, Dops.SUB_FLOAT_2ADDR); 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.SUB_DOUBLE, Dops.SUB_DOUBLE_2ADDR); 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MUL_INT, Dops.MUL_INT_2ADDR); 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MUL_LONG, Dops.MUL_LONG_2ADDR); 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MUL_FLOAT, Dops.MUL_FLOAT_2ADDR); 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MUL_DOUBLE, Dops.MUL_DOUBLE_2ADDR); 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.DIV_INT, Dops.DIV_INT_2ADDR); 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.DIV_LONG, Dops.DIV_LONG_2ADDR); 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.DIV_FLOAT, Dops.DIV_FLOAT_2ADDR); 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.DIV_DOUBLE, Dops.DIV_DOUBLE_2ADDR); 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.REM_INT, Dops.REM_INT_2ADDR); 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.REM_LONG, Dops.REM_LONG_2ADDR); 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.REM_FLOAT, Dops.REM_FLOAT_2ADDR); 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.REM_DOUBLE, Dops.REM_DOUBLE_2ADDR); 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.NEG_INT, Dops.NEG_INT); 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.NEG_LONG, Dops.NEG_LONG); 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.NEG_FLOAT, Dops.NEG_FLOAT); 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.NEG_DOUBLE, Dops.NEG_DOUBLE); 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AND_INT, Dops.AND_INT_2ADDR); 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AND_LONG, Dops.AND_LONG_2ADDR); 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.OR_INT, Dops.OR_INT_2ADDR); 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.OR_LONG, Dops.OR_LONG_2ADDR); 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.XOR_INT, Dops.XOR_INT_2ADDR); 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.XOR_LONG, Dops.XOR_LONG_2ADDR); 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.SHL_INT, Dops.SHL_INT_2ADDR); 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.SHL_LONG, Dops.SHL_LONG_2ADDR); 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.SHR_INT, Dops.SHR_INT_2ADDR); 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.SHR_LONG, Dops.SHR_LONG_2ADDR); 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.USHR_INT, Dops.USHR_INT_2ADDR); 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.USHR_LONG, Dops.USHR_LONG_2ADDR); 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.NOT_INT, Dops.NOT_INT); 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.NOT_LONG, Dops.NOT_LONG); 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.ADD_CONST_INT, Dops.ADD_INT_LIT8); 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Note: No dalvik ops for other types of add_const. 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3214596322b12a72cdeea8deba1242d9b74da5ba12ajeffhao MAP.put(Rops.SUB_CONST_INT, Dops.RSUB_INT_LIT8); 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3234596322b12a72cdeea8deba1242d9b74da5ba12ajeffhao * Note: No dalvik ops for any type of sub_const; instead 3244596322b12a72cdeea8deba1242d9b74da5ba12ajeffhao * there's a *reverse* sub (constant - reg) for ints only. 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MUL_CONST_INT, Dops.MUL_INT_LIT8); 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Note: No dalvik ops for other types of mul_const. 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.DIV_CONST_INT, Dops.DIV_INT_LIT8); 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Note: No dalvik ops for other types of div_const. 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.REM_CONST_INT, Dops.REM_INT_LIT8); 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Note: No dalvik ops for other types of rem_const. 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AND_CONST_INT, Dops.AND_INT_LIT8); 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Note: No dalvik op for and_const_long. 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.OR_CONST_INT, Dops.OR_INT_LIT8); 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Note: No dalvik op for or_const_long. 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.XOR_CONST_INT, Dops.XOR_INT_LIT8); 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Note: No dalvik op for xor_const_long. 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.SHL_CONST_INT, Dops.SHL_INT_LIT8); 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Note: No dalvik op for shl_const_long. 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.SHR_CONST_INT, Dops.SHR_INT_LIT8); 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Note: No dalvik op for shr_const_long. 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.USHR_CONST_INT, Dops.USHR_INT_LIT8); 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Note: No dalvik op for shr_const_long. 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CMPL_LONG, Dops.CMP_LONG); 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CMPL_FLOAT, Dops.CMPL_FLOAT); 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CMPL_DOUBLE, Dops.CMPL_DOUBLE); 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CMPG_FLOAT, Dops.CMPG_FLOAT); 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CMPG_DOUBLE, Dops.CMPG_DOUBLE); 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_L2I, Dops.LONG_TO_INT); 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_F2I, Dops.FLOAT_TO_INT); 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_D2I, Dops.DOUBLE_TO_INT); 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_I2L, Dops.INT_TO_LONG); 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_F2L, Dops.FLOAT_TO_LONG); 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_D2L, Dops.DOUBLE_TO_LONG); 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_I2F, Dops.INT_TO_FLOAT); 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_L2F, Dops.LONG_TO_FLOAT); 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_D2F, Dops.DOUBLE_TO_FLOAT); 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_I2D, Dops.INT_TO_DOUBLE); 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_L2D, Dops.LONG_TO_DOUBLE); 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CONV_F2D, Dops.FLOAT_TO_DOUBLE); 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.TO_BYTE, Dops.INT_TO_BYTE); 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.TO_CHAR, Dops.INT_TO_CHAR); 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.TO_SHORT, Dops.INT_TO_SHORT); 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.RETURN_VOID, Dops.RETURN_VOID); 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.RETURN_INT, Dops.RETURN); 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.RETURN_LONG, Dops.RETURN_WIDE); 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.RETURN_FLOAT, Dops.RETURN); 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.RETURN_DOUBLE, Dops.RETURN_WIDE); 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.RETURN_OBJECT, Dops.RETURN_OBJECT); 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.ARRAY_LENGTH, Dops.ARRAY_LENGTH); 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.THROW, Dops.THROW); 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MONITOR_ENTER, Dops.MONITOR_ENTER); 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.MONITOR_EXIT, Dops.MONITOR_EXIT); 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AGET_INT, Dops.AGET); 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AGET_LONG, Dops.AGET_WIDE); 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AGET_FLOAT, Dops.AGET); 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AGET_DOUBLE, Dops.AGET_WIDE); 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AGET_OBJECT, Dops.AGET_OBJECT); 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AGET_BOOLEAN, Dops.AGET_BOOLEAN); 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AGET_BYTE, Dops.AGET_BYTE); 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AGET_CHAR, Dops.AGET_CHAR); 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.AGET_SHORT, Dops.AGET_SHORT); 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.APUT_INT, Dops.APUT); 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.APUT_LONG, Dops.APUT_WIDE); 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.APUT_FLOAT, Dops.APUT); 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.APUT_DOUBLE, Dops.APUT_WIDE); 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.APUT_OBJECT, Dops.APUT_OBJECT); 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.APUT_BOOLEAN, Dops.APUT_BOOLEAN); 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.APUT_BYTE, Dops.APUT_BYTE); 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.APUT_CHAR, Dops.APUT_CHAR); 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.APUT_SHORT, Dops.APUT_SHORT); 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.NEW_INSTANCE, Dops.NEW_INSTANCE); 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.CHECK_CAST, Dops.CHECK_CAST); 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.INSTANCE_OF, Dops.INSTANCE_OF); 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.GET_FIELD_LONG, Dops.IGET_WIDE); 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.GET_FIELD_FLOAT, Dops.IGET); 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.GET_FIELD_DOUBLE, Dops.IGET_WIDE); 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.GET_FIELD_OBJECT, Dops.IGET_OBJECT); 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: No map entries for get_field_* for non-long integral types, 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * since they need to be handled specially (see dopFor() below). 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.GET_STATIC_LONG, Dops.SGET_WIDE); 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.GET_STATIC_FLOAT, Dops.SGET); 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.GET_STATIC_DOUBLE, Dops.SGET_WIDE); 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.GET_STATIC_OBJECT, Dops.SGET_OBJECT); 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: No map entries for get_static* for non-long integral types, 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * since they need to be handled specially (see dopFor() below). 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.PUT_FIELD_LONG, Dops.IPUT_WIDE); 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.PUT_FIELD_FLOAT, Dops.IPUT); 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.PUT_FIELD_DOUBLE, Dops.IPUT_WIDE); 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.PUT_FIELD_OBJECT, Dops.IPUT_OBJECT); 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: No map entries for put_field_* for non-long integral types, 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * since they need to be handled specially (see dopFor() below). 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.PUT_STATIC_LONG, Dops.SPUT_WIDE); 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.PUT_STATIC_FLOAT, Dops.SPUT); 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.PUT_STATIC_DOUBLE, Dops.SPUT_WIDE); 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MAP.put(Rops.PUT_STATIC_OBJECT, Dops.SPUT_OBJECT); 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: No map entries for put_static* for non-long integral types, 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * since they need to be handled specially (see dopFor() below). 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: No map entries for invoke*, new_array, and 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * filled_new_array, since they need to be handled specially 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (see dopFor() below). 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the dalvik opcode appropriate for the given register-based 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instruction. 452de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 45399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project * @param insn {@code non-null;} the original instruction 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the corresponding dalvik opcode; one of the constants in 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link Dops} 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static Dop dopFor(Insn insn) { 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Rop rop = insn.getOpcode(); 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * First, just try looking up the rop in the MAP of easy 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * cases. 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dop result = MAP.get(rop); 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (result != null) { 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * There was no easy case for the rop, so look up the opcode, and 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * do something special for each: 472de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The move_exception, new_array, filled_new_array, and 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * invoke* opcodes won't be found in MAP, since they'll each 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * have different source and/or result register types / lists. 476de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The get* and put* opcodes for (non-long) integral types 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * aren't in the map, since the type signatures aren't 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sufficient to distinguish between the types (the salient 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * source or result will always be just "int"). 481de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro * 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * And const instruction need to distinguish between strings and 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * classes. 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project switch (rop.getOpcode()) { 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.MOVE_EXCEPTION: return Dops.MOVE_EXCEPTION; 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.INVOKE_STATIC: return Dops.INVOKE_STATIC; 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.INVOKE_VIRTUAL: return Dops.INVOKE_VIRTUAL; 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.INVOKE_SUPER: return Dops.INVOKE_SUPER; 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.INVOKE_DIRECT: return Dops.INVOKE_DIRECT; 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.INVOKE_INTERFACE: return Dops.INVOKE_INTERFACE; 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.NEW_ARRAY: return Dops.NEW_ARRAY; 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.FILLED_NEW_ARRAY: return Dops.FILLED_NEW_ARRAY; 495de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro case RegOps.FILL_ARRAY_DATA: return Dops.FILL_ARRAY_DATA; 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.MOVE_RESULT: { 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RegisterSpec resultReg = insn.getResult(); 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (resultReg == null) { 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Dops.NOP; 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project switch (resultReg.getBasicType()) { 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_INT: 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_FLOAT: 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_BOOLEAN: 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_BYTE: 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_CHAR: 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_SHORT: 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Dops.MOVE_RESULT; 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_LONG: 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_DOUBLE: 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Dops.MOVE_RESULT_WIDE; 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_OBJECT: 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Dops.MOVE_RESULT_OBJECT; 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project default: { 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new RuntimeException("Unexpected basic type"); 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.GET_FIELD: { 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CstFieldRef ref = 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int basicType = ref.getBasicType(); 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project switch (basicType) { 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_BOOLEAN: return Dops.IGET_BOOLEAN; 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_BYTE: return Dops.IGET_BYTE; 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_CHAR: return Dops.IGET_CHAR; 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_SHORT: return Dops.IGET_SHORT; 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_INT: return Dops.IGET; 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.PUT_FIELD: { 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CstFieldRef ref = 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int basicType = ref.getBasicType(); 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project switch (basicType) { 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_BOOLEAN: return Dops.IPUT_BOOLEAN; 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_BYTE: return Dops.IPUT_BYTE; 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_CHAR: return Dops.IPUT_CHAR; 543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_SHORT: return Dops.IPUT_SHORT; 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_INT: return Dops.IPUT; 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.GET_STATIC: { 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CstFieldRef ref = 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); 551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int basicType = ref.getBasicType(); 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project switch (basicType) { 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_BOOLEAN: return Dops.SGET_BOOLEAN; 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_BYTE: return Dops.SGET_BYTE; 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_CHAR: return Dops.SGET_CHAR; 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_SHORT: return Dops.SGET_SHORT; 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_INT: return Dops.SGET; 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.PUT_STATIC: { 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CstFieldRef ref = 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (CstFieldRef) ((ThrowingCstInsn) insn).getConstant(); 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int basicType = ref.getBasicType(); 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project switch (basicType) { 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_BOOLEAN: return Dops.SPUT_BOOLEAN; 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_BYTE: return Dops.SPUT_BYTE; 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_CHAR: return Dops.SPUT_CHAR; 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_SHORT: return Dops.SPUT_SHORT; 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case Type.BT_INT: return Dops.SPUT; 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project case RegOps.CONST: { 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Constant cst = ((ThrowingCstInsn) insn).getConstant(); 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (cst instanceof CstType) { 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Dops.CONST_CLASS; 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (cst instanceof CstString) { 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Dops.CONST_STRING; 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new RuntimeException("unknown rop: " + rop); 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 588