Mercurial > paraspace
changeset 78:9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Tue, 19 Jul 2011 18:01:11 +0800 |
parents | 998f2076d0bb |
children | 9c7bfb13b262 |
files | paraspace/dalvik_opcodes.py |
diffstat | 1 files changed, 423 insertions(+), 412 deletions(-) [+] |
line wrap: on
line diff
--- a/paraspace/dalvik_opcodes.py Tue Jul 19 12:41:09 2011 +0800 +++ b/paraspace/dalvik_opcodes.py Tue Jul 19 18:01:11 2011 +0800 @@ -1,269 +1,277 @@ -OP_NOP = 0x00 -OP_MOVE = 0x01 -OP_MOVE_FROM16 = 0x02 -OP_MOVE_16 = 0x03 -OP_MOVE_WIDE = 0x04 -OP_MOVE_WIDE_FROM16 = 0x05 -OP_MOVE_WIDE_16 = 0x06 -OP_MOVE_OBJECT = 0x07 -OP_MOVE_OBJECT_FROM16 = 0x08 -OP_MOVE_OBJECT_16 = 0x09 -OP_MOVE_RESULT = 0x0a -OP_MOVE_RESULT_WIDE = 0x0b -OP_MOVE_RESULT_OBJECT = 0x0c -OP_MOVE_EXCEPTION = 0x0d -OP_RETURN_VOID = 0x0e -OP_RETURN = 0x0f -OP_RETURN_WIDE = 0x10 -OP_RETURN_OBJECT = 0x11 -OP_CONST_4 = 0x12 -OP_CONST_16 = 0x13 -OP_CONST = 0x14 -OP_CONST_HIGH16 = 0x15 -OP_CONST_WIDE_16 = 0x16 -OP_CONST_WIDE_32 = 0x17 -OP_CONST_WIDE = 0x18 -OP_CONST_WIDE_HIGH16 = 0x19 -OP_CONST_STRING = 0x1a -OP_CONST_STRING_JUMBO = 0x1b -OP_CONST_CLASS = 0x1c -OP_MONITOR_ENTER = 0x1d -OP_MONITOR_EXIT = 0x1e -OP_CHECK_CAST = 0x1f -OP_INSTANCE_OF = 0x20 -OP_ARRAY_LENGTH = 0x21 -OP_NEW_INSTANCE = 0x22 -OP_NEW_ARRAY = 0x23 -OP_FILLED_NEW_ARRAY = 0x24 -OP_FILLED_NEW_ARRAY_RANGE = 0x25 -OP_FILL_ARRAY_DATA = 0x26 -OP_THROW = 0x27 -OP_GOTO = 0x28 -OP_GOTO_16 = 0x29 -OP_GOTO_32 = 0x2a -OP_PACKED_SWITCH = 0x2b -OP_SPARSE_SWITCH = 0x2c -OP_CMPL_FLOAT = 0x2d -OP_CMPG_FLOAT = 0x2e -OP_CMPL_DOUBLE = 0x2f -OP_CMPG_DOUBLE = 0x30 -OP_CMP_LONG = 0x31 -OP_IF_EQ = 0x32 -OP_IF_NE = 0x33 -OP_IF_LT = 0x34 -OP_IF_GE = 0x35 -OP_IF_GT = 0x36 -OP_IF_LE = 0x37 -OP_IF_EQZ = 0x38 -OP_IF_NEZ = 0x39 -OP_IF_LTZ = 0x3a -OP_IF_GEZ = 0x3b -OP_IF_GTZ = 0x3c -OP_IF_LEZ = 0x3d -OP_UNUSED_3E = 0x3e -OP_UNUSED_3F = 0x3f -OP_UNUSED_40 = 0x40 -OP_UNUSED_41 = 0x41 -OP_UNUSED_42 = 0x42 -OP_UNUSED_43 = 0x43 -OP_AGET = 0x44 -OP_AGET_WIDE = 0x45 -OP_AGET_OBJECT = 0x46 -OP_AGET_BOOLEAN = 0x47 -OP_AGET_BYTE = 0x48 -OP_AGET_CHAR = 0x49 -OP_AGET_SHORT = 0x4a -OP_APUT = 0x4b -OP_APUT_WIDE = 0x4c -OP_APUT_OBJECT = 0x4d -OP_APUT_BOOLEAN = 0x4e -OP_APUT_BYTE = 0x4f -OP_APUT_CHAR = 0x50 -OP_APUT_SHORT = 0x51 -OP_IGET = 0x52 -OP_IGET_WIDE = 0x53 -OP_IGET_OBJECT = 0x54 -OP_IGET_BOOLEAN = 0x55 -OP_IGET_BYTE = 0x56 -OP_IGET_CHAR = 0x57 -OP_IGET_SHORT = 0x58 -OP_IPUT = 0x59 -OP_IPUT_WIDE = 0x5a -OP_IPUT_OBJECT = 0x5b -OP_IPUT_BOOLEAN = 0x5c -OP_IPUT_BYTE = 0x5d -OP_IPUT_CHAR = 0x5e -OP_IPUT_SHORT = 0x5f -OP_SGET = 0x60 -OP_SGET_WIDE = 0x61 -OP_SGET_OBJECT = 0x62 -OP_SGET_BOOLEAN = 0x63 -OP_SGET_BYTE = 0x64 -OP_SGET_CHAR = 0x65 -OP_SGET_SHORT = 0x66 -OP_SPUT = 0x67 -OP_SPUT_WIDE = 0x68 -OP_SPUT_OBJECT = 0x69 -OP_SPUT_BOOLEAN = 0x6a -OP_SPUT_BYTE = 0x6b -OP_SPUT_CHAR = 0x6c -OP_SPUT_SHORT = 0x6d -OP_INVOKE_VIRTUAL = 0x6e -OP_INVOKE_SUPER = 0x6f -OP_INVOKE_DIRECT = 0x70 -OP_INVOKE_STATIC = 0x71 -OP_INVOKE_INTERFACE = 0x72 -OP_UNUSED_73 = 0x73 -OP_INVOKE_VIRTUAL_RANGE = 0x74 -OP_INVOKE_SUPER_RANGE = 0x75 -OP_INVOKE_DIRECT_RANGE = 0x76 -OP_INVOKE_STATIC_RANGE = 0x77 -OP_INVOKE_INTERFACE_RANGE = 0x78 -OP_UNUSED_79 = 0x79 -OP_UNUSED_7A = 0x7a -OP_NEG_INT = 0x7b -OP_NOT_INT = 0x7c -OP_NEG_LONG = 0x7d -OP_NOT_LONG = 0x7e -OP_NEG_FLOAT = 0x7f -OP_NEG_DOUBLE = 0x80 -OP_INT_TO_LONG = 0x81 -OP_INT_TO_FLOAT = 0x82 -OP_INT_TO_DOUBLE = 0x83 -OP_LONG_TO_INT = 0x84 -OP_LONG_TO_FLOAT = 0x85 -OP_LONG_TO_DOUBLE = 0x86 -OP_FLOAT_TO_INT = 0x87 -OP_FLOAT_TO_LONG = 0x88 -OP_FLOAT_TO_DOUBLE = 0x89 -OP_DOUBLE_TO_INT = 0x8a -OP_DOUBLE_TO_LONG = 0x8b -OP_DOUBLE_TO_FLOAT = 0x8c -OP_INT_TO_BYTE = 0x8d -OP_INT_TO_CHAR = 0x8e -OP_INT_TO_SHORT = 0x8f -OP_ADD_INT = 0x90 -OP_SUB_INT = 0x91 -OP_MUL_INT = 0x92 -OP_DIV_INT = 0x93 -OP_REM_INT = 0x94 -OP_AND_INT = 0x95 -OP_OR_INT = 0x96 -OP_XOR_INT = 0x97 -OP_SHL_INT = 0x98 -OP_SHR_INT = 0x99 -OP_USHR_INT = 0x9a -OP_ADD_LONG = 0x9b -OP_SUB_LONG = 0x9c -OP_MUL_LONG = 0x9d -OP_DIV_LONG = 0x9e -OP_REM_LONG = 0x9f -OP_AND_LONG = 0xa0 -OP_OR_LONG = 0xa1 -OP_XOR_LONG = 0xa2 -OP_SHL_LONG = 0xa3 -OP_SHR_LONG = 0xa4 -OP_USHR_LONG = 0xa5 -OP_ADD_FLOAT = 0xa6 -OP_SUB_FLOAT = 0xa7 -OP_MUL_FLOAT = 0xa8 -OP_DIV_FLOAT = 0xa9 -OP_REM_FLOAT = 0xaa -OP_ADD_DOUBLE = 0xab -OP_SUB_DOUBLE = 0xac -OP_MUL_DOUBLE = 0xad -OP_DIV_DOUBLE = 0xae -OP_REM_DOUBLE = 0xaf -OP_ADD_INT_2ADDR = 0xb0 -OP_SUB_INT_2ADDR = 0xb1 -OP_MUL_INT_2ADDR = 0xb2 -OP_DIV_INT_2ADDR = 0xb3 -OP_REM_INT_2ADDR = 0xb4 -OP_AND_INT_2ADDR = 0xb5 -OP_OR_INT_2ADDR = 0xb6 -OP_XOR_INT_2ADDR = 0xb7 -OP_SHL_INT_2ADDR = 0xb8 -OP_SHR_INT_2ADDR = 0xb9 -OP_USHR_INT_2ADDR = 0xba -OP_ADD_LONG_2ADDR = 0xbb -OP_SUB_LONG_2ADDR = 0xbc -OP_MUL_LONG_2ADDR = 0xbd -OP_DIV_LONG_2ADDR = 0xbe -OP_REM_LONG_2ADDR = 0xbf -OP_AND_LONG_2ADDR = 0xc0 -OP_OR_LONG_2ADDR = 0xc1 -OP_XOR_LONG_2ADDR = 0xc2 -OP_SHL_LONG_2ADDR = 0xc3 -OP_SHR_LONG_2ADDR = 0xc4 -OP_USHR_LONG_2ADDR = 0xc5 -OP_ADD_FLOAT_2ADDR = 0xc6 -OP_SUB_FLOAT_2ADDR = 0xc7 -OP_MUL_FLOAT_2ADDR = 0xc8 -OP_DIV_FLOAT_2ADDR = 0xc9 -OP_REM_FLOAT_2ADDR = 0xca -OP_ADD_DOUBLE_2ADDR = 0xcb -OP_SUB_DOUBLE_2ADDR = 0xcc -OP_MUL_DOUBLE_2ADDR = 0xcd -OP_DIV_DOUBLE_2ADDR = 0xce -OP_REM_DOUBLE_2ADDR = 0xcf -OP_ADD_INT_LIT16 = 0xd0 -OP_RSUB_INT = 0xd1 -OP_MUL_INT_LIT16 = 0xd2 -OP_DIV_INT_LIT16 = 0xd3 -OP_REM_INT_LIT16 = 0xd4 -OP_AND_INT_LIT16 = 0xd5 -OP_OR_INT_LIT16 = 0xd6 -OP_XOR_INT_LIT16 = 0xd7 -OP_ADD_INT_LIT8 = 0xd8 -OP_RSUB_INT_LIT8 = 0xd9 -OP_MUL_INT_LIT8 = 0xda -OP_DIV_INT_LIT8 = 0xdb -OP_REM_INT_LIT8 = 0xdc -OP_AND_INT_LIT8 = 0xdd -OP_OR_INT_LIT8 = 0xde -OP_XOR_INT_LIT8 = 0xdf -OP_SHL_INT_LIT8 = 0xe0 -OP_SHR_INT_LIT8 = 0xe1 -OP_USHR_INT_LIT8 = 0xe2 -OP_UNUSED_E3 = 0xe3 -OP_UNUSED_E4 = 0xe4 -OP_UNUSED_E5 = 0xe5 -OP_UNUSED_E6 = 0xe6 -OP_UNUSED_E7 = 0xe7 -OP_UNUSED_E8 = 0xe8 -OP_UNUSED_E9 = 0xe9 -OP_UNUSED_EA = 0xea -OP_UNUSED_EB = 0xeb -OP_UNUSED_EC = 0xec -OP_UNUSED_ED = 0xed -OP_EXECUTE_INLINE = 0xee -OP_UNUSED_EF = 0xef -OP_INVOKE_DIRECT_EMPTY = 0xf0 -OP_UNUSED_F1 = 0xf1 -OP_IGET_QUICK = 0xf2 -OP_IGET_WIDE_QUICK = 0xf3 -OP_IGET_OBJECT_QUICK = 0xf4 -OP_IPUT_QUICK = 0xf5 -OP_IPUT_WIDE_QUICK = 0xf6 -OP_IPUT_OBJECT_QUICK = 0xf7 -OP_INVOKE_VIRTUAL_QUICK = 0xf8 -OP_INVOKE_VIRTUAL_QUICK_RANGE = 0xf9 -OP_INVOKE_SUPER_QUICK = 0xfa -OP_INVOKE_SUPER_QUICK_RANGE = 0xfb -OP_UNUSED_FC = 0xfc -OP_UNUSED_FD = 0xfd -OP_UNUSED_FE = 0xfe -OP_UNUSED_FF = 0xff +## \file +# Define constants about opcodes of Dalvik. Constants are opcodes, +# names, formats, and maps. +# -_g = dict(globals()) -opcode_names = sorted([name for name in _g if name.startswith('OP_')], - key=lambda name: _g[name]) -name_2_opcodes = dict([(name, code) for name, code in _g.items()]) -del _g +class all_opcodes(object): + OP_NOP = 0x00 + OP_MOVE = 0x01 + OP_MOVE_FROM16 = 0x02 + OP_MOVE_16 = 0x03 + OP_MOVE_WIDE = 0x04 + OP_MOVE_WIDE_FROM16 = 0x05 + OP_MOVE_WIDE_16 = 0x06 + OP_MOVE_OBJECT = 0x07 + OP_MOVE_OBJECT_FROM16 = 0x08 + OP_MOVE_OBJECT_16 = 0x09 + OP_MOVE_RESULT = 0x0a + OP_MOVE_RESULT_WIDE = 0x0b + OP_MOVE_RESULT_OBJECT = 0x0c + OP_MOVE_EXCEPTION = 0x0d + OP_RETURN_VOID = 0x0e + OP_RETURN = 0x0f + OP_RETURN_WIDE = 0x10 + OP_RETURN_OBJECT = 0x11 + OP_CONST_4 = 0x12 + OP_CONST_16 = 0x13 + OP_CONST = 0x14 + OP_CONST_HIGH16 = 0x15 + OP_CONST_WIDE_16 = 0x16 + OP_CONST_WIDE_32 = 0x17 + OP_CONST_WIDE = 0x18 + OP_CONST_WIDE_HIGH16 = 0x19 + OP_CONST_STRING = 0x1a + OP_CONST_STRING_JUMBO = 0x1b + OP_CONST_CLASS = 0x1c + OP_MONITOR_ENTER = 0x1d + OP_MONITOR_EXIT = 0x1e + OP_CHECK_CAST = 0x1f + OP_INSTANCE_OF = 0x20 + OP_ARRAY_LENGTH = 0x21 + OP_NEW_INSTANCE = 0x22 + OP_NEW_ARRAY = 0x23 + OP_FILLED_NEW_ARRAY = 0x24 + OP_FILLED_NEW_ARRAY_RANGE = 0x25 + OP_FILL_ARRAY_DATA = 0x26 + OP_THROW = 0x27 + OP_GOTO = 0x28 + OP_GOTO_16 = 0x29 + OP_GOTO_32 = 0x2a + OP_PACKED_SWITCH = 0x2b + OP_SPARSE_SWITCH = 0x2c + OP_CMPL_FLOAT = 0x2d + OP_CMPG_FLOAT = 0x2e + OP_CMPL_DOUBLE = 0x2f + OP_CMPG_DOUBLE = 0x30 + OP_CMP_LONG = 0x31 + OP_IF_EQ = 0x32 + OP_IF_NE = 0x33 + OP_IF_LT = 0x34 + OP_IF_GE = 0x35 + OP_IF_GT = 0x36 + OP_IF_LE = 0x37 + OP_IF_EQZ = 0x38 + OP_IF_NEZ = 0x39 + OP_IF_LTZ = 0x3a + OP_IF_GEZ = 0x3b + OP_IF_GTZ = 0x3c + OP_IF_LEZ = 0x3d + OP_UNUSED_3E = 0x3e + OP_UNUSED_3F = 0x3f + OP_UNUSED_40 = 0x40 + OP_UNUSED_41 = 0x41 + OP_UNUSED_42 = 0x42 + OP_UNUSED_43 = 0x43 + OP_AGET = 0x44 + OP_AGET_WIDE = 0x45 + OP_AGET_OBJECT = 0x46 + OP_AGET_BOOLEAN = 0x47 + OP_AGET_BYTE = 0x48 + OP_AGET_CHAR = 0x49 + OP_AGET_SHORT = 0x4a + OP_APUT = 0x4b + OP_APUT_WIDE = 0x4c + OP_APUT_OBJECT = 0x4d + OP_APUT_BOOLEAN = 0x4e + OP_APUT_BYTE = 0x4f + OP_APUT_CHAR = 0x50 + OP_APUT_SHORT = 0x51 + OP_IGET = 0x52 + OP_IGET_WIDE = 0x53 + OP_IGET_OBJECT = 0x54 + OP_IGET_BOOLEAN = 0x55 + OP_IGET_BYTE = 0x56 + OP_IGET_CHAR = 0x57 + OP_IGET_SHORT = 0x58 + OP_IPUT = 0x59 + OP_IPUT_WIDE = 0x5a + OP_IPUT_OBJECT = 0x5b + OP_IPUT_BOOLEAN = 0x5c + OP_IPUT_BYTE = 0x5d + OP_IPUT_CHAR = 0x5e + OP_IPUT_SHORT = 0x5f + OP_SGET = 0x60 + OP_SGET_WIDE = 0x61 + OP_SGET_OBJECT = 0x62 + OP_SGET_BOOLEAN = 0x63 + OP_SGET_BYTE = 0x64 + OP_SGET_CHAR = 0x65 + OP_SGET_SHORT = 0x66 + OP_SPUT = 0x67 + OP_SPUT_WIDE = 0x68 + OP_SPUT_OBJECT = 0x69 + OP_SPUT_BOOLEAN = 0x6a + OP_SPUT_BYTE = 0x6b + OP_SPUT_CHAR = 0x6c + OP_SPUT_SHORT = 0x6d + OP_INVOKE_VIRTUAL = 0x6e + OP_INVOKE_SUPER = 0x6f + OP_INVOKE_DIRECT = 0x70 + OP_INVOKE_STATIC = 0x71 + OP_INVOKE_INTERFACE = 0x72 + OP_UNUSED_73 = 0x73 + OP_INVOKE_VIRTUAL_RANGE = 0x74 + OP_INVOKE_SUPER_RANGE = 0x75 + OP_INVOKE_DIRECT_RANGE = 0x76 + OP_INVOKE_STATIC_RANGE = 0x77 + OP_INVOKE_INTERFACE_RANGE = 0x78 + OP_UNUSED_79 = 0x79 + OP_UNUSED_7A = 0x7a + OP_NEG_INT = 0x7b + OP_NOT_INT = 0x7c + OP_NEG_LONG = 0x7d + OP_NOT_LONG = 0x7e + OP_NEG_FLOAT = 0x7f + OP_NEG_DOUBLE = 0x80 + OP_INT_TO_LONG = 0x81 + OP_INT_TO_FLOAT = 0x82 + OP_INT_TO_DOUBLE = 0x83 + OP_LONG_TO_INT = 0x84 + OP_LONG_TO_FLOAT = 0x85 + OP_LONG_TO_DOUBLE = 0x86 + OP_FLOAT_TO_INT = 0x87 + OP_FLOAT_TO_LONG = 0x88 + OP_FLOAT_TO_DOUBLE = 0x89 + OP_DOUBLE_TO_INT = 0x8a + OP_DOUBLE_TO_LONG = 0x8b + OP_DOUBLE_TO_FLOAT = 0x8c + OP_INT_TO_BYTE = 0x8d + OP_INT_TO_CHAR = 0x8e + OP_INT_TO_SHORT = 0x8f + OP_ADD_INT = 0x90 + OP_SUB_INT = 0x91 + OP_MUL_INT = 0x92 + OP_DIV_INT = 0x93 + OP_REM_INT = 0x94 + OP_AND_INT = 0x95 + OP_OR_INT = 0x96 + OP_XOR_INT = 0x97 + OP_SHL_INT = 0x98 + OP_SHR_INT = 0x99 + OP_USHR_INT = 0x9a + OP_ADD_LONG = 0x9b + OP_SUB_LONG = 0x9c + OP_MUL_LONG = 0x9d + OP_DIV_LONG = 0x9e + OP_REM_LONG = 0x9f + OP_AND_LONG = 0xa0 + OP_OR_LONG = 0xa1 + OP_XOR_LONG = 0xa2 + OP_SHL_LONG = 0xa3 + OP_SHR_LONG = 0xa4 + OP_USHR_LONG = 0xa5 + OP_ADD_FLOAT = 0xa6 + OP_SUB_FLOAT = 0xa7 + OP_MUL_FLOAT = 0xa8 + OP_DIV_FLOAT = 0xa9 + OP_REM_FLOAT = 0xaa + OP_ADD_DOUBLE = 0xab + OP_SUB_DOUBLE = 0xac + OP_MUL_DOUBLE = 0xad + OP_DIV_DOUBLE = 0xae + OP_REM_DOUBLE = 0xaf + OP_ADD_INT_2ADDR = 0xb0 + OP_SUB_INT_2ADDR = 0xb1 + OP_MUL_INT_2ADDR = 0xb2 + OP_DIV_INT_2ADDR = 0xb3 + OP_REM_INT_2ADDR = 0xb4 + OP_AND_INT_2ADDR = 0xb5 + OP_OR_INT_2ADDR = 0xb6 + OP_XOR_INT_2ADDR = 0xb7 + OP_SHL_INT_2ADDR = 0xb8 + OP_SHR_INT_2ADDR = 0xb9 + OP_USHR_INT_2ADDR = 0xba + OP_ADD_LONG_2ADDR = 0xbb + OP_SUB_LONG_2ADDR = 0xbc + OP_MUL_LONG_2ADDR = 0xbd + OP_DIV_LONG_2ADDR = 0xbe + OP_REM_LONG_2ADDR = 0xbf + OP_AND_LONG_2ADDR = 0xc0 + OP_OR_LONG_2ADDR = 0xc1 + OP_XOR_LONG_2ADDR = 0xc2 + OP_SHL_LONG_2ADDR = 0xc3 + OP_SHR_LONG_2ADDR = 0xc4 + OP_USHR_LONG_2ADDR = 0xc5 + OP_ADD_FLOAT_2ADDR = 0xc6 + OP_SUB_FLOAT_2ADDR = 0xc7 + OP_MUL_FLOAT_2ADDR = 0xc8 + OP_DIV_FLOAT_2ADDR = 0xc9 + OP_REM_FLOAT_2ADDR = 0xca + OP_ADD_DOUBLE_2ADDR = 0xcb + OP_SUB_DOUBLE_2ADDR = 0xcc + OP_MUL_DOUBLE_2ADDR = 0xcd + OP_DIV_DOUBLE_2ADDR = 0xce + OP_REM_DOUBLE_2ADDR = 0xcf + OP_ADD_INT_LIT16 = 0xd0 + OP_RSUB_INT = 0xd1 + OP_MUL_INT_LIT16 = 0xd2 + OP_DIV_INT_LIT16 = 0xd3 + OP_REM_INT_LIT16 = 0xd4 + OP_AND_INT_LIT16 = 0xd5 + OP_OR_INT_LIT16 = 0xd6 + OP_XOR_INT_LIT16 = 0xd7 + OP_ADD_INT_LIT8 = 0xd8 + OP_RSUB_INT_LIT8 = 0xd9 + OP_MUL_INT_LIT8 = 0xda + OP_DIV_INT_LIT8 = 0xdb + OP_REM_INT_LIT8 = 0xdc + OP_AND_INT_LIT8 = 0xdd + OP_OR_INT_LIT8 = 0xde + OP_XOR_INT_LIT8 = 0xdf + OP_SHL_INT_LIT8 = 0xe0 + OP_SHR_INT_LIT8 = 0xe1 + OP_USHR_INT_LIT8 = 0xe2 + OP_UNUSED_E3 = 0xe3 + OP_UNUSED_E4 = 0xe4 + OP_UNUSED_E5 = 0xe5 + OP_UNUSED_E6 = 0xe6 + OP_UNUSED_E7 = 0xe7 + OP_UNUSED_E8 = 0xe8 + OP_UNUSED_E9 = 0xe9 + OP_UNUSED_EA = 0xea + OP_UNUSED_EB = 0xeb + OP_UNUSED_EC = 0xec + OP_UNUSED_ED = 0xed + OP_EXECUTE_INLINE = 0xee + OP_UNUSED_EF = 0xef + OP_INVOKE_DIRECT_EMPTY = 0xf0 + OP_UNUSED_F1 = 0xf1 + OP_IGET_QUICK = 0xf2 + OP_IGET_WIDE_QUICK = 0xf3 + OP_IGET_OBJECT_QUICK = 0xf4 + OP_IPUT_QUICK = 0xf5 + OP_IPUT_WIDE_QUICK = 0xf6 + OP_IPUT_OBJECT_QUICK = 0xf7 + OP_INVOKE_VIRTUAL_QUICK = 0xf8 + OP_INVOKE_VIRTUAL_QUICK_RANGE = 0xf9 + OP_INVOKE_SUPER_QUICK = 0xfa + OP_INVOKE_SUPER_QUICK_RANGE = 0xfb + OP_UNUSED_FC = 0xfc + OP_UNUSED_FD = 0xfd + OP_UNUSED_FE = 0xfe + OP_UNUSED_FF = 0xff + pass + +opcode_names = sorted([name + for name in all_opcodes.__dict__.keys() + if name.startswith('OP_')], + key=lambda name: all_opcodes.__dict__[name]) +name_2_opcodes = dict([(name, code) + for name, code in all_opcodes.__dict__.items()]) opcode_widths = [0] * 256 -w1_ops = '''OP_NOP +_w1_ops = '''OP_NOP OP_MOVE OP_MOVE_WIDE OP_MOVE_OBJECT @@ -335,13 +343,13 @@ OP_DIV_DOUBLE_2ADDR OP_REM_DOUBLE_2ADDR'''.split() -for name in w1_ops: - opcode = name_2_opcodes[name] - opcode_widths[opcode] = 1 +for name in _w1_ops: + _opcode = name_2_opcodes[name] + opcode_widths[_opcode] = 1 pass -w2_ops = '''OP_MOVE_FROM16 +_w2_ops = '''OP_MOVE_FROM16 OP_MOVE_WIDE_FROM16 OP_MOVE_OBJECT_FROM16 OP_CONST_16 @@ -466,13 +474,13 @@ OP_SHR_INT_LIT8 OP_USHR_INT_LIT8'''.split() -for name in w2_ops: - opcode = name_2_opcodes[name] - opcode_widths[opcode] = 2 +for name in _w2_ops: + _opcode = name_2_opcodes[name] + opcode_widths[_opcode] = 2 pass -w3_ops = '''OP_MOVE_16 +_w3_ops = '''OP_MOVE_16 OP_MOVE_WIDE_16 OP_MOVE_OBJECT_16 OP_CONST @@ -495,43 +503,43 @@ OP_INVOKE_STATIC_RANGE OP_INVOKE_INTERFACE_RANGE'''.split() -for name in w3_ops: - opcode = name_2_opcodes[name] - opcode_widths[opcode] = 3 +for name in _w3_ops: + _opcode = name_2_opcodes[name] + opcode_widths[_opcode] = 3 pass -opcode_widths[OP_CONST_WIDE] = 5 +opcode_widths[all_opcodes.OP_CONST_WIDE] = 5 # # Optimized instructions. We return negative size values for these # to distinguish them. # -w_2_ops = '''OP_IGET_QUICK +_w_2_ops = '''OP_IGET_QUICK OP_IGET_WIDE_QUICK OP_IGET_OBJECT_QUICK OP_IPUT_QUICK OP_IPUT_WIDE_QUICK OP_IPUT_OBJECT_QUICK'''.split() -for name in w_2_ops: - opcode = name_2_opcodes[name] - opcode_widths[opcode] = -2 +for name in _w_2_ops: + _opcode = name_2_opcodes[name] + opcode_widths[_opcode] = -2 pass -w_3_ops = '''OP_INVOKE_VIRTUAL_QUICK +_w_3_ops = '''OP_INVOKE_VIRTUAL_QUICK OP_INVOKE_VIRTUAL_QUICK_RANGE OP_INVOKE_SUPER_QUICK OP_INVOKE_SUPER_QUICK_RANGE OP_EXECUTE_INLINE OP_INVOKE_DIRECT_EMPTY'''.split() -for name in w_3_ops: - opcode = name_2_opcodes[name] - opcode_widths[opcode] = -3 +for name in _w_3_ops: + _opcode = name_2_opcodes[name] + opcode_widths[_opcode] = -3 pass -w0_ops = '''OP_UNUSED_3E +_w0_ops = '''OP_UNUSED_3E OP_UNUSED_3F OP_UNUSED_40 OP_UNUSED_41 @@ -559,37 +567,40 @@ OP_UNUSED_FF'''.split() -kFmtUnknown = 0 -kFmt10x = 1 -kFmt12x = 2 -kFmt11n = 3 -kFmt11x = 4 -kFmt10t = 5 -kFmt20t = 6 -kFmt22x = 7 -kFmt21t = 8 -kFmt21s = 9 -kFmt21h = 10 -kFmt21c = 11 -kFmt23x = 12 -kFmt22b = 13 -kFmt22t = 14 -kFmt22s = 15 -kFmt22c = 16 -kFmt22cs = 17 -kFmt32x = 18 -kFmt30t = 19 -kFmt31t = 20 -kFmt31i = 21 -kFmt31c = 22 -kFmt35c = 23 -kFmt35ms = 24 -kFmt35fs = 25 -kFmt3rc = 26 -kFmt3rms = 27 -kFmt3rfs = 28 -kFmt3inline = 29 -kFmt51l = 30 +class all_opcode_fmts(object): + kFmtUnknown = 0 + kFmt10x = 1 + kFmt12x = 2 + kFmt11n = 3 + kFmt11x = 4 + kFmt10t = 5 + kFmt20t = 6 + kFmt22x = 7 + kFmt21t = 8 + kFmt21s = 9 + kFmt21h = 10 + kFmt21c = 11 + kFmt23x = 12 + kFmt22b = 13 + kFmt22t = 14 + kFmt22s = 15 + kFmt22c = 16 + kFmt22cs = 17 + kFmt32x = 18 + kFmt30t = 19 + kFmt31t = 20 + kFmt31i = 21 + kFmt31c = 22 + kFmt35c = 23 + kFmt35ms = 24 + kFmt35fs = 25 + kFmt3rc = 26 + kFmt3rms = 27 + kFmt3rfs = 28 + kFmt3inline = 29 + kFmt51l = 30 + pass + fmt_names = '''kFmtUnknown kFmt10x @@ -626,28 +637,28 @@ opcode_fmts = [0] * 256 -opcode_fmts[OP_GOTO] = kFmt10t +opcode_fmts[all_opcodes.OP_GOTO] = all_opcode_fmts.kFmt10t -names = '''OP_NOP +_names = '''OP_NOP OP_RETURN_VOID'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt10x +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt10x pass -opcode_fmts[OP_CONST_4] = kFmt11n +opcode_fmts[all_opcodes.OP_CONST_4] = all_opcode_fmts.kFmt11n -names = '''OP_CONST_HIGH16 +_names = '''OP_CONST_HIGH16 OP_CONST_WIDE_HIGH16'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt21h +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt21h pass -names = '''OP_MOVE_RESULT +_names = '''OP_MOVE_RESULT OP_MOVE_RESULT_WIDE OP_MOVE_RESULT_OBJECT OP_MOVE_EXCEPTION @@ -657,13 +668,13 @@ OP_MONITOR_ENTER OP_MONITOR_EXIT OP_THROW'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt11x +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt11x pass -names = '''OP_MOVE +_names = '''OP_MOVE OP_MOVE_WIDE OP_MOVE_OBJECT OP_ARRAY_LENGTH @@ -720,17 +731,17 @@ OP_MUL_DOUBLE_2ADDR OP_DIV_DOUBLE_2ADDR OP_REM_DOUBLE_2ADDR'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt12x +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt12x pass -opcode_fmts[OP_GOTO_16] = kFmt20t -opcode_fmts[OP_GOTO_32] = kFmt30t +opcode_fmts[all_opcodes.OP_GOTO_16] = all_opcode_fmts.kFmt20t +opcode_fmts[all_opcodes.OP_GOTO_32] = all_opcode_fmts.kFmt30t -names = '''OP_CONST_STRING +_names = '''OP_CONST_STRING OP_CONST_CLASS OP_CHECK_CAST OP_NEW_INSTANCE @@ -748,41 +759,41 @@ OP_SPUT_BYTE OP_SPUT_CHAR OP_SPUT_SHORT'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt21c +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt21c pass -names = '''OP_CONST_16 +_names = '''OP_CONST_16 OP_CONST_WIDE_16'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt21s +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt21s pass -names = '''OP_IF_EQZ +_names = '''OP_IF_EQZ OP_IF_NEZ OP_IF_LTZ OP_IF_GEZ OP_IF_GTZ OP_IF_LEZ'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt21t +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt21t pass -names = '''OP_FILL_ARRAY_DATA +_names = '''OP_FILL_ARRAY_DATA OP_PACKED_SWITCH OP_SPARSE_SWITCH'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt31t +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt31t pass -names = '''OP_ADD_INT_LIT8 +_names = '''OP_ADD_INT_LIT8 OP_RSUB_INT_LIT8 OP_MUL_INT_LIT8 OP_DIV_INT_LIT8 @@ -793,13 +804,13 @@ OP_SHL_INT_LIT8 OP_SHR_INT_LIT8 OP_USHR_INT_LIT8'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt22b +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt22b pass -names = '''OP_INSTANCE_OF +_names = '''OP_INSTANCE_OF OP_NEW_ARRAY OP_IGET OP_IGET_WIDE @@ -815,13 +826,13 @@ OP_IPUT_BYTE OP_IPUT_CHAR OP_IPUT_SHORT'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt22c +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt22c pass -names = '''OP_ADD_INT_LIT16 +_names = '''OP_ADD_INT_LIT16 OP_RSUB_INT OP_MUL_INT_LIT16 OP_DIV_INT_LIT16 @@ -829,34 +840,34 @@ OP_AND_INT_LIT16 OP_OR_INT_LIT16 OP_XOR_INT_LIT16'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt22s +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt22s pass -names = '''OP_IF_EQ +_names = '''OP_IF_EQ OP_IF_NE OP_IF_LT OP_IF_GE OP_IF_GT OP_IF_LE'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt22t +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt22t pass -names = '''OP_MOVE_FROM16 +_names = '''OP_MOVE_FROM16 OP_MOVE_WIDE_FROM16 OP_MOVE_OBJECT_FROM16'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt22x +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt22x pass -names = '''OP_CMPL_FLOAT +_names = '''OP_CMPL_FLOAT OP_CMPG_FLOAT OP_CMPL_DOUBLE OP_CMPG_DOUBLE @@ -907,93 +918,93 @@ OP_MUL_DOUBLE OP_DIV_DOUBLE OP_REM_DOUBLE'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt23x +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt23x pass -names = '''OP_CONST +_names = '''OP_CONST OP_CONST_WIDE_32'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt31i +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt31i pass -opcode_fmts[OP_CONST_STRING_JUMBO] = kFmt31c +opcode_fmts[all_opcodes.OP_CONST_STRING_JUMBO] = all_opcode_fmts.kFmt31c -names = '''OP_MOVE_16 +_names = '''OP_MOVE_16 OP_MOVE_WIDE_16 OP_MOVE_OBJECT_16'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt32x +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt32x pass -names = '''OP_FILLED_NEW_ARRAY +_names = '''OP_FILLED_NEW_ARRAY OP_INVOKE_VIRTUAL OP_INVOKE_SUPER OP_INVOKE_DIRECT OP_INVOKE_STATIC OP_INVOKE_INTERFACE'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt35c +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt35c pass -names = '''OP_FILLED_NEW_ARRAY_RANGE +_names = '''OP_FILLED_NEW_ARRAY_RANGE OP_INVOKE_VIRTUAL_RANGE OP_INVOKE_SUPER_RANGE OP_INVOKE_DIRECT_RANGE OP_INVOKE_STATIC_RANGE OP_INVOKE_INTERFACE_RANGE'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt3rc +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt3rc pass -opcode_fmts[OP_CONST_WIDE] = kFmt51l +opcode_fmts[all_opcodes.OP_CONST_WIDE] = all_opcode_fmts.kFmt51l -names = '''OP_IGET_QUICK +_names = '''OP_IGET_QUICK OP_IGET_WIDE_QUICK OP_IGET_OBJECT_QUICK OP_IPUT_QUICK OP_IPUT_WIDE_QUICK OP_IPUT_OBJECT_QUICK'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt22cs +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt22cs pass -names = '''OP_INVOKE_VIRTUAL_QUICK +_names = '''OP_INVOKE_VIRTUAL_QUICK OP_INVOKE_SUPER_QUICK'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt35ms +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt35ms pass -names = '''OP_INVOKE_VIRTUAL_QUICK_RANGE +_names = '''OP_INVOKE_VIRTUAL_QUICK_RANGE OP_INVOKE_SUPER_QUICK_RANGE'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmt3rms +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmt3rms pass -opcode_fmts[OP_EXECUTE_INLINE] = kFmt3inline +opcode_fmts[all_opcodes.OP_EXECUTE_INLINE] = all_opcode_fmts.kFmt3inline -opcode_fmts[OP_INVOKE_DIRECT_EMPTY] = kFmt35c +opcode_fmts[all_opcodes.OP_INVOKE_DIRECT_EMPTY] = all_opcode_fmts.kFmt35c -names = '''OP_UNUSED_3E +_names = '''OP_UNUSED_3E OP_UNUSED_3F OP_UNUSED_40 OP_UNUSED_41 @@ -1019,9 +1030,9 @@ OP_UNUSED_FD OP_UNUSED_FE OP_UNUSED_FF'''.split() -for name in names: - opcode = name_2_opcodes[name] - opcode_fmts[opcode] = kFmtUnknown +for name in _names: + _opcode = name_2_opcodes[name] + opcode_fmts[_opcode] = all_opcode_fmts.kFmtUnknown pass @@ -1223,5 +1234,5 @@ del name -del names -del opcode +del _names +del _opcode