Mercurial > paraspace
annotate paraspace/dalvik_opcodes.py @ 83:fd668c00e7e0
Fix format string for invoke-* instructions
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Wed, 20 Jul 2011 20:38:35 +0800 |
parents | 032495f8dd12 |
children | 8a53e6f7f517 |
rev | line source |
---|---|
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1 ## \file |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
2 # Define constants about opcodes of Dalvik. Constants are opcodes, |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
3 # names, formats, and maps. |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
4 # |
69 | 5 |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
6 class all_opcodes(object): |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
7 OP_NOP = 0x00 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
8 OP_MOVE = 0x01 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
9 OP_MOVE_FROM16 = 0x02 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
10 OP_MOVE_16 = 0x03 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
11 OP_MOVE_WIDE = 0x04 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
12 OP_MOVE_WIDE_FROM16 = 0x05 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
13 OP_MOVE_WIDE_16 = 0x06 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
14 OP_MOVE_OBJECT = 0x07 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
15 OP_MOVE_OBJECT_FROM16 = 0x08 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
16 OP_MOVE_OBJECT_16 = 0x09 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
17 OP_MOVE_RESULT = 0x0a |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
18 OP_MOVE_RESULT_WIDE = 0x0b |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
19 OP_MOVE_RESULT_OBJECT = 0x0c |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
20 OP_MOVE_EXCEPTION = 0x0d |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
21 OP_RETURN_VOID = 0x0e |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
22 OP_RETURN = 0x0f |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
23 OP_RETURN_WIDE = 0x10 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
24 OP_RETURN_OBJECT = 0x11 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
25 OP_CONST_4 = 0x12 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
26 OP_CONST_16 = 0x13 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
27 OP_CONST = 0x14 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
28 OP_CONST_HIGH16 = 0x15 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
29 OP_CONST_WIDE_16 = 0x16 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
30 OP_CONST_WIDE_32 = 0x17 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
31 OP_CONST_WIDE = 0x18 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
32 OP_CONST_WIDE_HIGH16 = 0x19 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
33 OP_CONST_STRING = 0x1a |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
34 OP_CONST_STRING_JUMBO = 0x1b |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
35 OP_CONST_CLASS = 0x1c |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
36 OP_MONITOR_ENTER = 0x1d |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
37 OP_MONITOR_EXIT = 0x1e |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
38 OP_CHECK_CAST = 0x1f |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
39 OP_INSTANCE_OF = 0x20 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
40 OP_ARRAY_LENGTH = 0x21 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
41 OP_NEW_INSTANCE = 0x22 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
42 OP_NEW_ARRAY = 0x23 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
43 OP_FILLED_NEW_ARRAY = 0x24 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
44 OP_FILLED_NEW_ARRAY_RANGE = 0x25 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
45 OP_FILL_ARRAY_DATA = 0x26 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
46 OP_THROW = 0x27 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
47 OP_GOTO = 0x28 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
48 OP_GOTO_16 = 0x29 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
49 OP_GOTO_32 = 0x2a |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
50 OP_PACKED_SWITCH = 0x2b |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
51 OP_SPARSE_SWITCH = 0x2c |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
52 OP_CMPL_FLOAT = 0x2d |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
53 OP_CMPG_FLOAT = 0x2e |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
54 OP_CMPL_DOUBLE = 0x2f |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
55 OP_CMPG_DOUBLE = 0x30 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
56 OP_CMP_LONG = 0x31 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
57 OP_IF_EQ = 0x32 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
58 OP_IF_NE = 0x33 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
59 OP_IF_LT = 0x34 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
60 OP_IF_GE = 0x35 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
61 OP_IF_GT = 0x36 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
62 OP_IF_LE = 0x37 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
63 OP_IF_EQZ = 0x38 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
64 OP_IF_NEZ = 0x39 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
65 OP_IF_LTZ = 0x3a |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
66 OP_IF_GEZ = 0x3b |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
67 OP_IF_GTZ = 0x3c |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
68 OP_IF_LEZ = 0x3d |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
69 OP_UNUSED_3E = 0x3e |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
70 OP_UNUSED_3F = 0x3f |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
71 OP_UNUSED_40 = 0x40 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
72 OP_UNUSED_41 = 0x41 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
73 OP_UNUSED_42 = 0x42 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
74 OP_UNUSED_43 = 0x43 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
75 OP_AGET = 0x44 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
76 OP_AGET_WIDE = 0x45 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
77 OP_AGET_OBJECT = 0x46 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
78 OP_AGET_BOOLEAN = 0x47 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
79 OP_AGET_BYTE = 0x48 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
80 OP_AGET_CHAR = 0x49 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
81 OP_AGET_SHORT = 0x4a |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
82 OP_APUT = 0x4b |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
83 OP_APUT_WIDE = 0x4c |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
84 OP_APUT_OBJECT = 0x4d |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
85 OP_APUT_BOOLEAN = 0x4e |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
86 OP_APUT_BYTE = 0x4f |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
87 OP_APUT_CHAR = 0x50 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
88 OP_APUT_SHORT = 0x51 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
89 OP_IGET = 0x52 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
90 OP_IGET_WIDE = 0x53 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
91 OP_IGET_OBJECT = 0x54 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
92 OP_IGET_BOOLEAN = 0x55 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
93 OP_IGET_BYTE = 0x56 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
94 OP_IGET_CHAR = 0x57 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
95 OP_IGET_SHORT = 0x58 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
96 OP_IPUT = 0x59 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
97 OP_IPUT_WIDE = 0x5a |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
98 OP_IPUT_OBJECT = 0x5b |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
99 OP_IPUT_BOOLEAN = 0x5c |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
100 OP_IPUT_BYTE = 0x5d |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
101 OP_IPUT_CHAR = 0x5e |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
102 OP_IPUT_SHORT = 0x5f |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
103 OP_SGET = 0x60 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
104 OP_SGET_WIDE = 0x61 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
105 OP_SGET_OBJECT = 0x62 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
106 OP_SGET_BOOLEAN = 0x63 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
107 OP_SGET_BYTE = 0x64 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
108 OP_SGET_CHAR = 0x65 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
109 OP_SGET_SHORT = 0x66 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
110 OP_SPUT = 0x67 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
111 OP_SPUT_WIDE = 0x68 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
112 OP_SPUT_OBJECT = 0x69 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
113 OP_SPUT_BOOLEAN = 0x6a |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
114 OP_SPUT_BYTE = 0x6b |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
115 OP_SPUT_CHAR = 0x6c |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
116 OP_SPUT_SHORT = 0x6d |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
117 OP_INVOKE_VIRTUAL = 0x6e |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
118 OP_INVOKE_SUPER = 0x6f |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
119 OP_INVOKE_DIRECT = 0x70 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
120 OP_INVOKE_STATIC = 0x71 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
121 OP_INVOKE_INTERFACE = 0x72 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
122 OP_UNUSED_73 = 0x73 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
123 OP_INVOKE_VIRTUAL_RANGE = 0x74 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
124 OP_INVOKE_SUPER_RANGE = 0x75 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
125 OP_INVOKE_DIRECT_RANGE = 0x76 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
126 OP_INVOKE_STATIC_RANGE = 0x77 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
127 OP_INVOKE_INTERFACE_RANGE = 0x78 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
128 OP_UNUSED_79 = 0x79 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
129 OP_UNUSED_7A = 0x7a |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
130 OP_NEG_INT = 0x7b |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
131 OP_NOT_INT = 0x7c |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
132 OP_NEG_LONG = 0x7d |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
133 OP_NOT_LONG = 0x7e |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
134 OP_NEG_FLOAT = 0x7f |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
135 OP_NEG_DOUBLE = 0x80 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
136 OP_INT_TO_LONG = 0x81 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
137 OP_INT_TO_FLOAT = 0x82 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
138 OP_INT_TO_DOUBLE = 0x83 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
139 OP_LONG_TO_INT = 0x84 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
140 OP_LONG_TO_FLOAT = 0x85 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
141 OP_LONG_TO_DOUBLE = 0x86 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
142 OP_FLOAT_TO_INT = 0x87 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
143 OP_FLOAT_TO_LONG = 0x88 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
144 OP_FLOAT_TO_DOUBLE = 0x89 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
145 OP_DOUBLE_TO_INT = 0x8a |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
146 OP_DOUBLE_TO_LONG = 0x8b |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
147 OP_DOUBLE_TO_FLOAT = 0x8c |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
148 OP_INT_TO_BYTE = 0x8d |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
149 OP_INT_TO_CHAR = 0x8e |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
150 OP_INT_TO_SHORT = 0x8f |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
151 OP_ADD_INT = 0x90 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
152 OP_SUB_INT = 0x91 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
153 OP_MUL_INT = 0x92 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
154 OP_DIV_INT = 0x93 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
155 OP_REM_INT = 0x94 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
156 OP_AND_INT = 0x95 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
157 OP_OR_INT = 0x96 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
158 OP_XOR_INT = 0x97 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
159 OP_SHL_INT = 0x98 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
160 OP_SHR_INT = 0x99 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
161 OP_USHR_INT = 0x9a |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
162 OP_ADD_LONG = 0x9b |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
163 OP_SUB_LONG = 0x9c |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
164 OP_MUL_LONG = 0x9d |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
165 OP_DIV_LONG = 0x9e |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
166 OP_REM_LONG = 0x9f |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
167 OP_AND_LONG = 0xa0 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
168 OP_OR_LONG = 0xa1 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
169 OP_XOR_LONG = 0xa2 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
170 OP_SHL_LONG = 0xa3 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
171 OP_SHR_LONG = 0xa4 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
172 OP_USHR_LONG = 0xa5 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
173 OP_ADD_FLOAT = 0xa6 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
174 OP_SUB_FLOAT = 0xa7 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
175 OP_MUL_FLOAT = 0xa8 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
176 OP_DIV_FLOAT = 0xa9 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
177 OP_REM_FLOAT = 0xaa |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
178 OP_ADD_DOUBLE = 0xab |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
179 OP_SUB_DOUBLE = 0xac |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
180 OP_MUL_DOUBLE = 0xad |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
181 OP_DIV_DOUBLE = 0xae |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
182 OP_REM_DOUBLE = 0xaf |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
183 OP_ADD_INT_2ADDR = 0xb0 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
184 OP_SUB_INT_2ADDR = 0xb1 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
185 OP_MUL_INT_2ADDR = 0xb2 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
186 OP_DIV_INT_2ADDR = 0xb3 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
187 OP_REM_INT_2ADDR = 0xb4 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
188 OP_AND_INT_2ADDR = 0xb5 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
189 OP_OR_INT_2ADDR = 0xb6 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
190 OP_XOR_INT_2ADDR = 0xb7 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
191 OP_SHL_INT_2ADDR = 0xb8 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
192 OP_SHR_INT_2ADDR = 0xb9 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
193 OP_USHR_INT_2ADDR = 0xba |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
194 OP_ADD_LONG_2ADDR = 0xbb |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
195 OP_SUB_LONG_2ADDR = 0xbc |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
196 OP_MUL_LONG_2ADDR = 0xbd |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
197 OP_DIV_LONG_2ADDR = 0xbe |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
198 OP_REM_LONG_2ADDR = 0xbf |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
199 OP_AND_LONG_2ADDR = 0xc0 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
200 OP_OR_LONG_2ADDR = 0xc1 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
201 OP_XOR_LONG_2ADDR = 0xc2 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
202 OP_SHL_LONG_2ADDR = 0xc3 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
203 OP_SHR_LONG_2ADDR = 0xc4 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
204 OP_USHR_LONG_2ADDR = 0xc5 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
205 OP_ADD_FLOAT_2ADDR = 0xc6 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
206 OP_SUB_FLOAT_2ADDR = 0xc7 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
207 OP_MUL_FLOAT_2ADDR = 0xc8 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
208 OP_DIV_FLOAT_2ADDR = 0xc9 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
209 OP_REM_FLOAT_2ADDR = 0xca |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
210 OP_ADD_DOUBLE_2ADDR = 0xcb |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
211 OP_SUB_DOUBLE_2ADDR = 0xcc |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
212 OP_MUL_DOUBLE_2ADDR = 0xcd |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
213 OP_DIV_DOUBLE_2ADDR = 0xce |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
214 OP_REM_DOUBLE_2ADDR = 0xcf |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
215 OP_ADD_INT_LIT16 = 0xd0 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
216 OP_RSUB_INT = 0xd1 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
217 OP_MUL_INT_LIT16 = 0xd2 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
218 OP_DIV_INT_LIT16 = 0xd3 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
219 OP_REM_INT_LIT16 = 0xd4 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
220 OP_AND_INT_LIT16 = 0xd5 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
221 OP_OR_INT_LIT16 = 0xd6 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
222 OP_XOR_INT_LIT16 = 0xd7 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
223 OP_ADD_INT_LIT8 = 0xd8 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
224 OP_RSUB_INT_LIT8 = 0xd9 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
225 OP_MUL_INT_LIT8 = 0xda |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
226 OP_DIV_INT_LIT8 = 0xdb |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
227 OP_REM_INT_LIT8 = 0xdc |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
228 OP_AND_INT_LIT8 = 0xdd |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
229 OP_OR_INT_LIT8 = 0xde |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
230 OP_XOR_INT_LIT8 = 0xdf |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
231 OP_SHL_INT_LIT8 = 0xe0 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
232 OP_SHR_INT_LIT8 = 0xe1 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
233 OP_USHR_INT_LIT8 = 0xe2 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
234 OP_UNUSED_E3 = 0xe3 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
235 OP_UNUSED_E4 = 0xe4 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
236 OP_UNUSED_E5 = 0xe5 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
237 OP_UNUSED_E6 = 0xe6 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
238 OP_UNUSED_E7 = 0xe7 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
239 OP_UNUSED_E8 = 0xe8 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
240 OP_UNUSED_E9 = 0xe9 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
241 OP_UNUSED_EA = 0xea |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
242 OP_UNUSED_EB = 0xeb |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
243 OP_UNUSED_EC = 0xec |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
244 OP_UNUSED_ED = 0xed |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
245 OP_EXECUTE_INLINE = 0xee |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
246 OP_UNUSED_EF = 0xef |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
247 OP_INVOKE_DIRECT_EMPTY = 0xf0 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
248 OP_UNUSED_F1 = 0xf1 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
249 OP_IGET_QUICK = 0xf2 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
250 OP_IGET_WIDE_QUICK = 0xf3 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
251 OP_IGET_OBJECT_QUICK = 0xf4 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
252 OP_IPUT_QUICK = 0xf5 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
253 OP_IPUT_WIDE_QUICK = 0xf6 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
254 OP_IPUT_OBJECT_QUICK = 0xf7 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
255 OP_INVOKE_VIRTUAL_QUICK = 0xf8 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
256 OP_INVOKE_VIRTUAL_QUICK_RANGE = 0xf9 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
257 OP_INVOKE_SUPER_QUICK = 0xfa |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
258 OP_INVOKE_SUPER_QUICK_RANGE = 0xfb |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
259 OP_UNUSED_FC = 0xfc |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
260 OP_UNUSED_FD = 0xfd |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
261 OP_UNUSED_FE = 0xfe |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
262 OP_UNUSED_FF = 0xff |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
263 pass |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
264 |
80 | 265 ## \brief List of names of opcodes |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
266 opcode_names = sorted([name |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
267 for name in all_opcodes.__dict__.keys() |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
268 if name.startswith('OP_')], |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
269 key=lambda name: all_opcodes.__dict__[name]) |
80 | 270 ## \brief Map opcode names to opcodes |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
271 name_2_opcodes = dict([(name, code) |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
272 for name, code in all_opcodes.__dict__.items()]) |
69 | 273 |
80 | 274 ## \brief Length of instructions of opcodes in bytes |
69 | 275 opcode_widths = [0] * 256 |
276 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
277 _w1_ops = '''OP_NOP |
69 | 278 OP_MOVE |
279 OP_MOVE_WIDE | |
280 OP_MOVE_OBJECT | |
281 OP_MOVE_RESULT | |
282 OP_MOVE_RESULT_WIDE | |
283 OP_MOVE_RESULT_OBJECT | |
284 OP_MOVE_EXCEPTION | |
285 OP_RETURN_VOID | |
286 OP_RETURN | |
287 OP_RETURN_WIDE | |
288 OP_RETURN_OBJECT | |
289 OP_CONST_4 | |
290 OP_MONITOR_ENTER | |
291 OP_MONITOR_EXIT | |
292 OP_ARRAY_LENGTH | |
293 OP_THROW | |
294 OP_GOTO | |
295 OP_NEG_INT | |
296 OP_NOT_INT | |
297 OP_NEG_LONG | |
298 OP_NOT_LONG | |
299 OP_NEG_FLOAT | |
300 OP_NEG_DOUBLE | |
301 OP_INT_TO_LONG | |
302 OP_INT_TO_FLOAT | |
303 OP_INT_TO_DOUBLE | |
304 OP_LONG_TO_INT | |
305 OP_LONG_TO_FLOAT | |
306 OP_LONG_TO_DOUBLE | |
307 OP_FLOAT_TO_INT | |
308 OP_FLOAT_TO_LONG | |
309 OP_FLOAT_TO_DOUBLE | |
310 OP_DOUBLE_TO_INT | |
311 OP_DOUBLE_TO_LONG | |
312 OP_DOUBLE_TO_FLOAT | |
313 OP_INT_TO_BYTE | |
314 OP_INT_TO_CHAR | |
315 OP_INT_TO_SHORT | |
316 OP_ADD_INT_2ADDR | |
317 OP_SUB_INT_2ADDR | |
318 OP_MUL_INT_2ADDR | |
319 OP_DIV_INT_2ADDR | |
320 OP_REM_INT_2ADDR | |
321 OP_AND_INT_2ADDR | |
322 OP_OR_INT_2ADDR | |
323 OP_XOR_INT_2ADDR | |
324 OP_SHL_INT_2ADDR | |
325 OP_SHR_INT_2ADDR | |
326 OP_USHR_INT_2ADDR | |
327 OP_ADD_LONG_2ADDR | |
328 OP_SUB_LONG_2ADDR | |
329 OP_MUL_LONG_2ADDR | |
330 OP_DIV_LONG_2ADDR | |
331 OP_REM_LONG_2ADDR | |
332 OP_AND_LONG_2ADDR | |
333 OP_OR_LONG_2ADDR | |
334 OP_XOR_LONG_2ADDR | |
335 OP_SHL_LONG_2ADDR | |
336 OP_SHR_LONG_2ADDR | |
337 OP_USHR_LONG_2ADDR | |
338 OP_ADD_FLOAT_2ADDR | |
339 OP_SUB_FLOAT_2ADDR | |
340 OP_MUL_FLOAT_2ADDR | |
341 OP_DIV_FLOAT_2ADDR | |
342 OP_REM_FLOAT_2ADDR | |
343 OP_ADD_DOUBLE_2ADDR | |
344 OP_SUB_DOUBLE_2ADDR | |
345 OP_MUL_DOUBLE_2ADDR | |
346 OP_DIV_DOUBLE_2ADDR | |
347 OP_REM_DOUBLE_2ADDR'''.split() | |
348 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
349 for name in _w1_ops: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
350 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
351 opcode_widths[_opcode] = 1 |
69 | 352 pass |
353 | |
354 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
355 _w2_ops = '''OP_MOVE_FROM16 |
69 | 356 OP_MOVE_WIDE_FROM16 |
357 OP_MOVE_OBJECT_FROM16 | |
358 OP_CONST_16 | |
359 OP_CONST_HIGH16 | |
360 OP_CONST_WIDE_16 | |
361 OP_CONST_WIDE_HIGH16 | |
362 OP_CONST_STRING | |
363 OP_CONST_CLASS | |
364 OP_CHECK_CAST | |
365 OP_INSTANCE_OF | |
366 OP_NEW_INSTANCE | |
367 OP_NEW_ARRAY | |
368 OP_CMPL_FLOAT | |
369 OP_CMPG_FLOAT | |
370 OP_CMPL_DOUBLE | |
371 OP_CMPG_DOUBLE | |
372 OP_CMP_LONG | |
373 OP_GOTO_16 | |
374 OP_IF_EQ | |
375 OP_IF_NE | |
376 OP_IF_LT | |
377 OP_IF_GE | |
378 OP_IF_GT | |
379 OP_IF_LE | |
380 OP_IF_EQZ | |
381 OP_IF_NEZ | |
382 OP_IF_LTZ | |
383 OP_IF_GEZ | |
384 OP_IF_GTZ | |
385 OP_IF_LEZ | |
386 OP_AGET | |
387 OP_AGET_WIDE | |
388 OP_AGET_OBJECT | |
389 OP_AGET_BOOLEAN | |
390 OP_AGET_BYTE | |
391 OP_AGET_CHAR | |
392 OP_AGET_SHORT | |
393 OP_APUT | |
394 OP_APUT_WIDE | |
395 OP_APUT_OBJECT | |
396 OP_APUT_BOOLEAN | |
397 OP_APUT_BYTE | |
398 OP_APUT_CHAR | |
399 OP_APUT_SHORT | |
400 OP_IGET | |
401 OP_IGET_WIDE | |
402 OP_IGET_OBJECT | |
403 OP_IGET_BOOLEAN | |
404 OP_IGET_BYTE | |
405 OP_IGET_CHAR | |
406 OP_IGET_SHORT | |
407 OP_IPUT | |
408 OP_IPUT_WIDE | |
409 OP_IPUT_OBJECT | |
410 OP_IPUT_BOOLEAN | |
411 OP_IPUT_BYTE | |
412 OP_IPUT_CHAR | |
413 OP_IPUT_SHORT | |
414 OP_SGET | |
415 OP_SGET_WIDE | |
416 OP_SGET_OBJECT | |
417 OP_SGET_BOOLEAN | |
418 OP_SGET_BYTE | |
419 OP_SGET_CHAR | |
420 OP_SGET_SHORT | |
421 OP_SPUT | |
422 OP_SPUT_WIDE | |
423 OP_SPUT_OBJECT | |
424 OP_SPUT_BOOLEAN | |
425 OP_SPUT_BYTE | |
426 OP_SPUT_CHAR | |
427 OP_SPUT_SHORT | |
428 OP_ADD_INT | |
429 OP_SUB_INT | |
430 OP_MUL_INT | |
431 OP_DIV_INT | |
432 OP_REM_INT | |
433 OP_AND_INT | |
434 OP_OR_INT | |
435 OP_XOR_INT | |
436 OP_SHL_INT | |
437 OP_SHR_INT | |
438 OP_USHR_INT | |
439 OP_ADD_LONG | |
440 OP_SUB_LONG | |
441 OP_MUL_LONG | |
442 OP_DIV_LONG | |
443 OP_REM_LONG | |
444 OP_AND_LONG | |
445 OP_OR_LONG | |
446 OP_XOR_LONG | |
447 OP_SHL_LONG | |
448 OP_SHR_LONG | |
449 OP_USHR_LONG | |
450 OP_ADD_FLOAT | |
451 OP_SUB_FLOAT | |
452 OP_MUL_FLOAT | |
453 OP_DIV_FLOAT | |
454 OP_REM_FLOAT | |
455 OP_ADD_DOUBLE | |
456 OP_SUB_DOUBLE | |
457 OP_MUL_DOUBLE | |
458 OP_DIV_DOUBLE | |
459 OP_REM_DOUBLE | |
460 OP_ADD_INT_LIT16 | |
461 OP_RSUB_INT | |
462 OP_MUL_INT_LIT16 | |
463 OP_DIV_INT_LIT16 | |
464 OP_REM_INT_LIT16 | |
465 OP_AND_INT_LIT16 | |
466 OP_OR_INT_LIT16 | |
467 OP_XOR_INT_LIT16 | |
468 OP_ADD_INT_LIT8 | |
469 OP_RSUB_INT_LIT8 | |
470 OP_MUL_INT_LIT8 | |
471 OP_DIV_INT_LIT8 | |
472 OP_REM_INT_LIT8 | |
473 OP_AND_INT_LIT8 | |
474 OP_OR_INT_LIT8 | |
475 OP_XOR_INT_LIT8 | |
476 OP_SHL_INT_LIT8 | |
477 OP_SHR_INT_LIT8 | |
478 OP_USHR_INT_LIT8'''.split() | |
479 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
480 for name in _w2_ops: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
481 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
482 opcode_widths[_opcode] = 2 |
69 | 483 pass |
484 | |
485 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
486 _w3_ops = '''OP_MOVE_16 |
69 | 487 OP_MOVE_WIDE_16 |
488 OP_MOVE_OBJECT_16 | |
489 OP_CONST | |
490 OP_CONST_WIDE_32 | |
491 OP_CONST_STRING_JUMBO | |
492 OP_GOTO_32 | |
493 OP_FILLED_NEW_ARRAY | |
494 OP_FILLED_NEW_ARRAY_RANGE | |
495 OP_FILL_ARRAY_DATA | |
496 OP_PACKED_SWITCH | |
497 OP_SPARSE_SWITCH | |
498 OP_INVOKE_VIRTUAL | |
499 OP_INVOKE_SUPER | |
500 OP_INVOKE_DIRECT | |
501 OP_INVOKE_STATIC | |
502 OP_INVOKE_INTERFACE | |
503 OP_INVOKE_VIRTUAL_RANGE | |
504 OP_INVOKE_SUPER_RANGE | |
505 OP_INVOKE_DIRECT_RANGE | |
506 OP_INVOKE_STATIC_RANGE | |
507 OP_INVOKE_INTERFACE_RANGE'''.split() | |
508 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
509 for name in _w3_ops: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
510 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
511 opcode_widths[_opcode] = 3 |
69 | 512 pass |
513 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
514 opcode_widths[all_opcodes.OP_CONST_WIDE] = 5 |
69 | 515 |
516 # | |
517 # Optimized instructions. We return negative size values for these | |
518 # to distinguish them. | |
519 # | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
520 _w_2_ops = '''OP_IGET_QUICK |
69 | 521 OP_IGET_WIDE_QUICK |
522 OP_IGET_OBJECT_QUICK | |
523 OP_IPUT_QUICK | |
524 OP_IPUT_WIDE_QUICK | |
525 OP_IPUT_OBJECT_QUICK'''.split() | |
526 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
527 for name in _w_2_ops: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
528 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
529 opcode_widths[_opcode] = -2 |
69 | 530 pass |
531 | |
532 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
533 _w_3_ops = '''OP_INVOKE_VIRTUAL_QUICK |
69 | 534 OP_INVOKE_VIRTUAL_QUICK_RANGE |
535 OP_INVOKE_SUPER_QUICK | |
536 OP_INVOKE_SUPER_QUICK_RANGE | |
537 OP_EXECUTE_INLINE | |
538 OP_INVOKE_DIRECT_EMPTY'''.split() | |
539 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
540 for name in _w_3_ops: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
541 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
542 opcode_widths[_opcode] = -3 |
69 | 543 pass |
544 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
545 _w0_ops = '''OP_UNUSED_3E |
69 | 546 OP_UNUSED_3F |
547 OP_UNUSED_40 | |
548 OP_UNUSED_41 | |
549 OP_UNUSED_42 | |
550 OP_UNUSED_43 | |
551 OP_UNUSED_73 | |
552 OP_UNUSED_79 | |
553 OP_UNUSED_7A | |
554 OP_UNUSED_E3 | |
555 OP_UNUSED_E4 | |
556 OP_UNUSED_E5 | |
557 OP_UNUSED_E6 | |
558 OP_UNUSED_E7 | |
559 OP_UNUSED_E8 | |
560 OP_UNUSED_E9 | |
561 OP_UNUSED_EA | |
562 OP_UNUSED_EB | |
563 OP_UNUSED_EC | |
564 OP_UNUSED_ED | |
565 OP_UNUSED_EF | |
566 OP_UNUSED_F1 | |
567 OP_UNUSED_FC | |
568 OP_UNUSED_FD | |
569 OP_UNUSED_FE | |
570 OP_UNUSED_FF'''.split() | |
571 | |
572 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
573 class all_opcode_fmts(object): |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
574 kFmtUnknown = 0 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
575 kFmt10x = 1 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
576 kFmt12x = 2 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
577 kFmt11n = 3 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
578 kFmt11x = 4 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
579 kFmt10t = 5 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
580 kFmt20t = 6 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
581 kFmt22x = 7 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
582 kFmt21t = 8 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
583 kFmt21s = 9 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
584 kFmt21h = 10 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
585 kFmt21c = 11 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
586 kFmt23x = 12 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
587 kFmt22b = 13 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
588 kFmt22t = 14 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
589 kFmt22s = 15 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
590 kFmt22c = 16 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
591 kFmt22cs = 17 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
592 kFmt32x = 18 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
593 kFmt30t = 19 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
594 kFmt31t = 20 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
595 kFmt31i = 21 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
596 kFmt31c = 22 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
597 kFmt35c = 23 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
598 kFmt35ms = 24 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
599 kFmt35fs = 25 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
600 kFmt3rc = 26 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
601 kFmt3rms = 27 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
602 kFmt3rfs = 28 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
603 kFmt3inline = 29 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
604 kFmt51l = 30 |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
605 pass |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
606 |
69 | 607 |
608 fmt_names = '''kFmtUnknown | |
609 kFmt10x | |
610 kFmt12x | |
611 kFmt11n | |
612 kFmt11x | |
613 kFmt10t | |
614 kFmt20t | |
615 kFmt22x | |
616 kFmt21t | |
617 kFmt21s | |
618 kFmt21h | |
619 kFmt21c | |
620 kFmt23x | |
621 kFmt22b | |
622 kFmt22t | |
623 kFmt22s | |
624 kFmt22c | |
625 kFmt22cs | |
626 kFmt32x | |
627 kFmt30t | |
628 kFmt31t | |
629 kFmt31i | |
630 kFmt31c | |
631 kFmt35c | |
632 kFmt35ms | |
633 kFmt35fs | |
634 kFmt3rc | |
635 kFmt3rms | |
636 kFmt3rfs | |
637 kFmt3inline | |
638 kFmt51l | |
639 '''.split() | |
640 | |
80 | 641 ## \brief Map opcodes to their formats |
69 | 642 opcode_fmts = [0] * 256 |
643 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
644 opcode_fmts[all_opcodes.OP_GOTO] = all_opcode_fmts.kFmt10t |
69 | 645 |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
646 _names = '''OP_NOP |
69 | 647 OP_RETURN_VOID'''.split() |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
648 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
649 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
650 opcode_fmts[_opcode] = all_opcode_fmts.kFmt10x |
69 | 651 pass |
652 | |
653 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
654 opcode_fmts[all_opcodes.OP_CONST_4] = all_opcode_fmts.kFmt11n |
69 | 655 |
656 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
657 _names = '''OP_CONST_HIGH16 |
69 | 658 OP_CONST_WIDE_HIGH16'''.split() |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
659 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
660 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
661 opcode_fmts[_opcode] = all_opcode_fmts.kFmt21h |
69 | 662 pass |
663 | |
664 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
665 _names = '''OP_MOVE_RESULT |
69 | 666 OP_MOVE_RESULT_WIDE |
667 OP_MOVE_RESULT_OBJECT | |
668 OP_MOVE_EXCEPTION | |
669 OP_RETURN | |
670 OP_RETURN_WIDE | |
671 OP_RETURN_OBJECT | |
672 OP_MONITOR_ENTER | |
673 OP_MONITOR_EXIT | |
674 OP_THROW'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
675 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
676 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
677 opcode_fmts[_opcode] = all_opcode_fmts.kFmt11x |
69 | 678 pass |
679 | |
680 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
681 _names = '''OP_MOVE |
69 | 682 OP_MOVE_WIDE |
683 OP_MOVE_OBJECT | |
684 OP_ARRAY_LENGTH | |
685 OP_NEG_INT | |
686 OP_NOT_INT | |
687 OP_NEG_LONG | |
688 OP_NOT_LONG | |
689 OP_NEG_FLOAT | |
690 OP_NEG_DOUBLE | |
691 OP_INT_TO_LONG | |
692 OP_INT_TO_FLOAT | |
693 OP_INT_TO_DOUBLE | |
694 OP_LONG_TO_INT | |
695 OP_LONG_TO_FLOAT | |
696 OP_LONG_TO_DOUBLE | |
697 OP_FLOAT_TO_INT | |
698 OP_FLOAT_TO_LONG | |
699 OP_FLOAT_TO_DOUBLE | |
700 OP_DOUBLE_TO_INT | |
701 OP_DOUBLE_TO_LONG | |
702 OP_DOUBLE_TO_FLOAT | |
703 OP_INT_TO_BYTE | |
704 OP_INT_TO_CHAR | |
705 OP_INT_TO_SHORT | |
706 OP_ADD_INT_2ADDR | |
707 OP_SUB_INT_2ADDR | |
708 OP_MUL_INT_2ADDR | |
709 OP_DIV_INT_2ADDR | |
710 OP_REM_INT_2ADDR | |
711 OP_AND_INT_2ADDR | |
712 OP_OR_INT_2ADDR | |
713 OP_XOR_INT_2ADDR | |
714 OP_SHL_INT_2ADDR | |
715 OP_SHR_INT_2ADDR | |
716 OP_USHR_INT_2ADDR | |
717 OP_ADD_LONG_2ADDR | |
718 OP_SUB_LONG_2ADDR | |
719 OP_MUL_LONG_2ADDR | |
720 OP_DIV_LONG_2ADDR | |
721 OP_REM_LONG_2ADDR | |
722 OP_AND_LONG_2ADDR | |
723 OP_OR_LONG_2ADDR | |
724 OP_XOR_LONG_2ADDR | |
725 OP_SHL_LONG_2ADDR | |
726 OP_SHR_LONG_2ADDR | |
727 OP_USHR_LONG_2ADDR | |
728 OP_ADD_FLOAT_2ADDR | |
729 OP_SUB_FLOAT_2ADDR | |
730 OP_MUL_FLOAT_2ADDR | |
731 OP_DIV_FLOAT_2ADDR | |
732 OP_REM_FLOAT_2ADDR | |
733 OP_ADD_DOUBLE_2ADDR | |
734 OP_SUB_DOUBLE_2ADDR | |
735 OP_MUL_DOUBLE_2ADDR | |
736 OP_DIV_DOUBLE_2ADDR | |
737 OP_REM_DOUBLE_2ADDR'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
738 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
739 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
740 opcode_fmts[_opcode] = all_opcode_fmts.kFmt12x |
69 | 741 pass |
742 | |
743 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
744 opcode_fmts[all_opcodes.OP_GOTO_16] = all_opcode_fmts.kFmt20t |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
745 opcode_fmts[all_opcodes.OP_GOTO_32] = all_opcode_fmts.kFmt30t |
69 | 746 |
747 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
748 _names = '''OP_CONST_STRING |
69 | 749 OP_CONST_CLASS |
750 OP_CHECK_CAST | |
751 OP_NEW_INSTANCE | |
752 OP_SGET | |
753 OP_SGET_WIDE | |
754 OP_SGET_OBJECT | |
755 OP_SGET_BOOLEAN | |
756 OP_SGET_BYTE | |
757 OP_SGET_CHAR | |
758 OP_SGET_SHORT | |
759 OP_SPUT | |
760 OP_SPUT_WIDE | |
761 OP_SPUT_OBJECT | |
762 OP_SPUT_BOOLEAN | |
763 OP_SPUT_BYTE | |
764 OP_SPUT_CHAR | |
765 OP_SPUT_SHORT'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
766 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
767 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
768 opcode_fmts[_opcode] = all_opcode_fmts.kFmt21c |
69 | 769 pass |
770 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
771 _names = '''OP_CONST_16 |
69 | 772 OP_CONST_WIDE_16'''.split() |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
773 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
774 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
775 opcode_fmts[_opcode] = all_opcode_fmts.kFmt21s |
69 | 776 pass |
777 | |
778 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
779 _names = '''OP_IF_EQZ |
69 | 780 OP_IF_NEZ |
781 OP_IF_LTZ | |
782 OP_IF_GEZ | |
783 OP_IF_GTZ | |
784 OP_IF_LEZ'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
785 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
786 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
787 opcode_fmts[_opcode] = all_opcode_fmts.kFmt21t |
69 | 788 pass |
789 | |
790 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
791 _names = '''OP_FILL_ARRAY_DATA |
69 | 792 OP_PACKED_SWITCH |
793 OP_SPARSE_SWITCH'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
794 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
795 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
796 opcode_fmts[_opcode] = all_opcode_fmts.kFmt31t |
69 | 797 pass |
798 | |
799 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
800 _names = '''OP_ADD_INT_LIT8 |
69 | 801 OP_RSUB_INT_LIT8 |
802 OP_MUL_INT_LIT8 | |
803 OP_DIV_INT_LIT8 | |
804 OP_REM_INT_LIT8 | |
805 OP_AND_INT_LIT8 | |
806 OP_OR_INT_LIT8 | |
807 OP_XOR_INT_LIT8 | |
808 OP_SHL_INT_LIT8 | |
809 OP_SHR_INT_LIT8 | |
810 OP_USHR_INT_LIT8'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
811 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
812 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
813 opcode_fmts[_opcode] = all_opcode_fmts.kFmt22b |
69 | 814 pass |
815 | |
816 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
817 _names = '''OP_INSTANCE_OF |
69 | 818 OP_NEW_ARRAY |
819 OP_IGET | |
820 OP_IGET_WIDE | |
821 OP_IGET_OBJECT | |
822 OP_IGET_BOOLEAN | |
823 OP_IGET_BYTE | |
824 OP_IGET_CHAR | |
825 OP_IGET_SHORT | |
826 OP_IPUT | |
827 OP_IPUT_WIDE | |
828 OP_IPUT_OBJECT | |
829 OP_IPUT_BOOLEAN | |
830 OP_IPUT_BYTE | |
831 OP_IPUT_CHAR | |
832 OP_IPUT_SHORT'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
833 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
834 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
835 opcode_fmts[_opcode] = all_opcode_fmts.kFmt22c |
69 | 836 pass |
837 | |
838 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
839 _names = '''OP_ADD_INT_LIT16 |
69 | 840 OP_RSUB_INT |
841 OP_MUL_INT_LIT16 | |
842 OP_DIV_INT_LIT16 | |
843 OP_REM_INT_LIT16 | |
844 OP_AND_INT_LIT16 | |
845 OP_OR_INT_LIT16 | |
846 OP_XOR_INT_LIT16'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
847 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
848 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
849 opcode_fmts[_opcode] = all_opcode_fmts.kFmt22s |
69 | 850 pass |
851 | |
852 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
853 _names = '''OP_IF_EQ |
69 | 854 OP_IF_NE |
855 OP_IF_LT | |
856 OP_IF_GE | |
857 OP_IF_GT | |
858 OP_IF_LE'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
859 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
860 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
861 opcode_fmts[_opcode] = all_opcode_fmts.kFmt22t |
69 | 862 pass |
863 | |
864 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
865 _names = '''OP_MOVE_FROM16 |
69 | 866 OP_MOVE_WIDE_FROM16 |
867 OP_MOVE_OBJECT_FROM16'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
868 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
869 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
870 opcode_fmts[_opcode] = all_opcode_fmts.kFmt22x |
69 | 871 pass |
872 | |
873 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
874 _names = '''OP_CMPL_FLOAT |
69 | 875 OP_CMPG_FLOAT |
876 OP_CMPL_DOUBLE | |
877 OP_CMPG_DOUBLE | |
878 OP_CMP_LONG | |
879 OP_AGET | |
880 OP_AGET_WIDE | |
881 OP_AGET_OBJECT | |
882 OP_AGET_BOOLEAN | |
883 OP_AGET_BYTE | |
884 OP_AGET_CHAR | |
885 OP_AGET_SHORT | |
886 OP_APUT | |
887 OP_APUT_WIDE | |
888 OP_APUT_OBJECT | |
889 OP_APUT_BOOLEAN | |
890 OP_APUT_BYTE | |
891 OP_APUT_CHAR | |
892 OP_APUT_SHORT | |
893 OP_ADD_INT | |
894 OP_SUB_INT | |
895 OP_MUL_INT | |
896 OP_DIV_INT | |
897 OP_REM_INT | |
898 OP_AND_INT | |
899 OP_OR_INT | |
900 OP_XOR_INT | |
901 OP_SHL_INT | |
902 OP_SHR_INT | |
903 OP_USHR_INT | |
904 OP_ADD_LONG | |
905 OP_SUB_LONG | |
906 OP_MUL_LONG | |
907 OP_DIV_LONG | |
908 OP_REM_LONG | |
909 OP_AND_LONG | |
910 OP_OR_LONG | |
911 OP_XOR_LONG | |
912 OP_SHL_LONG | |
913 OP_SHR_LONG | |
914 OP_USHR_LONG | |
915 OP_ADD_FLOAT | |
916 OP_SUB_FLOAT | |
917 OP_MUL_FLOAT | |
918 OP_DIV_FLOAT | |
919 OP_REM_FLOAT | |
920 OP_ADD_DOUBLE | |
921 OP_SUB_DOUBLE | |
922 OP_MUL_DOUBLE | |
923 OP_DIV_DOUBLE | |
924 OP_REM_DOUBLE'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
925 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
926 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
927 opcode_fmts[_opcode] = all_opcode_fmts.kFmt23x |
69 | 928 pass |
929 | |
930 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
931 _names = '''OP_CONST |
69 | 932 OP_CONST_WIDE_32'''.split() |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
933 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
934 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
935 opcode_fmts[_opcode] = all_opcode_fmts.kFmt31i |
69 | 936 pass |
937 | |
938 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
939 opcode_fmts[all_opcodes.OP_CONST_STRING_JUMBO] = all_opcode_fmts.kFmt31c |
69 | 940 |
941 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
942 _names = '''OP_MOVE_16 |
69 | 943 OP_MOVE_WIDE_16 |
944 OP_MOVE_OBJECT_16'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
945 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
946 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
947 opcode_fmts[_opcode] = all_opcode_fmts.kFmt32x |
69 | 948 pass |
949 | |
950 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
951 _names = '''OP_FILLED_NEW_ARRAY |
69 | 952 OP_INVOKE_VIRTUAL |
953 OP_INVOKE_SUPER | |
954 OP_INVOKE_DIRECT | |
955 OP_INVOKE_STATIC | |
956 OP_INVOKE_INTERFACE'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
957 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
958 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
959 opcode_fmts[_opcode] = all_opcode_fmts.kFmt35c |
69 | 960 pass |
961 | |
962 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
963 _names = '''OP_FILLED_NEW_ARRAY_RANGE |
69 | 964 OP_INVOKE_VIRTUAL_RANGE |
965 OP_INVOKE_SUPER_RANGE | |
966 OP_INVOKE_DIRECT_RANGE | |
967 OP_INVOKE_STATIC_RANGE | |
968 OP_INVOKE_INTERFACE_RANGE'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
969 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
970 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
971 opcode_fmts[_opcode] = all_opcode_fmts.kFmt3rc |
69 | 972 pass |
973 | |
974 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
975 opcode_fmts[all_opcodes.OP_CONST_WIDE] = all_opcode_fmts.kFmt51l |
69 | 976 |
977 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
978 _names = '''OP_IGET_QUICK |
69 | 979 OP_IGET_WIDE_QUICK |
980 OP_IGET_OBJECT_QUICK | |
981 OP_IPUT_QUICK | |
982 OP_IPUT_WIDE_QUICK | |
983 OP_IPUT_OBJECT_QUICK'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
984 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
985 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
986 opcode_fmts[_opcode] = all_opcode_fmts.kFmt22cs |
69 | 987 pass |
988 | |
989 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
990 _names = '''OP_INVOKE_VIRTUAL_QUICK |
69 | 991 OP_INVOKE_SUPER_QUICK'''.split() |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
992 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
993 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
994 opcode_fmts[_opcode] = all_opcode_fmts.kFmt35ms |
69 | 995 pass |
996 | |
997 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
998 _names = '''OP_INVOKE_VIRTUAL_QUICK_RANGE |
69 | 999 OP_INVOKE_SUPER_QUICK_RANGE'''.split() |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1000 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1001 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1002 opcode_fmts[_opcode] = all_opcode_fmts.kFmt3rms |
69 | 1003 pass |
1004 | |
1005 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1006 opcode_fmts[all_opcodes.OP_EXECUTE_INLINE] = all_opcode_fmts.kFmt3inline |
69 | 1007 |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1008 opcode_fmts[all_opcodes.OP_INVOKE_DIRECT_EMPTY] = all_opcode_fmts.kFmt35c |
69 | 1009 |
1010 | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1011 _names = '''OP_UNUSED_3E |
69 | 1012 OP_UNUSED_3F |
1013 OP_UNUSED_40 | |
1014 OP_UNUSED_41 | |
1015 OP_UNUSED_42 | |
1016 OP_UNUSED_43 | |
1017 OP_UNUSED_73 | |
1018 OP_UNUSED_79 | |
1019 OP_UNUSED_7A | |
1020 OP_UNUSED_E3 | |
1021 OP_UNUSED_E4 | |
1022 OP_UNUSED_E5 | |
1023 OP_UNUSED_E6 | |
1024 OP_UNUSED_E7 | |
1025 OP_UNUSED_E8 | |
1026 OP_UNUSED_E9 | |
1027 OP_UNUSED_EA | |
1028 OP_UNUSED_EB | |
1029 OP_UNUSED_EC | |
1030 OP_UNUSED_ED | |
1031 OP_UNUSED_EF | |
1032 OP_UNUSED_F1 | |
1033 OP_UNUSED_FC | |
1034 OP_UNUSED_FD | |
1035 OP_UNUSED_FE | |
1036 OP_UNUSED_FF'''.split() | |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1037 for name in _names: |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1038 _opcode = name_2_opcodes[name] |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1039 opcode_fmts[_opcode] = all_opcode_fmts.kFmtUnknown |
69 | 1040 pass |
1041 | |
1042 | |
80 | 1043 ## \brief String for string format from name of format. |
69 | 1044 fmt_fmtstr = { |
1045 'kFmtUnknown': '', | |
1046 'kFmt10x': '', | |
70
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1047 'kFmt12x': 'v{0}, v{1}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1048 'kFmt11n': 'v{0}, #+{1}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1049 'kFmt11x': 'v{0}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1050 'kFmt10t': '+{0}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1051 'kFmt20t': '+{0}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1052 'kFmt22x': 'v{0}, {1:04x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1053 'kFmt21t': 'v{0}, +{1:04x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1054 'kFmt21s': 'v{0}, #+{1:04x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1055 'kFmt21h': 'v{0}, #+{1:04x}00000[00000000]', |
82
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1056 'kFmt21c': 'v{0}, thing@{1:04x}', |
70
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1057 'kFmt23x': 'v{0}, v{1}, v{2}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1058 'kFmt22b': 'v{0}, v{1}, #+{2:02x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1059 'kFmt22t': 'v{0}, v{1}, +{2:04x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1060 'kFmt22s': 'v{0}, v{1}, #+{2:04x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1061 'kFmt22c': 'v{0}, v{1}, thing@{2:04x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1062 'kFmt22cs': 'v0{}, v{1}, field offset {2:04x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1063 'kFmt32x': 'v{0:04x}, v{1:04x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1064 'kFmt30t': '+{0:08x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1065 'kFmt31t': 'v{0}, +{1:08x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1066 'kFmt31i': 'v{0}, #+{1:08x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1067 'kFmt31c': 'v{0}, thing@{1:08x}', |
83
fd668c00e7e0
Fix format string for invoke-* instructions
Thinker K.F. Li <thinker@codemud.net>
parents:
82
diff
changeset
|
1068 'kFmt35c': '{{v{3}, v{4}, v{5}, v{6}, v{0}}}, meth@{2:04x} ({1}: count, A: vG)', |
fd668c00e7e0
Fix format string for invoke-* instructions
Thinker K.F. Li <thinker@codemud.net>
parents:
82
diff
changeset
|
1069 'kFmt35ms': '{{v{3}, v{4}, v{5}, v{6}, v{0}}}, meth@{2:04x} ({1}: count, A: vG)', |
69 | 1070 'kFmt35fs': 'invoke-interface', |
70
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1071 'kFmt3rc': '{{v{2:04x} .. v({2:04x}+{0:02x}-1)}}, meth@{1:04x}', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1072 'kFmt3rms': '{{v{2:04x} .. v({2:04x}+{0:02x}-1)}}, meth@{1:04x}', |
69 | 1073 'kFmt3rfs': 'invoke-interface/range', |
70
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1074 'kFmt3inline': '{{v{3}, v{4}, v{5}, v{6}}} thing@{2:04x} ({1}: count)', |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1075 'kFmt51l': 'v{0}, #+{1:016x}' |
69 | 1076 } |
1077 | |
80 | 1078 ## \brief Map from names of opcode formats to tuples of fields size |
69 | 1079 fmt_parse_cfgs = { |
1080 'kFmtUnknown': (), # '' | |
1081 'kFmt10x': (), # '' | |
1082 'kFmt12x': (1, 1), # 'vA, vB' | |
82
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1083 'kFmt11n': (1, 1), # 'vA, #+B' |
69 | 1084 'kFmt11x': (2,), # 'vAA' |
1085 'kFmt10t': (2,), # '+AA' | |
1086 'kFmt20t': (4,), # '+AAAA' | |
1087 'kFmt22x': (2, 4), # 'vAA, vBBBB' | |
1088 'kFmt21t': (2, 4), # 'vAA, +BBBB' | |
1089 'kFmt21s': (2, 4), # 'vAA, #+BBBB' | |
1090 'kFmt21h': (2, 4), # 'vAA, #+BBBB00000[00000000]' | |
1091 'kFmt21c': (2, 4), # 'vAA, thing@BBBB' | |
1092 'kFmt23x': (2, 2, 2), # 'vAA, vBB, vCC' | |
1093 'kFmt22b': (2, 2, 2), # 'vAA, vBB, #+CC' | |
1094 'kFmt22t': (1, 1, 4), # 'vA, vB, +CCCC' | |
1095 'kFmt22s': (1, 1, 4), # 'vA, vB, #+CCCC' | |
1096 'kFmt22c': (1, 1, 4), # 'vA, vB, thing@CCCC' | |
1097 'kFmt22cs': (1, 1, 4), # 'vA, vB, field offset CCCC' | |
1098 'kFmt32x': (4, 4), # 'vAAAA, vBBBB' | |
1099 'kFmt30t': (8,), # '+AAAAAAAA' | |
1100 'kFmt31t': (2, 8), # 'vAA, +BBBBBBBB' | |
1101 'kFmt31i': (2, 8), # 'vAA, #+BBBBBBBB' | |
1102 'kFmt31c': (2, 8), # 'vAA, thing@BBBBBBBB' | |
1103 # '{vC, vD, vE, vF, vG}, thing@BBBB (B: count, A: vG)' | |
1104 'kFmt35c': (1, 1, 4, 1, 1, 1, 1), | |
1105 'kFmt35ms': (1, 1, 4, 1, 1, 1, 1), # 'invoke-virtual+super' | |
1106 'kFmt35fs': (), # 'invoke-interface' | |
1107 'kFmt3rc': (2, 4, 4), # '{vCCCC .. v(CCCC+AA-1)}, meth@BBBB' | |
1108 'kFmt3rms': (2, 4, 4), # 'invoke-virtual+super/range' | |
1109 'kFmt3rfs': (), # 'invoke-interface/range' | |
1110 'kFmt3inline': (1, 1, 4, 1, 1, 1, 1), # 'inline invoke' | |
1111 'kFmt51l': (2, 16) # 'vAA, #+BBBBBBBBBBBBBBBB' | |
1112 } | |
1113 | |
80 | 1114 ## \brief Decode an instruction |
69 | 1115 def decode_inst(insn): |
1116 def build_arg(sz): | |
1117 if sz == 1: | |
1118 if build_arg.off & 0x1: | |
1119 arg = ord(insn[build_arg.off / 2]) >> 4 | |
1120 else: | |
1121 arg = ord(insn[build_arg.off / 2]) & 0xf | |
1122 pass | |
1123 build_arg.off = build_arg.off + 1 | |
1124 pass | |
1125 elif sz == 2: | |
1126 build_arg.off = (build_arg.off + 1) & ~0x1 | |
1127 arg = ord(insn[build_arg.off / 2]) | |
1128 build_arg.off = build_arg.off + 2 | |
1129 elif sz == 4: | |
1130 build_arg.off = (build_arg.off + 3) & ~0x3 | |
1131 arg = ord(insn[build_arg.off / 2]) | \ | |
1132 (ord(insn[build_arg.off / 2 + 1]) << 8) | |
1133 build_arg.off = build_arg.off + 4 | |
1134 elif sz == 8: | |
1135 build_arg.off = (build_arg.off + 3) & ~0x3 | |
1136 arg = ord(insn[build_arg.off / 2]) | \ | |
1137 (ord(insn[build_arg.off / 2 + 1]) << 8) | \ | |
1138 (ord(insn[build_arg.off / 2 + 2]) << 16)| \ | |
1139 (ord(insn[build_arg.off / 2 + 3]) << 24) | |
1140 build_arg.off = build_arg.off + 8 | |
1141 elif sz == 16: | |
1142 build_arg.off = (build_arg.off + 3) & ~0x3 | |
1143 arg = ord(insn[build_arg.off / 2]) | \ | |
1144 (ord(insn[build_arg.off / 2 + 1]) << 8) | \ | |
1145 (ord(insn[build_arg.off / 2 + 2]) << 16)| \ | |
1146 (ord(insn[build_arg.off / 2 + 3]) << 24)| \ | |
1147 (ord(insn[build_arg.off / 2 + 4]) << 32)| \ | |
1148 (ord(insn[build_arg.off / 2 + 5]) << 40)| \ | |
1149 (ord(insn[build_arg.off / 2 + 6]) << 48)| \ | |
1150 (ord(insn[build_arg.off / 2 + 7]) << 52) | |
1151 build_arg.off = build_arg.off + 16 | |
1152 else: | |
1153 raise ValueError, 'Invalid argument size %d' % (sz) | |
1154 | |
1155 return arg | |
1156 | |
1157 build_arg.off = 2 | |
1158 | |
1159 opcode = ord(insn[0]) | |
1160 | |
1161 fmt = opcode_fmts[opcode] | |
1162 fmt_name = fmt_names[fmt] | |
1163 fmt_parse_cfg = fmt_parse_cfgs[fmt_name] | |
1164 | |
1165 args = tuple([build_arg(sz) for sz in fmt_parse_cfg]) | |
1166 op_vector = (opcode, args) | |
1167 return op_vector | |
1168 | |
1169 | |
80 | 1170 ## \brief Encode a opcode and arguments vector to an instruction |
69 | 1171 def encode_inst(op_vector): |
1172 def encode_arg(arg, sz): | |
1173 if sz == 1: | |
1174 if encode_arg.off & 0x1: | |
1175 arg_txt = chr((arg << 4) | encode_arg.value) | |
1176 else: | |
1177 arg_txt = '' | |
1178 encode_arg.value = arg | |
1179 pass | |
1180 encode_arg.off = encode_arg.off + 1 | |
1181 pass | |
1182 elif sz in (2, 4, 8, 16): | |
1183 if encode_arg.off & 0x1: | |
1184 arg_txt = chr(encode_arg.value) | |
1185 encode_arg.off = encode_arg.off + 1 | |
1186 else: | |
1187 arg_txt = '' | |
1188 pass | |
1189 if sz == 2: | |
1190 arg_txt = arg_txt + chr(arg) | |
1191 encode_arg.off = encode_arg.off + 2 | |
1192 elif sz in (4, 8, 16): | |
1193 while encode_arg.off % 4: | |
1194 encode_arg.off = encoe_arg.off + 1 | |
1195 arg_txt = arg_txt + chr(0) | |
1196 pass | |
1197 for i in range(sz / 4): | |
1198 arg_txt = arg_txt + \ | |
1199 chr(arg & 0xff) + chr((arg >> 8) & 0xff) | |
1200 pass | |
1201 pass | |
1202 pass | |
1203 else: | |
1204 raise ValueError, 'invalid argument size %d' % (sz) | |
1205 | |
1206 return arg_txt | |
1207 encode_arg.off = 2 | |
1208 encode_arg.value = 0 | |
1209 | |
1210 opcode, args = op_vector | |
1211 | |
1212 fmt = opcode_fmts[opcode] | |
1213 fmt_name = fmt_names[fmt] | |
1214 fmt_parse_cfg = fmt_parse_cfgs[fmt_name] | |
1215 arg_part = ''.join([encode_arg(arg, sz) | |
1216 for arg, sz in map(None, args, fmt_parse_cfg)]) | |
72
6c2efdeffa7b
Strip instruction string for opcode with no any argument.
Thinker K.F. Li <thinker@codemud.net>
parents:
70
diff
changeset
|
1217 |
73
6d56483b56cd
Round size of encoded Dalvik instructions to 2 times.
Thinker K.F. Li <thinker@codemud.net>
parents:
72
diff
changeset
|
1218 while encode_arg.off % 4: |
6d56483b56cd
Round size of encoded Dalvik instructions to 2 times.
Thinker K.F. Li <thinker@codemud.net>
parents:
72
diff
changeset
|
1219 arg_part = arg_part + encode_arg(0, 1) |
6d56483b56cd
Round size of encoded Dalvik instructions to 2 times.
Thinker K.F. Li <thinker@codemud.net>
parents:
72
diff
changeset
|
1220 pass |
6d56483b56cd
Round size of encoded Dalvik instructions to 2 times.
Thinker K.F. Li <thinker@codemud.net>
parents:
72
diff
changeset
|
1221 |
72
6c2efdeffa7b
Strip instruction string for opcode with no any argument.
Thinker K.F. Li <thinker@codemud.net>
parents:
70
diff
changeset
|
1222 inst = chr(opcode) + arg_part |
6c2efdeffa7b
Strip instruction string for opcode with no any argument.
Thinker K.F. Li <thinker@codemud.net>
parents:
70
diff
changeset
|
1223 |
69 | 1224 return inst |
1225 | |
70
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1226 |
80 | 1227 ## \brief Generate formated string for given opcode and arguments vector |
70
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1228 def format_inst(op_vector): |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1229 opcode, args = op_vector |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1230 |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1231 opname = opcode_names[opcode] |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1232 |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1233 fmt = opcode_fmts[opcode] |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1234 fmt_name = fmt_names[fmt] |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1235 fmt_str = fmt_fmtstr[fmt_name] |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1236 |
72
6c2efdeffa7b
Strip instruction string for opcode with no any argument.
Thinker K.F. Li <thinker@codemud.net>
parents:
70
diff
changeset
|
1237 if fmt_str: |
6c2efdeffa7b
Strip instruction string for opcode with no any argument.
Thinker K.F. Li <thinker@codemud.net>
parents:
70
diff
changeset
|
1238 line = opname + ' ' + fmt_str.format(*args) |
6c2efdeffa7b
Strip instruction string for opcode with no any argument.
Thinker K.F. Li <thinker@codemud.net>
parents:
70
diff
changeset
|
1239 else: |
6c2efdeffa7b
Strip instruction string for opcode with no any argument.
Thinker K.F. Li <thinker@codemud.net>
parents:
70
diff
changeset
|
1240 line = opname |
6c2efdeffa7b
Strip instruction string for opcode with no any argument.
Thinker K.F. Li <thinker@codemud.net>
parents:
70
diff
changeset
|
1241 pass |
70
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1242 return line |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1243 |
16a5a8eb1831
Add format_inst() in dalvik_opcodes.py
Thinker K.F. Li <thinker@codemud.net>
parents:
69
diff
changeset
|
1244 |
82
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1245 ## \brief Split a block of code into instructions. |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1246 def split_blk_2_insns(insn_blk): |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1247 start = 0 |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1248 while start < len(insn_blk): |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1249 opcode = ord(insn_blk[start]) |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1250 width = opcode_widths[opcode] |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1251 stop = start + width * 2 |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1252 inst = insn_blk[start:stop] |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1253 yield inst |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1254 start = stop |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1255 pass |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1256 pass |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1257 |
032495f8dd12
Split block of code into instructions and fix insn format info
Thinker K.F. Li <thinker@codemud.net>
parents:
80
diff
changeset
|
1258 |
69 | 1259 del name |
78
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1260 del _names |
9a64fa2d78b7
Refactoring dalvik_opcodes to be more structured
Thinker K.F. Li <thinker@codemud.net>
parents:
73
diff
changeset
|
1261 del _opcode |