1 /*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 /*
18 * Table of Dalvik opcode names.
19 *
20 * IMPORTANT NOTE: The contents of this file are mostly generated
21 * automatically by the opcode-gen tool. Any edits to the generated
22 * sections will get wiped out the next time the tool is run.
23 */
24
25 #include "DexOpcodes.h"
26 #include <assert.h>
27
28 /*
29 * Dalvik opcode names.
30 */
31 static const char* gOpNames[kNumPackedOpcodes] = {
32 // BEGIN(libdex-opcode-names); GENERATED AUTOMATICALLY BY opcode-gen
33 "nop",
34 "move",
35 "move/from16",
36 "move/16",
37 "move-wide",
38 "move-wide/from16",
39 "move-wide/16",
40 "move-object",
41 "move-object/from16",
42 "move-object/16",
43 "move-result",
44 "move-result-wide",
45 "move-result-object",
46 "move-exception",
47 "return-void",
48 "return",
49 "return-wide",
50 "return-object",
51 "const/4",
52 "const/16",
53 "const",
54 "const/high16",
55 "const-wide/16",
56 "const-wide/32",
57 "const-wide",
58 "const-wide/high16",
59 "const-string",
60 "const-string/jumbo",
61 "const-class",
62 "monitor-enter",
63 "monitor-exit",
64 "check-cast",
65 "instance-of",
66 "array-length",
67 "new-instance",
68 "new-array",
69 "filled-new-array",
70 "filled-new-array/range",
71 "fill-array-data",
72 "throw",
73 "goto",
74 "goto/16",
75 "goto/32",
76 "packed-switch",
77 "sparse-switch",
78 "cmpl-float",
79 "cmpg-float",
80 "cmpl-double",
81 "cmpg-double",
82 "cmp-long",
83 "if-eq",
84 "if-ne",
85 "if-lt",
86 "if-ge",
87 "if-gt",
88 "if-le",
89 "if-eqz",
90 "if-nez",
91 "if-ltz",
92 "if-gez",
93 "if-gtz",
94 "if-lez",
95 "unused-3e",
96 "unused-3f",
97 "unused-40",
98 "unused-41",
99 "unused-42",
100 "unused-43",
101 "aget",
102 "aget-wide",
103 "aget-object",
104 "aget-boolean",
105 "aget-byte",
106 "aget-char",
107 "aget-short",
108 "aput",
109 "aput-wide",
110 "aput-object",
111 "aput-boolean",
112 "aput-byte",
113 "aput-char",
114 "aput-short",
115 "iget",
116 "iget-wide",
117 "iget-object",
118 "iget-boolean",
119 "iget-byte",
120 "iget-char",
121 "iget-short",
122 "iput",
123 "iput-wide",
124 "iput-object",
125 "iput-boolean",
126 "iput-byte",
127 "iput-char",
128 "iput-short",
129 "sget",
130 "sget-wide",
131 "sget-object",
132 "sget-boolean",
133 "sget-byte",
134 "sget-char",
135 "sget-short",
136 "sput",
137 "sput-wide",
138 "sput-object",
139 "sput-boolean",
140 "sput-byte",
141 "sput-char",
142 "sput-short",
143 "invoke-virtual",
144 "invoke-super",
145 "invoke-direct",
146 "invoke-static",
147 "invoke-interface",
148 "unused-73",
149 "invoke-virtual/range",
150 "invoke-super/range",
151 "invoke-direct/range",
152 "invoke-static/range",
153 "invoke-interface/range",
154 "unused-79",
155 "unused-7a",
156 "neg-int",
157 "not-int",
158 "neg-long",
159 "not-long",
160 "neg-float",
161 "neg-double",
162 "int-to-long",
163 "int-to-float",
164 "int-to-double",
165 "long-to-int",
166 "long-to-float",
167 "long-to-double",
168 "float-to-int",
169 "float-to-long",
170 "float-to-double",
171 "double-to-int",
172 "double-to-long",
173 "double-to-float",
174 "int-to-byte",
175 "int-to-char",
176 "int-to-short",
177 "add-int",
178 "sub-int",
179 "mul-int",
180 "div-int",
181 "rem-int",
182 "and-int",
183 "or-int",
184 "xor-int",
185 "shl-int",
186 "shr-int",
187 "ushr-int",
188 "add-long",
189 "sub-long",
190 "mul-long",
191 "div-long",
192 "rem-long",
193 "and-long",
194 "or-long",
195 "xor-long",
196 "shl-long",
197 "shr-long",
198 "ushr-long",
199 "add-float",
200 "sub-float",
201 "mul-float",
202 "div-float",
203 "rem-float",
204 "add-double",
205 "sub-double",
206 "mul-double",
207 "div-double",
208 "rem-double",
209 "add-int/2addr",
210 "sub-int/2addr",
211 "mul-int/2addr",
212 "div-int/2addr",
213 "rem-int/2addr",
214 "and-int/2addr",
215 "or-int/2addr",
216 "xor-int/2addr",
217 "shl-int/2addr",
218 "shr-int/2addr",
219 "ushr-int/2addr",
220 "add-long/2addr",
221 "sub-long/2addr",
222 "mul-long/2addr",
223 "div-long/2addr",
224 "rem-long/2addr",
225 "and-long/2addr",
226 "or-long/2addr",
227 "xor-long/2addr",
228 "shl-long/2addr",
229 "shr-long/2addr",
230 "ushr-long/2addr",
231 "add-float/2addr",
232 "sub-float/2addr",
233 "mul-float/2addr",
234 "div-float/2addr",
235 "rem-float/2addr",
236 "add-double/2addr",
237 "sub-double/2addr",
238 "mul-double/2addr",
239 "div-double/2addr",
240 "rem-double/2addr",
241 "add-int/lit16",
242 "rsub-int",
243 "mul-int/lit16",
244 "div-int/lit16",
245 "rem-int/lit16",
246 "and-int/lit16",
247 "or-int/lit16",
248 "xor-int/lit16",
249 "add-int/lit8",
250 "rsub-int/lit8",
251 "mul-int/lit8",
252 "div-int/lit8",
253 "rem-int/lit8",
254 "and-int/lit8",
255 "or-int/lit8",
256 "xor-int/lit8",
257 "shl-int/lit8",
258 "shr-int/lit8",
259 "ushr-int/lit8",
260 "+iget-volatile",
261 "+iput-volatile",
262 "+sget-volatile",
263 "+sput-volatile",
264 "+iget-object-volatile",
265 "+iget-wide-volatile",
266 "+iput-wide-volatile",
267 "+sget-wide-volatile",
268 "+sput-wide-volatile",
269 "^breakpoint",
270 "^throw-verification-error",
271 "+execute-inline",
272 "+execute-inline/range",
273 "+invoke-object-init/range",
274 "+return-void-barrier",
275 "+iget-quick",
276 "+iget-wide-quick",
277 "+iget-object-quick",
278 "+iput-quick",
279 "+iput-wide-quick",
280 "+iput-object-quick",
281 "+invoke-virtual-quick",
282 "+invoke-virtual-quick/range",
283 "invoke-polymorphic",
284 "invoke-polymorphic/range",
285 "invoke-custom",
286 "invoke-custom/range",
287 "+sput-object-volatile",
288 "unused-ff",
289 // END(libdex-opcode-names)
290 };
291
292 /*
293 * Return the name of an opcode.
294 */
dexGetOpcodeName(Opcode op)295 const char* dexGetOpcodeName(Opcode op)
296 {
297 assert(op >= 0 && op < kNumPackedOpcodes);
298 return gOpNames[op];
299 }
300