• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 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 package com.android.dx.dex.code;
18 
19 import com.android.dx.dex.DexOptions;
20 import com.android.dx.dex.code.form.Form10t;
21 import com.android.dx.dex.code.form.Form10x;
22 import com.android.dx.dex.code.form.Form11n;
23 import com.android.dx.dex.code.form.Form11x;
24 import com.android.dx.dex.code.form.Form12x;
25 import com.android.dx.dex.code.form.Form20t;
26 import com.android.dx.dex.code.form.Form21c;
27 import com.android.dx.dex.code.form.Form21h;
28 import com.android.dx.dex.code.form.Form21s;
29 import com.android.dx.dex.code.form.Form21t;
30 import com.android.dx.dex.code.form.Form22b;
31 import com.android.dx.dex.code.form.Form22c;
32 import com.android.dx.dex.code.form.Form22s;
33 import com.android.dx.dex.code.form.Form22t;
34 import com.android.dx.dex.code.form.Form22x;
35 import com.android.dx.dex.code.form.Form23x;
36 import com.android.dx.dex.code.form.Form30t;
37 import com.android.dx.dex.code.form.Form31c;
38 import com.android.dx.dex.code.form.Form31i;
39 import com.android.dx.dex.code.form.Form31t;
40 import com.android.dx.dex.code.form.Form32x;
41 import com.android.dx.dex.code.form.Form35c;
42 import com.android.dx.dex.code.form.Form3rc;
43 import com.android.dx.dex.code.form.Form45cc;
44 import com.android.dx.dex.code.form.Form4rcc;
45 import com.android.dx.dex.code.form.Form51l;
46 import com.android.dx.dex.code.form.SpecialFormat;
47 import com.android.dx.io.Opcodes;
48 
49 /**
50  * Standard instances of {@link Dop} and utility methods for getting
51  * them.
52  */
53 public final class Dops {
54     /** {@code non-null;} array containing all the standard instances */
55     private static final Dop[] DOPS;
56 
57     /**
58      * pseudo-opcode used for nonstandard formatted "instructions"
59      * (which are mostly not actually instructions, though they do
60      * appear in instruction lists). TODO: Retire the usage of this
61      * constant.
62      */
63     public static final Dop SPECIAL_FORMAT =
64         new Dop(Opcodes.SPECIAL_FORMAT, Opcodes.SPECIAL_FORMAT,
65                 Opcodes.NO_NEXT, SpecialFormat.THE_ONE, false);
66 
67     // BEGIN(dops); GENERATED AUTOMATICALLY BY opcode-gen
68     public static final Dop NOP =
69         new Dop(Opcodes.NOP, Opcodes.NOP,
70             Opcodes.NO_NEXT, Form10x.THE_ONE, false);
71 
72     public static final Dop MOVE =
73         new Dop(Opcodes.MOVE, Opcodes.MOVE,
74             Opcodes.MOVE_FROM16, Form12x.THE_ONE, true);
75 
76     public static final Dop MOVE_FROM16 =
77         new Dop(Opcodes.MOVE_FROM16, Opcodes.MOVE,
78             Opcodes.MOVE_16, Form22x.THE_ONE, true);
79 
80     public static final Dop MOVE_16 =
81         new Dop(Opcodes.MOVE_16, Opcodes.MOVE,
82             Opcodes.NO_NEXT, Form32x.THE_ONE, true);
83 
84     public static final Dop MOVE_WIDE =
85         new Dop(Opcodes.MOVE_WIDE, Opcodes.MOVE_WIDE,
86             Opcodes.MOVE_WIDE_FROM16, Form12x.THE_ONE, true);
87 
88     public static final Dop MOVE_WIDE_FROM16 =
89         new Dop(Opcodes.MOVE_WIDE_FROM16, Opcodes.MOVE_WIDE,
90             Opcodes.MOVE_WIDE_16, Form22x.THE_ONE, true);
91 
92     public static final Dop MOVE_WIDE_16 =
93         new Dop(Opcodes.MOVE_WIDE_16, Opcodes.MOVE_WIDE,
94             Opcodes.NO_NEXT, Form32x.THE_ONE, true);
95 
96     public static final Dop MOVE_OBJECT =
97         new Dop(Opcodes.MOVE_OBJECT, Opcodes.MOVE_OBJECT,
98             Opcodes.MOVE_OBJECT_FROM16, Form12x.THE_ONE, true);
99 
100     public static final Dop MOVE_OBJECT_FROM16 =
101         new Dop(Opcodes.MOVE_OBJECT_FROM16, Opcodes.MOVE_OBJECT,
102             Opcodes.MOVE_OBJECT_16, Form22x.THE_ONE, true);
103 
104     public static final Dop MOVE_OBJECT_16 =
105         new Dop(Opcodes.MOVE_OBJECT_16, Opcodes.MOVE_OBJECT,
106             Opcodes.NO_NEXT, Form32x.THE_ONE, true);
107 
108     public static final Dop MOVE_RESULT =
109         new Dop(Opcodes.MOVE_RESULT, Opcodes.MOVE_RESULT,
110             Opcodes.NO_NEXT, Form11x.THE_ONE, true);
111 
112     public static final Dop MOVE_RESULT_WIDE =
113         new Dop(Opcodes.MOVE_RESULT_WIDE, Opcodes.MOVE_RESULT_WIDE,
114             Opcodes.NO_NEXT, Form11x.THE_ONE, true);
115 
116     public static final Dop MOVE_RESULT_OBJECT =
117         new Dop(Opcodes.MOVE_RESULT_OBJECT, Opcodes.MOVE_RESULT_OBJECT,
118             Opcodes.NO_NEXT, Form11x.THE_ONE, true);
119 
120     public static final Dop MOVE_EXCEPTION =
121         new Dop(Opcodes.MOVE_EXCEPTION, Opcodes.MOVE_EXCEPTION,
122             Opcodes.NO_NEXT, Form11x.THE_ONE, true);
123 
124     public static final Dop RETURN_VOID =
125         new Dop(Opcodes.RETURN_VOID, Opcodes.RETURN_VOID,
126             Opcodes.NO_NEXT, Form10x.THE_ONE, false);
127 
128     public static final Dop RETURN =
129         new Dop(Opcodes.RETURN, Opcodes.RETURN,
130             Opcodes.NO_NEXT, Form11x.THE_ONE, false);
131 
132     public static final Dop RETURN_WIDE =
133         new Dop(Opcodes.RETURN_WIDE, Opcodes.RETURN_WIDE,
134             Opcodes.NO_NEXT, Form11x.THE_ONE, false);
135 
136     public static final Dop RETURN_OBJECT =
137         new Dop(Opcodes.RETURN_OBJECT, Opcodes.RETURN_OBJECT,
138             Opcodes.NO_NEXT, Form11x.THE_ONE, false);
139 
140     public static final Dop CONST_4 =
141         new Dop(Opcodes.CONST_4, Opcodes.CONST,
142             Opcodes.CONST_16, Form11n.THE_ONE, true);
143 
144     public static final Dop CONST_16 =
145         new Dop(Opcodes.CONST_16, Opcodes.CONST,
146             Opcodes.CONST_HIGH16, Form21s.THE_ONE, true);
147 
148     public static final Dop CONST =
149         new Dop(Opcodes.CONST, Opcodes.CONST,
150             Opcodes.NO_NEXT, Form31i.THE_ONE, true);
151 
152     public static final Dop CONST_HIGH16 =
153         new Dop(Opcodes.CONST_HIGH16, Opcodes.CONST,
154             Opcodes.CONST, Form21h.THE_ONE, true);
155 
156     public static final Dop CONST_WIDE_16 =
157         new Dop(Opcodes.CONST_WIDE_16, Opcodes.CONST_WIDE,
158             Opcodes.CONST_WIDE_HIGH16, Form21s.THE_ONE, true);
159 
160     public static final Dop CONST_WIDE_32 =
161         new Dop(Opcodes.CONST_WIDE_32, Opcodes.CONST_WIDE,
162             Opcodes.CONST_WIDE, Form31i.THE_ONE, true);
163 
164     public static final Dop CONST_WIDE =
165         new Dop(Opcodes.CONST_WIDE, Opcodes.CONST_WIDE,
166             Opcodes.NO_NEXT, Form51l.THE_ONE, true);
167 
168     public static final Dop CONST_WIDE_HIGH16 =
169         new Dop(Opcodes.CONST_WIDE_HIGH16, Opcodes.CONST_WIDE,
170             Opcodes.CONST_WIDE_32, Form21h.THE_ONE, true);
171 
172     public static final Dop CONST_STRING =
173         new Dop(Opcodes.CONST_STRING, Opcodes.CONST_STRING,
174             Opcodes.CONST_STRING_JUMBO, Form21c.THE_ONE, true);
175 
176     public static final Dop CONST_STRING_JUMBO =
177         new Dop(Opcodes.CONST_STRING_JUMBO, Opcodes.CONST_STRING,
178             Opcodes.NO_NEXT, Form31c.THE_ONE, true);
179 
180     public static final Dop CONST_CLASS =
181         new Dop(Opcodes.CONST_CLASS, Opcodes.CONST_CLASS,
182             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
183 
184     public static final Dop MONITOR_ENTER =
185         new Dop(Opcodes.MONITOR_ENTER, Opcodes.MONITOR_ENTER,
186             Opcodes.NO_NEXT, Form11x.THE_ONE, false);
187 
188     public static final Dop MONITOR_EXIT =
189         new Dop(Opcodes.MONITOR_EXIT, Opcodes.MONITOR_EXIT,
190             Opcodes.NO_NEXT, Form11x.THE_ONE, false);
191 
192     public static final Dop CHECK_CAST =
193         new Dop(Opcodes.CHECK_CAST, Opcodes.CHECK_CAST,
194             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
195 
196     public static final Dop INSTANCE_OF =
197         new Dop(Opcodes.INSTANCE_OF, Opcodes.INSTANCE_OF,
198             Opcodes.NO_NEXT, Form22c.THE_ONE, true);
199 
200     public static final Dop ARRAY_LENGTH =
201         new Dop(Opcodes.ARRAY_LENGTH, Opcodes.ARRAY_LENGTH,
202             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
203 
204     public static final Dop NEW_INSTANCE =
205         new Dop(Opcodes.NEW_INSTANCE, Opcodes.NEW_INSTANCE,
206             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
207 
208     public static final Dop NEW_ARRAY =
209         new Dop(Opcodes.NEW_ARRAY, Opcodes.NEW_ARRAY,
210             Opcodes.NO_NEXT, Form22c.THE_ONE, true);
211 
212     public static final Dop FILLED_NEW_ARRAY =
213         new Dop(Opcodes.FILLED_NEW_ARRAY, Opcodes.FILLED_NEW_ARRAY,
214             Opcodes.FILLED_NEW_ARRAY_RANGE, Form35c.THE_ONE, false);
215 
216     public static final Dop FILLED_NEW_ARRAY_RANGE =
217         new Dop(Opcodes.FILLED_NEW_ARRAY_RANGE, Opcodes.FILLED_NEW_ARRAY,
218             Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
219 
220     public static final Dop FILL_ARRAY_DATA =
221         new Dop(Opcodes.FILL_ARRAY_DATA, Opcodes.FILL_ARRAY_DATA,
222             Opcodes.NO_NEXT, Form31t.THE_ONE, false);
223 
224     public static final Dop THROW =
225         new Dop(Opcodes.THROW, Opcodes.THROW,
226             Opcodes.NO_NEXT, Form11x.THE_ONE, false);
227 
228     public static final Dop GOTO =
229         new Dop(Opcodes.GOTO, Opcodes.GOTO,
230             Opcodes.GOTO_16, Form10t.THE_ONE, false);
231 
232     public static final Dop GOTO_16 =
233         new Dop(Opcodes.GOTO_16, Opcodes.GOTO,
234             Opcodes.GOTO_32, Form20t.THE_ONE, false);
235 
236     public static final Dop GOTO_32 =
237         new Dop(Opcodes.GOTO_32, Opcodes.GOTO,
238             Opcodes.NO_NEXT, Form30t.THE_ONE, false);
239 
240     public static final Dop PACKED_SWITCH =
241         new Dop(Opcodes.PACKED_SWITCH, Opcodes.PACKED_SWITCH,
242             Opcodes.NO_NEXT, Form31t.THE_ONE, false);
243 
244     public static final Dop SPARSE_SWITCH =
245         new Dop(Opcodes.SPARSE_SWITCH, Opcodes.SPARSE_SWITCH,
246             Opcodes.NO_NEXT, Form31t.THE_ONE, false);
247 
248     public static final Dop CMPL_FLOAT =
249         new Dop(Opcodes.CMPL_FLOAT, Opcodes.CMPL_FLOAT,
250             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
251 
252     public static final Dop CMPG_FLOAT =
253         new Dop(Opcodes.CMPG_FLOAT, Opcodes.CMPG_FLOAT,
254             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
255 
256     public static final Dop CMPL_DOUBLE =
257         new Dop(Opcodes.CMPL_DOUBLE, Opcodes.CMPL_DOUBLE,
258             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
259 
260     public static final Dop CMPG_DOUBLE =
261         new Dop(Opcodes.CMPG_DOUBLE, Opcodes.CMPG_DOUBLE,
262             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
263 
264     public static final Dop CMP_LONG =
265         new Dop(Opcodes.CMP_LONG, Opcodes.CMP_LONG,
266             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
267 
268     public static final Dop IF_EQ =
269         new Dop(Opcodes.IF_EQ, Opcodes.IF_EQ,
270             Opcodes.NO_NEXT, Form22t.THE_ONE, false);
271 
272     public static final Dop IF_NE =
273         new Dop(Opcodes.IF_NE, Opcodes.IF_NE,
274             Opcodes.NO_NEXT, Form22t.THE_ONE, false);
275 
276     public static final Dop IF_LT =
277         new Dop(Opcodes.IF_LT, Opcodes.IF_LT,
278             Opcodes.NO_NEXT, Form22t.THE_ONE, false);
279 
280     public static final Dop IF_GE =
281         new Dop(Opcodes.IF_GE, Opcodes.IF_GE,
282             Opcodes.NO_NEXT, Form22t.THE_ONE, false);
283 
284     public static final Dop IF_GT =
285         new Dop(Opcodes.IF_GT, Opcodes.IF_GT,
286             Opcodes.NO_NEXT, Form22t.THE_ONE, false);
287 
288     public static final Dop IF_LE =
289         new Dop(Opcodes.IF_LE, Opcodes.IF_LE,
290             Opcodes.NO_NEXT, Form22t.THE_ONE, false);
291 
292     public static final Dop IF_EQZ =
293         new Dop(Opcodes.IF_EQZ, Opcodes.IF_EQZ,
294             Opcodes.NO_NEXT, Form21t.THE_ONE, false);
295 
296     public static final Dop IF_NEZ =
297         new Dop(Opcodes.IF_NEZ, Opcodes.IF_NEZ,
298             Opcodes.NO_NEXT, Form21t.THE_ONE, false);
299 
300     public static final Dop IF_LTZ =
301         new Dop(Opcodes.IF_LTZ, Opcodes.IF_LTZ,
302             Opcodes.NO_NEXT, Form21t.THE_ONE, false);
303 
304     public static final Dop IF_GEZ =
305         new Dop(Opcodes.IF_GEZ, Opcodes.IF_GEZ,
306             Opcodes.NO_NEXT, Form21t.THE_ONE, false);
307 
308     public static final Dop IF_GTZ =
309         new Dop(Opcodes.IF_GTZ, Opcodes.IF_GTZ,
310             Opcodes.NO_NEXT, Form21t.THE_ONE, false);
311 
312     public static final Dop IF_LEZ =
313         new Dop(Opcodes.IF_LEZ, Opcodes.IF_LEZ,
314             Opcodes.NO_NEXT, Form21t.THE_ONE, false);
315 
316     public static final Dop AGET =
317         new Dop(Opcodes.AGET, Opcodes.AGET,
318             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
319 
320     public static final Dop AGET_WIDE =
321         new Dop(Opcodes.AGET_WIDE, Opcodes.AGET_WIDE,
322             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
323 
324     public static final Dop AGET_OBJECT =
325         new Dop(Opcodes.AGET_OBJECT, Opcodes.AGET_OBJECT,
326             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
327 
328     public static final Dop AGET_BOOLEAN =
329         new Dop(Opcodes.AGET_BOOLEAN, Opcodes.AGET_BOOLEAN,
330             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
331 
332     public static final Dop AGET_BYTE =
333         new Dop(Opcodes.AGET_BYTE, Opcodes.AGET_BYTE,
334             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
335 
336     public static final Dop AGET_CHAR =
337         new Dop(Opcodes.AGET_CHAR, Opcodes.AGET_CHAR,
338             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
339 
340     public static final Dop AGET_SHORT =
341         new Dop(Opcodes.AGET_SHORT, Opcodes.AGET_SHORT,
342             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
343 
344     public static final Dop APUT =
345         new Dop(Opcodes.APUT, Opcodes.APUT,
346             Opcodes.NO_NEXT, Form23x.THE_ONE, false);
347 
348     public static final Dop APUT_WIDE =
349         new Dop(Opcodes.APUT_WIDE, Opcodes.APUT_WIDE,
350             Opcodes.NO_NEXT, Form23x.THE_ONE, false);
351 
352     public static final Dop APUT_OBJECT =
353         new Dop(Opcodes.APUT_OBJECT, Opcodes.APUT_OBJECT,
354             Opcodes.NO_NEXT, Form23x.THE_ONE, false);
355 
356     public static final Dop APUT_BOOLEAN =
357         new Dop(Opcodes.APUT_BOOLEAN, Opcodes.APUT_BOOLEAN,
358             Opcodes.NO_NEXT, Form23x.THE_ONE, false);
359 
360     public static final Dop APUT_BYTE =
361         new Dop(Opcodes.APUT_BYTE, Opcodes.APUT_BYTE,
362             Opcodes.NO_NEXT, Form23x.THE_ONE, false);
363 
364     public static final Dop APUT_CHAR =
365         new Dop(Opcodes.APUT_CHAR, Opcodes.APUT_CHAR,
366             Opcodes.NO_NEXT, Form23x.THE_ONE, false);
367 
368     public static final Dop APUT_SHORT =
369         new Dop(Opcodes.APUT_SHORT, Opcodes.APUT_SHORT,
370             Opcodes.NO_NEXT, Form23x.THE_ONE, false);
371 
372     public static final Dop IGET =
373         new Dop(Opcodes.IGET, Opcodes.IGET,
374             Opcodes.NO_NEXT, Form22c.THE_ONE, true);
375 
376     public static final Dop IGET_WIDE =
377         new Dop(Opcodes.IGET_WIDE, Opcodes.IGET_WIDE,
378             Opcodes.NO_NEXT, Form22c.THE_ONE, true);
379 
380     public static final Dop IGET_OBJECT =
381         new Dop(Opcodes.IGET_OBJECT, Opcodes.IGET_OBJECT,
382             Opcodes.NO_NEXT, Form22c.THE_ONE, true);
383 
384     public static final Dop IGET_BOOLEAN =
385         new Dop(Opcodes.IGET_BOOLEAN, Opcodes.IGET_BOOLEAN,
386             Opcodes.NO_NEXT, Form22c.THE_ONE, true);
387 
388     public static final Dop IGET_BYTE =
389         new Dop(Opcodes.IGET_BYTE, Opcodes.IGET_BYTE,
390             Opcodes.NO_NEXT, Form22c.THE_ONE, true);
391 
392     public static final Dop IGET_CHAR =
393         new Dop(Opcodes.IGET_CHAR, Opcodes.IGET_CHAR,
394             Opcodes.NO_NEXT, Form22c.THE_ONE, true);
395 
396     public static final Dop IGET_SHORT =
397         new Dop(Opcodes.IGET_SHORT, Opcodes.IGET_SHORT,
398             Opcodes.NO_NEXT, Form22c.THE_ONE, true);
399 
400     public static final Dop IPUT =
401         new Dop(Opcodes.IPUT, Opcodes.IPUT,
402             Opcodes.NO_NEXT, Form22c.THE_ONE, false);
403 
404     public static final Dop IPUT_WIDE =
405         new Dop(Opcodes.IPUT_WIDE, Opcodes.IPUT_WIDE,
406             Opcodes.NO_NEXT, Form22c.THE_ONE, false);
407 
408     public static final Dop IPUT_OBJECT =
409         new Dop(Opcodes.IPUT_OBJECT, Opcodes.IPUT_OBJECT,
410             Opcodes.NO_NEXT, Form22c.THE_ONE, false);
411 
412     public static final Dop IPUT_BOOLEAN =
413         new Dop(Opcodes.IPUT_BOOLEAN, Opcodes.IPUT_BOOLEAN,
414             Opcodes.NO_NEXT, Form22c.THE_ONE, false);
415 
416     public static final Dop IPUT_BYTE =
417         new Dop(Opcodes.IPUT_BYTE, Opcodes.IPUT_BYTE,
418             Opcodes.NO_NEXT, Form22c.THE_ONE, false);
419 
420     public static final Dop IPUT_CHAR =
421         new Dop(Opcodes.IPUT_CHAR, Opcodes.IPUT_CHAR,
422             Opcodes.NO_NEXT, Form22c.THE_ONE, false);
423 
424     public static final Dop IPUT_SHORT =
425         new Dop(Opcodes.IPUT_SHORT, Opcodes.IPUT_SHORT,
426             Opcodes.NO_NEXT, Form22c.THE_ONE, false);
427 
428     public static final Dop SGET =
429         new Dop(Opcodes.SGET, Opcodes.SGET,
430             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
431 
432     public static final Dop SGET_WIDE =
433         new Dop(Opcodes.SGET_WIDE, Opcodes.SGET_WIDE,
434             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
435 
436     public static final Dop SGET_OBJECT =
437         new Dop(Opcodes.SGET_OBJECT, Opcodes.SGET_OBJECT,
438             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
439 
440     public static final Dop SGET_BOOLEAN =
441         new Dop(Opcodes.SGET_BOOLEAN, Opcodes.SGET_BOOLEAN,
442             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
443 
444     public static final Dop SGET_BYTE =
445         new Dop(Opcodes.SGET_BYTE, Opcodes.SGET_BYTE,
446             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
447 
448     public static final Dop SGET_CHAR =
449         new Dop(Opcodes.SGET_CHAR, Opcodes.SGET_CHAR,
450             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
451 
452     public static final Dop SGET_SHORT =
453         new Dop(Opcodes.SGET_SHORT, Opcodes.SGET_SHORT,
454             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
455 
456     public static final Dop SPUT =
457         new Dop(Opcodes.SPUT, Opcodes.SPUT,
458             Opcodes.NO_NEXT, Form21c.THE_ONE, false);
459 
460     public static final Dop SPUT_WIDE =
461         new Dop(Opcodes.SPUT_WIDE, Opcodes.SPUT_WIDE,
462             Opcodes.NO_NEXT, Form21c.THE_ONE, false);
463 
464     public static final Dop SPUT_OBJECT =
465         new Dop(Opcodes.SPUT_OBJECT, Opcodes.SPUT_OBJECT,
466             Opcodes.NO_NEXT, Form21c.THE_ONE, false);
467 
468     public static final Dop SPUT_BOOLEAN =
469         new Dop(Opcodes.SPUT_BOOLEAN, Opcodes.SPUT_BOOLEAN,
470             Opcodes.NO_NEXT, Form21c.THE_ONE, false);
471 
472     public static final Dop SPUT_BYTE =
473         new Dop(Opcodes.SPUT_BYTE, Opcodes.SPUT_BYTE,
474             Opcodes.NO_NEXT, Form21c.THE_ONE, false);
475 
476     public static final Dop SPUT_CHAR =
477         new Dop(Opcodes.SPUT_CHAR, Opcodes.SPUT_CHAR,
478             Opcodes.NO_NEXT, Form21c.THE_ONE, false);
479 
480     public static final Dop SPUT_SHORT =
481         new Dop(Opcodes.SPUT_SHORT, Opcodes.SPUT_SHORT,
482             Opcodes.NO_NEXT, Form21c.THE_ONE, false);
483 
484     public static final Dop INVOKE_VIRTUAL =
485         new Dop(Opcodes.INVOKE_VIRTUAL, Opcodes.INVOKE_VIRTUAL,
486             Opcodes.INVOKE_VIRTUAL_RANGE, Form35c.THE_ONE, false);
487 
488     public static final Dop INVOKE_SUPER =
489         new Dop(Opcodes.INVOKE_SUPER, Opcodes.INVOKE_SUPER,
490             Opcodes.INVOKE_SUPER_RANGE, Form35c.THE_ONE, false);
491 
492     public static final Dop INVOKE_DIRECT =
493         new Dop(Opcodes.INVOKE_DIRECT, Opcodes.INVOKE_DIRECT,
494             Opcodes.INVOKE_DIRECT_RANGE, Form35c.THE_ONE, false);
495 
496     public static final Dop INVOKE_STATIC =
497         new Dop(Opcodes.INVOKE_STATIC, Opcodes.INVOKE_STATIC,
498             Opcodes.INVOKE_STATIC_RANGE, Form35c.THE_ONE, false);
499 
500     public static final Dop INVOKE_INTERFACE =
501         new Dop(Opcodes.INVOKE_INTERFACE, Opcodes.INVOKE_INTERFACE,
502             Opcodes.INVOKE_INTERFACE_RANGE, Form35c.THE_ONE, false);
503 
504     public static final Dop INVOKE_VIRTUAL_RANGE =
505         new Dop(Opcodes.INVOKE_VIRTUAL_RANGE, Opcodes.INVOKE_VIRTUAL,
506             Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
507 
508     public static final Dop INVOKE_SUPER_RANGE =
509         new Dop(Opcodes.INVOKE_SUPER_RANGE, Opcodes.INVOKE_SUPER,
510             Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
511 
512     public static final Dop INVOKE_DIRECT_RANGE =
513         new Dop(Opcodes.INVOKE_DIRECT_RANGE, Opcodes.INVOKE_DIRECT,
514             Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
515 
516     public static final Dop INVOKE_STATIC_RANGE =
517         new Dop(Opcodes.INVOKE_STATIC_RANGE, Opcodes.INVOKE_STATIC,
518             Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
519 
520     public static final Dop INVOKE_INTERFACE_RANGE =
521         new Dop(Opcodes.INVOKE_INTERFACE_RANGE, Opcodes.INVOKE_INTERFACE,
522             Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
523 
524     public static final Dop NEG_INT =
525         new Dop(Opcodes.NEG_INT, Opcodes.NEG_INT,
526             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
527 
528     public static final Dop NOT_INT =
529         new Dop(Opcodes.NOT_INT, Opcodes.NOT_INT,
530             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
531 
532     public static final Dop NEG_LONG =
533         new Dop(Opcodes.NEG_LONG, Opcodes.NEG_LONG,
534             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
535 
536     public static final Dop NOT_LONG =
537         new Dop(Opcodes.NOT_LONG, Opcodes.NOT_LONG,
538             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
539 
540     public static final Dop NEG_FLOAT =
541         new Dop(Opcodes.NEG_FLOAT, Opcodes.NEG_FLOAT,
542             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
543 
544     public static final Dop NEG_DOUBLE =
545         new Dop(Opcodes.NEG_DOUBLE, Opcodes.NEG_DOUBLE,
546             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
547 
548     public static final Dop INT_TO_LONG =
549         new Dop(Opcodes.INT_TO_LONG, Opcodes.INT_TO_LONG,
550             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
551 
552     public static final Dop INT_TO_FLOAT =
553         new Dop(Opcodes.INT_TO_FLOAT, Opcodes.INT_TO_FLOAT,
554             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
555 
556     public static final Dop INT_TO_DOUBLE =
557         new Dop(Opcodes.INT_TO_DOUBLE, Opcodes.INT_TO_DOUBLE,
558             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
559 
560     public static final Dop LONG_TO_INT =
561         new Dop(Opcodes.LONG_TO_INT, Opcodes.LONG_TO_INT,
562             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
563 
564     public static final Dop LONG_TO_FLOAT =
565         new Dop(Opcodes.LONG_TO_FLOAT, Opcodes.LONG_TO_FLOAT,
566             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
567 
568     public static final Dop LONG_TO_DOUBLE =
569         new Dop(Opcodes.LONG_TO_DOUBLE, Opcodes.LONG_TO_DOUBLE,
570             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
571 
572     public static final Dop FLOAT_TO_INT =
573         new Dop(Opcodes.FLOAT_TO_INT, Opcodes.FLOAT_TO_INT,
574             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
575 
576     public static final Dop FLOAT_TO_LONG =
577         new Dop(Opcodes.FLOAT_TO_LONG, Opcodes.FLOAT_TO_LONG,
578             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
579 
580     public static final Dop FLOAT_TO_DOUBLE =
581         new Dop(Opcodes.FLOAT_TO_DOUBLE, Opcodes.FLOAT_TO_DOUBLE,
582             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
583 
584     public static final Dop DOUBLE_TO_INT =
585         new Dop(Opcodes.DOUBLE_TO_INT, Opcodes.DOUBLE_TO_INT,
586             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
587 
588     public static final Dop DOUBLE_TO_LONG =
589         new Dop(Opcodes.DOUBLE_TO_LONG, Opcodes.DOUBLE_TO_LONG,
590             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
591 
592     public static final Dop DOUBLE_TO_FLOAT =
593         new Dop(Opcodes.DOUBLE_TO_FLOAT, Opcodes.DOUBLE_TO_FLOAT,
594             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
595 
596     public static final Dop INT_TO_BYTE =
597         new Dop(Opcodes.INT_TO_BYTE, Opcodes.INT_TO_BYTE,
598             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
599 
600     public static final Dop INT_TO_CHAR =
601         new Dop(Opcodes.INT_TO_CHAR, Opcodes.INT_TO_CHAR,
602             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
603 
604     public static final Dop INT_TO_SHORT =
605         new Dop(Opcodes.INT_TO_SHORT, Opcodes.INT_TO_SHORT,
606             Opcodes.NO_NEXT, Form12x.THE_ONE, true);
607 
608     public static final Dop ADD_INT =
609         new Dop(Opcodes.ADD_INT, Opcodes.ADD_INT,
610             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
611 
612     public static final Dop SUB_INT =
613         new Dop(Opcodes.SUB_INT, Opcodes.SUB_INT,
614             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
615 
616     public static final Dop MUL_INT =
617         new Dop(Opcodes.MUL_INT, Opcodes.MUL_INT,
618             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
619 
620     public static final Dop DIV_INT =
621         new Dop(Opcodes.DIV_INT, Opcodes.DIV_INT,
622             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
623 
624     public static final Dop REM_INT =
625         new Dop(Opcodes.REM_INT, Opcodes.REM_INT,
626             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
627 
628     public static final Dop AND_INT =
629         new Dop(Opcodes.AND_INT, Opcodes.AND_INT,
630             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
631 
632     public static final Dop OR_INT =
633         new Dop(Opcodes.OR_INT, Opcodes.OR_INT,
634             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
635 
636     public static final Dop XOR_INT =
637         new Dop(Opcodes.XOR_INT, Opcodes.XOR_INT,
638             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
639 
640     public static final Dop SHL_INT =
641         new Dop(Opcodes.SHL_INT, Opcodes.SHL_INT,
642             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
643 
644     public static final Dop SHR_INT =
645         new Dop(Opcodes.SHR_INT, Opcodes.SHR_INT,
646             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
647 
648     public static final Dop USHR_INT =
649         new Dop(Opcodes.USHR_INT, Opcodes.USHR_INT,
650             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
651 
652     public static final Dop ADD_LONG =
653         new Dop(Opcodes.ADD_LONG, Opcodes.ADD_LONG,
654             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
655 
656     public static final Dop SUB_LONG =
657         new Dop(Opcodes.SUB_LONG, Opcodes.SUB_LONG,
658             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
659 
660     public static final Dop MUL_LONG =
661         new Dop(Opcodes.MUL_LONG, Opcodes.MUL_LONG,
662             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
663 
664     public static final Dop DIV_LONG =
665         new Dop(Opcodes.DIV_LONG, Opcodes.DIV_LONG,
666             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
667 
668     public static final Dop REM_LONG =
669         new Dop(Opcodes.REM_LONG, Opcodes.REM_LONG,
670             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
671 
672     public static final Dop AND_LONG =
673         new Dop(Opcodes.AND_LONG, Opcodes.AND_LONG,
674             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
675 
676     public static final Dop OR_LONG =
677         new Dop(Opcodes.OR_LONG, Opcodes.OR_LONG,
678             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
679 
680     public static final Dop XOR_LONG =
681         new Dop(Opcodes.XOR_LONG, Opcodes.XOR_LONG,
682             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
683 
684     public static final Dop SHL_LONG =
685         new Dop(Opcodes.SHL_LONG, Opcodes.SHL_LONG,
686             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
687 
688     public static final Dop SHR_LONG =
689         new Dop(Opcodes.SHR_LONG, Opcodes.SHR_LONG,
690             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
691 
692     public static final Dop USHR_LONG =
693         new Dop(Opcodes.USHR_LONG, Opcodes.USHR_LONG,
694             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
695 
696     public static final Dop ADD_FLOAT =
697         new Dop(Opcodes.ADD_FLOAT, Opcodes.ADD_FLOAT,
698             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
699 
700     public static final Dop SUB_FLOAT =
701         new Dop(Opcodes.SUB_FLOAT, Opcodes.SUB_FLOAT,
702             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
703 
704     public static final Dop MUL_FLOAT =
705         new Dop(Opcodes.MUL_FLOAT, Opcodes.MUL_FLOAT,
706             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
707 
708     public static final Dop DIV_FLOAT =
709         new Dop(Opcodes.DIV_FLOAT, Opcodes.DIV_FLOAT,
710             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
711 
712     public static final Dop REM_FLOAT =
713         new Dop(Opcodes.REM_FLOAT, Opcodes.REM_FLOAT,
714             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
715 
716     public static final Dop ADD_DOUBLE =
717         new Dop(Opcodes.ADD_DOUBLE, Opcodes.ADD_DOUBLE,
718             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
719 
720     public static final Dop SUB_DOUBLE =
721         new Dop(Opcodes.SUB_DOUBLE, Opcodes.SUB_DOUBLE,
722             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
723 
724     public static final Dop MUL_DOUBLE =
725         new Dop(Opcodes.MUL_DOUBLE, Opcodes.MUL_DOUBLE,
726             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
727 
728     public static final Dop DIV_DOUBLE =
729         new Dop(Opcodes.DIV_DOUBLE, Opcodes.DIV_DOUBLE,
730             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
731 
732     public static final Dop REM_DOUBLE =
733         new Dop(Opcodes.REM_DOUBLE, Opcodes.REM_DOUBLE,
734             Opcodes.NO_NEXT, Form23x.THE_ONE, true);
735 
736     public static final Dop ADD_INT_2ADDR =
737         new Dop(Opcodes.ADD_INT_2ADDR, Opcodes.ADD_INT,
738             Opcodes.ADD_INT, Form12x.THE_ONE, true);
739 
740     public static final Dop SUB_INT_2ADDR =
741         new Dop(Opcodes.SUB_INT_2ADDR, Opcodes.SUB_INT,
742             Opcodes.SUB_INT, Form12x.THE_ONE, true);
743 
744     public static final Dop MUL_INT_2ADDR =
745         new Dop(Opcodes.MUL_INT_2ADDR, Opcodes.MUL_INT,
746             Opcodes.MUL_INT, Form12x.THE_ONE, true);
747 
748     public static final Dop DIV_INT_2ADDR =
749         new Dop(Opcodes.DIV_INT_2ADDR, Opcodes.DIV_INT,
750             Opcodes.DIV_INT, Form12x.THE_ONE, true);
751 
752     public static final Dop REM_INT_2ADDR =
753         new Dop(Opcodes.REM_INT_2ADDR, Opcodes.REM_INT,
754             Opcodes.REM_INT, Form12x.THE_ONE, true);
755 
756     public static final Dop AND_INT_2ADDR =
757         new Dop(Opcodes.AND_INT_2ADDR, Opcodes.AND_INT,
758             Opcodes.AND_INT, Form12x.THE_ONE, true);
759 
760     public static final Dop OR_INT_2ADDR =
761         new Dop(Opcodes.OR_INT_2ADDR, Opcodes.OR_INT,
762             Opcodes.OR_INT, Form12x.THE_ONE, true);
763 
764     public static final Dop XOR_INT_2ADDR =
765         new Dop(Opcodes.XOR_INT_2ADDR, Opcodes.XOR_INT,
766             Opcodes.XOR_INT, Form12x.THE_ONE, true);
767 
768     public static final Dop SHL_INT_2ADDR =
769         new Dop(Opcodes.SHL_INT_2ADDR, Opcodes.SHL_INT,
770             Opcodes.SHL_INT, Form12x.THE_ONE, true);
771 
772     public static final Dop SHR_INT_2ADDR =
773         new Dop(Opcodes.SHR_INT_2ADDR, Opcodes.SHR_INT,
774             Opcodes.SHR_INT, Form12x.THE_ONE, true);
775 
776     public static final Dop USHR_INT_2ADDR =
777         new Dop(Opcodes.USHR_INT_2ADDR, Opcodes.USHR_INT,
778             Opcodes.USHR_INT, Form12x.THE_ONE, true);
779 
780     public static final Dop ADD_LONG_2ADDR =
781         new Dop(Opcodes.ADD_LONG_2ADDR, Opcodes.ADD_LONG,
782             Opcodes.ADD_LONG, Form12x.THE_ONE, true);
783 
784     public static final Dop SUB_LONG_2ADDR =
785         new Dop(Opcodes.SUB_LONG_2ADDR, Opcodes.SUB_LONG,
786             Opcodes.SUB_LONG, Form12x.THE_ONE, true);
787 
788     public static final Dop MUL_LONG_2ADDR =
789         new Dop(Opcodes.MUL_LONG_2ADDR, Opcodes.MUL_LONG,
790             Opcodes.MUL_LONG, Form12x.THE_ONE, true);
791 
792     public static final Dop DIV_LONG_2ADDR =
793         new Dop(Opcodes.DIV_LONG_2ADDR, Opcodes.DIV_LONG,
794             Opcodes.DIV_LONG, Form12x.THE_ONE, true);
795 
796     public static final Dop REM_LONG_2ADDR =
797         new Dop(Opcodes.REM_LONG_2ADDR, Opcodes.REM_LONG,
798             Opcodes.REM_LONG, Form12x.THE_ONE, true);
799 
800     public static final Dop AND_LONG_2ADDR =
801         new Dop(Opcodes.AND_LONG_2ADDR, Opcodes.AND_LONG,
802             Opcodes.AND_LONG, Form12x.THE_ONE, true);
803 
804     public static final Dop OR_LONG_2ADDR =
805         new Dop(Opcodes.OR_LONG_2ADDR, Opcodes.OR_LONG,
806             Opcodes.OR_LONG, Form12x.THE_ONE, true);
807 
808     public static final Dop XOR_LONG_2ADDR =
809         new Dop(Opcodes.XOR_LONG_2ADDR, Opcodes.XOR_LONG,
810             Opcodes.XOR_LONG, Form12x.THE_ONE, true);
811 
812     public static final Dop SHL_LONG_2ADDR =
813         new Dop(Opcodes.SHL_LONG_2ADDR, Opcodes.SHL_LONG,
814             Opcodes.SHL_LONG, Form12x.THE_ONE, true);
815 
816     public static final Dop SHR_LONG_2ADDR =
817         new Dop(Opcodes.SHR_LONG_2ADDR, Opcodes.SHR_LONG,
818             Opcodes.SHR_LONG, Form12x.THE_ONE, true);
819 
820     public static final Dop USHR_LONG_2ADDR =
821         new Dop(Opcodes.USHR_LONG_2ADDR, Opcodes.USHR_LONG,
822             Opcodes.USHR_LONG, Form12x.THE_ONE, true);
823 
824     public static final Dop ADD_FLOAT_2ADDR =
825         new Dop(Opcodes.ADD_FLOAT_2ADDR, Opcodes.ADD_FLOAT,
826             Opcodes.ADD_FLOAT, Form12x.THE_ONE, true);
827 
828     public static final Dop SUB_FLOAT_2ADDR =
829         new Dop(Opcodes.SUB_FLOAT_2ADDR, Opcodes.SUB_FLOAT,
830             Opcodes.SUB_FLOAT, Form12x.THE_ONE, true);
831 
832     public static final Dop MUL_FLOAT_2ADDR =
833         new Dop(Opcodes.MUL_FLOAT_2ADDR, Opcodes.MUL_FLOAT,
834             Opcodes.MUL_FLOAT, Form12x.THE_ONE, true);
835 
836     public static final Dop DIV_FLOAT_2ADDR =
837         new Dop(Opcodes.DIV_FLOAT_2ADDR, Opcodes.DIV_FLOAT,
838             Opcodes.DIV_FLOAT, Form12x.THE_ONE, true);
839 
840     public static final Dop REM_FLOAT_2ADDR =
841         new Dop(Opcodes.REM_FLOAT_2ADDR, Opcodes.REM_FLOAT,
842             Opcodes.REM_FLOAT, Form12x.THE_ONE, true);
843 
844     public static final Dop ADD_DOUBLE_2ADDR =
845         new Dop(Opcodes.ADD_DOUBLE_2ADDR, Opcodes.ADD_DOUBLE,
846             Opcodes.ADD_DOUBLE, Form12x.THE_ONE, true);
847 
848     public static final Dop SUB_DOUBLE_2ADDR =
849         new Dop(Opcodes.SUB_DOUBLE_2ADDR, Opcodes.SUB_DOUBLE,
850             Opcodes.SUB_DOUBLE, Form12x.THE_ONE, true);
851 
852     public static final Dop MUL_DOUBLE_2ADDR =
853         new Dop(Opcodes.MUL_DOUBLE_2ADDR, Opcodes.MUL_DOUBLE,
854             Opcodes.MUL_DOUBLE, Form12x.THE_ONE, true);
855 
856     public static final Dop DIV_DOUBLE_2ADDR =
857         new Dop(Opcodes.DIV_DOUBLE_2ADDR, Opcodes.DIV_DOUBLE,
858             Opcodes.DIV_DOUBLE, Form12x.THE_ONE, true);
859 
860     public static final Dop REM_DOUBLE_2ADDR =
861         new Dop(Opcodes.REM_DOUBLE_2ADDR, Opcodes.REM_DOUBLE,
862             Opcodes.REM_DOUBLE, Form12x.THE_ONE, true);
863 
864     public static final Dop ADD_INT_LIT16 =
865         new Dop(Opcodes.ADD_INT_LIT16, Opcodes.ADD_INT,
866             Opcodes.NO_NEXT, Form22s.THE_ONE, true);
867 
868     public static final Dop RSUB_INT =
869         new Dop(Opcodes.RSUB_INT, Opcodes.RSUB_INT,
870             Opcodes.NO_NEXT, Form22s.THE_ONE, true);
871 
872     public static final Dop MUL_INT_LIT16 =
873         new Dop(Opcodes.MUL_INT_LIT16, Opcodes.MUL_INT,
874             Opcodes.NO_NEXT, Form22s.THE_ONE, true);
875 
876     public static final Dop DIV_INT_LIT16 =
877         new Dop(Opcodes.DIV_INT_LIT16, Opcodes.DIV_INT,
878             Opcodes.NO_NEXT, Form22s.THE_ONE, true);
879 
880     public static final Dop REM_INT_LIT16 =
881         new Dop(Opcodes.REM_INT_LIT16, Opcodes.REM_INT,
882             Opcodes.NO_NEXT, Form22s.THE_ONE, true);
883 
884     public static final Dop AND_INT_LIT16 =
885         new Dop(Opcodes.AND_INT_LIT16, Opcodes.AND_INT,
886             Opcodes.NO_NEXT, Form22s.THE_ONE, true);
887 
888     public static final Dop OR_INT_LIT16 =
889         new Dop(Opcodes.OR_INT_LIT16, Opcodes.OR_INT,
890             Opcodes.NO_NEXT, Form22s.THE_ONE, true);
891 
892     public static final Dop XOR_INT_LIT16 =
893         new Dop(Opcodes.XOR_INT_LIT16, Opcodes.XOR_INT,
894             Opcodes.NO_NEXT, Form22s.THE_ONE, true);
895 
896     public static final Dop ADD_INT_LIT8 =
897         new Dop(Opcodes.ADD_INT_LIT8, Opcodes.ADD_INT,
898             Opcodes.ADD_INT_LIT16, Form22b.THE_ONE, true);
899 
900     public static final Dop RSUB_INT_LIT8 =
901         new Dop(Opcodes.RSUB_INT_LIT8, Opcodes.RSUB_INT,
902             Opcodes.RSUB_INT, Form22b.THE_ONE, true);
903 
904     public static final Dop MUL_INT_LIT8 =
905         new Dop(Opcodes.MUL_INT_LIT8, Opcodes.MUL_INT,
906             Opcodes.MUL_INT_LIT16, Form22b.THE_ONE, true);
907 
908     public static final Dop DIV_INT_LIT8 =
909         new Dop(Opcodes.DIV_INT_LIT8, Opcodes.DIV_INT,
910             Opcodes.DIV_INT_LIT16, Form22b.THE_ONE, true);
911 
912     public static final Dop REM_INT_LIT8 =
913         new Dop(Opcodes.REM_INT_LIT8, Opcodes.REM_INT,
914             Opcodes.REM_INT_LIT16, Form22b.THE_ONE, true);
915 
916     public static final Dop AND_INT_LIT8 =
917         new Dop(Opcodes.AND_INT_LIT8, Opcodes.AND_INT,
918             Opcodes.AND_INT_LIT16, Form22b.THE_ONE, true);
919 
920     public static final Dop OR_INT_LIT8 =
921         new Dop(Opcodes.OR_INT_LIT8, Opcodes.OR_INT,
922             Opcodes.OR_INT_LIT16, Form22b.THE_ONE, true);
923 
924     public static final Dop XOR_INT_LIT8 =
925         new Dop(Opcodes.XOR_INT_LIT8, Opcodes.XOR_INT,
926             Opcodes.XOR_INT_LIT16, Form22b.THE_ONE, true);
927 
928     public static final Dop SHL_INT_LIT8 =
929         new Dop(Opcodes.SHL_INT_LIT8, Opcodes.SHL_INT,
930             Opcodes.NO_NEXT, Form22b.THE_ONE, true);
931 
932     public static final Dop SHR_INT_LIT8 =
933         new Dop(Opcodes.SHR_INT_LIT8, Opcodes.SHR_INT,
934             Opcodes.NO_NEXT, Form22b.THE_ONE, true);
935 
936     public static final Dop USHR_INT_LIT8 =
937         new Dop(Opcodes.USHR_INT_LIT8, Opcodes.USHR_INT,
938             Opcodes.NO_NEXT, Form22b.THE_ONE, true);
939 
940     public static final Dop INVOKE_POLYMORPHIC =
941         new Dop(Opcodes.INVOKE_POLYMORPHIC, Opcodes.INVOKE_POLYMORPHIC,
942             Opcodes.INVOKE_POLYMORPHIC_RANGE, Form45cc.THE_ONE, false);
943 
944     public static final Dop INVOKE_POLYMORPHIC_RANGE =
945         new Dop(Opcodes.INVOKE_POLYMORPHIC_RANGE, Opcodes.INVOKE_POLYMORPHIC,
946             Opcodes.NO_NEXT, Form4rcc.THE_ONE, false);
947 
948     public static final Dop INVOKE_CUSTOM =
949         new Dop(Opcodes.INVOKE_CUSTOM, Opcodes.INVOKE_CUSTOM,
950             Opcodes.INVOKE_CUSTOM_RANGE, Form35c.THE_ONE, false);
951 
952     public static final Dop INVOKE_CUSTOM_RANGE =
953         new Dop(Opcodes.INVOKE_CUSTOM_RANGE, Opcodes.INVOKE_CUSTOM,
954             Opcodes.NO_NEXT, Form3rc.THE_ONE, false);
955 
956     public static final Dop CONST_METHOD_HANDLE =
957         new Dop(Opcodes.CONST_METHOD_HANDLE, Opcodes.CONST_METHOD_HANDLE,
958             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
959 
960     public static final Dop CONST_METHOD_TYPE =
961         new Dop(Opcodes.CONST_METHOD_TYPE, Opcodes.CONST_METHOD_TYPE,
962             Opcodes.NO_NEXT, Form21c.THE_ONE, true);
963 
964     // END(dops)
965 
966     // Static initialization.
967     static {
968         DOPS = new Dop[Opcodes.MAX_VALUE - Opcodes.MIN_VALUE + 1];
969 
970         set(SPECIAL_FORMAT);
971 
972         // BEGIN(dops-init); GENERATED AUTOMATICALLY BY opcode-gen
973         set(NOP);
974         set(MOVE);
975         set(MOVE_FROM16);
976         set(MOVE_16);
977         set(MOVE_WIDE);
978         set(MOVE_WIDE_FROM16);
979         set(MOVE_WIDE_16);
980         set(MOVE_OBJECT);
981         set(MOVE_OBJECT_FROM16);
982         set(MOVE_OBJECT_16);
983         set(MOVE_RESULT);
984         set(MOVE_RESULT_WIDE);
985         set(MOVE_RESULT_OBJECT);
986         set(MOVE_EXCEPTION);
987         set(RETURN_VOID);
988         set(RETURN);
989         set(RETURN_WIDE);
990         set(RETURN_OBJECT);
991         set(CONST_4);
992         set(CONST_16);
993         set(CONST);
994         set(CONST_HIGH16);
995         set(CONST_WIDE_16);
996         set(CONST_WIDE_32);
997         set(CONST_WIDE);
998         set(CONST_WIDE_HIGH16);
999         set(CONST_STRING);
1000         set(CONST_STRING_JUMBO);
1001         set(CONST_CLASS);
1002         set(MONITOR_ENTER);
1003         set(MONITOR_EXIT);
1004         set(CHECK_CAST);
1005         set(INSTANCE_OF);
1006         set(ARRAY_LENGTH);
1007         set(NEW_INSTANCE);
1008         set(NEW_ARRAY);
1009         set(FILLED_NEW_ARRAY);
1010         set(FILLED_NEW_ARRAY_RANGE);
1011         set(FILL_ARRAY_DATA);
1012         set(THROW);
1013         set(GOTO);
1014         set(GOTO_16);
1015         set(GOTO_32);
1016         set(PACKED_SWITCH);
1017         set(SPARSE_SWITCH);
1018         set(CMPL_FLOAT);
1019         set(CMPG_FLOAT);
1020         set(CMPL_DOUBLE);
1021         set(CMPG_DOUBLE);
1022         set(CMP_LONG);
1023         set(IF_EQ);
1024         set(IF_NE);
1025         set(IF_LT);
1026         set(IF_GE);
1027         set(IF_GT);
1028         set(IF_LE);
1029         set(IF_EQZ);
1030         set(IF_NEZ);
1031         set(IF_LTZ);
1032         set(IF_GEZ);
1033         set(IF_GTZ);
1034         set(IF_LEZ);
1035         set(AGET);
1036         set(AGET_WIDE);
1037         set(AGET_OBJECT);
1038         set(AGET_BOOLEAN);
1039         set(AGET_BYTE);
1040         set(AGET_CHAR);
1041         set(AGET_SHORT);
1042         set(APUT);
1043         set(APUT_WIDE);
1044         set(APUT_OBJECT);
1045         set(APUT_BOOLEAN);
1046         set(APUT_BYTE);
1047         set(APUT_CHAR);
1048         set(APUT_SHORT);
1049         set(IGET);
1050         set(IGET_WIDE);
1051         set(IGET_OBJECT);
1052         set(IGET_BOOLEAN);
1053         set(IGET_BYTE);
1054         set(IGET_CHAR);
1055         set(IGET_SHORT);
1056         set(IPUT);
1057         set(IPUT_WIDE);
1058         set(IPUT_OBJECT);
1059         set(IPUT_BOOLEAN);
1060         set(IPUT_BYTE);
1061         set(IPUT_CHAR);
1062         set(IPUT_SHORT);
1063         set(SGET);
1064         set(SGET_WIDE);
1065         set(SGET_OBJECT);
1066         set(SGET_BOOLEAN);
1067         set(SGET_BYTE);
1068         set(SGET_CHAR);
1069         set(SGET_SHORT);
1070         set(SPUT);
1071         set(SPUT_WIDE);
1072         set(SPUT_OBJECT);
1073         set(SPUT_BOOLEAN);
1074         set(SPUT_BYTE);
1075         set(SPUT_CHAR);
1076         set(SPUT_SHORT);
1077         set(INVOKE_VIRTUAL);
1078         set(INVOKE_SUPER);
1079         set(INVOKE_DIRECT);
1080         set(INVOKE_STATIC);
1081         set(INVOKE_INTERFACE);
1082         set(INVOKE_VIRTUAL_RANGE);
1083         set(INVOKE_SUPER_RANGE);
1084         set(INVOKE_DIRECT_RANGE);
1085         set(INVOKE_STATIC_RANGE);
1086         set(INVOKE_INTERFACE_RANGE);
1087         set(NEG_INT);
1088         set(NOT_INT);
1089         set(NEG_LONG);
1090         set(NOT_LONG);
1091         set(NEG_FLOAT);
1092         set(NEG_DOUBLE);
1093         set(INT_TO_LONG);
1094         set(INT_TO_FLOAT);
1095         set(INT_TO_DOUBLE);
1096         set(LONG_TO_INT);
1097         set(LONG_TO_FLOAT);
1098         set(LONG_TO_DOUBLE);
1099         set(FLOAT_TO_INT);
1100         set(FLOAT_TO_LONG);
1101         set(FLOAT_TO_DOUBLE);
1102         set(DOUBLE_TO_INT);
1103         set(DOUBLE_TO_LONG);
1104         set(DOUBLE_TO_FLOAT);
1105         set(INT_TO_BYTE);
1106         set(INT_TO_CHAR);
1107         set(INT_TO_SHORT);
1108         set(ADD_INT);
1109         set(SUB_INT);
1110         set(MUL_INT);
1111         set(DIV_INT);
1112         set(REM_INT);
1113         set(AND_INT);
1114         set(OR_INT);
1115         set(XOR_INT);
1116         set(SHL_INT);
1117         set(SHR_INT);
1118         set(USHR_INT);
1119         set(ADD_LONG);
1120         set(SUB_LONG);
1121         set(MUL_LONG);
1122         set(DIV_LONG);
1123         set(REM_LONG);
1124         set(AND_LONG);
1125         set(OR_LONG);
1126         set(XOR_LONG);
1127         set(SHL_LONG);
1128         set(SHR_LONG);
1129         set(USHR_LONG);
1130         set(ADD_FLOAT);
1131         set(SUB_FLOAT);
1132         set(MUL_FLOAT);
1133         set(DIV_FLOAT);
1134         set(REM_FLOAT);
1135         set(ADD_DOUBLE);
1136         set(SUB_DOUBLE);
1137         set(MUL_DOUBLE);
1138         set(DIV_DOUBLE);
1139         set(REM_DOUBLE);
1140         set(ADD_INT_2ADDR);
1141         set(SUB_INT_2ADDR);
1142         set(MUL_INT_2ADDR);
1143         set(DIV_INT_2ADDR);
1144         set(REM_INT_2ADDR);
1145         set(AND_INT_2ADDR);
1146         set(OR_INT_2ADDR);
1147         set(XOR_INT_2ADDR);
1148         set(SHL_INT_2ADDR);
1149         set(SHR_INT_2ADDR);
1150         set(USHR_INT_2ADDR);
1151         set(ADD_LONG_2ADDR);
1152         set(SUB_LONG_2ADDR);
1153         set(MUL_LONG_2ADDR);
1154         set(DIV_LONG_2ADDR);
1155         set(REM_LONG_2ADDR);
1156         set(AND_LONG_2ADDR);
1157         set(OR_LONG_2ADDR);
1158         set(XOR_LONG_2ADDR);
1159         set(SHL_LONG_2ADDR);
1160         set(SHR_LONG_2ADDR);
1161         set(USHR_LONG_2ADDR);
1162         set(ADD_FLOAT_2ADDR);
1163         set(SUB_FLOAT_2ADDR);
1164         set(MUL_FLOAT_2ADDR);
1165         set(DIV_FLOAT_2ADDR);
1166         set(REM_FLOAT_2ADDR);
1167         set(ADD_DOUBLE_2ADDR);
1168         set(SUB_DOUBLE_2ADDR);
1169         set(MUL_DOUBLE_2ADDR);
1170         set(DIV_DOUBLE_2ADDR);
1171         set(REM_DOUBLE_2ADDR);
1172         set(ADD_INT_LIT16);
1173         set(RSUB_INT);
1174         set(MUL_INT_LIT16);
1175         set(DIV_INT_LIT16);
1176         set(REM_INT_LIT16);
1177         set(AND_INT_LIT16);
1178         set(OR_INT_LIT16);
1179         set(XOR_INT_LIT16);
1180         set(ADD_INT_LIT8);
1181         set(RSUB_INT_LIT8);
1182         set(MUL_INT_LIT8);
1183         set(DIV_INT_LIT8);
1184         set(REM_INT_LIT8);
1185         set(AND_INT_LIT8);
1186         set(OR_INT_LIT8);
1187         set(XOR_INT_LIT8);
1188         set(SHL_INT_LIT8);
1189         set(SHR_INT_LIT8);
1190         set(USHR_INT_LIT8);
1191         set(INVOKE_POLYMORPHIC);
1192         set(INVOKE_POLYMORPHIC_RANGE);
1193         set(INVOKE_CUSTOM);
1194         set(INVOKE_CUSTOM_RANGE);
1195         set(CONST_METHOD_HANDLE);
1196         set(CONST_METHOD_TYPE);
1197         // END(dops-init)
1198     }
1199 
1200     /**
1201      * This class is uninstantiable.
1202      */
Dops()1203     private Dops() {
1204         // This space intentionally left blank.
1205     }
1206 
1207     /**
1208      * Gets the {@link Dop} for the given opcode value.
1209      *
1210      * @param opcode {@code Opcodes.MIN_VALUE..Opcodes.MAX_VALUE;} the
1211      * opcode value
1212      * @return {@code non-null;} the associated opcode instance
1213      */
get(int opcode)1214     public static Dop get(int opcode) {
1215         int idx = opcode - Opcodes.MIN_VALUE;
1216 
1217         try {
1218             Dop result = DOPS[idx];
1219             if (result != null) {
1220                 return result;
1221             }
1222         } catch (ArrayIndexOutOfBoundsException ex) {
1223             // Fall through.
1224         }
1225 
1226         throw new IllegalArgumentException("bogus opcode");
1227     }
1228 
1229     /**
1230      * Gets the next {@link Dop} in the instruction fitting chain after the
1231      * given instance, if any.
1232      *
1233      * @param opcode {@code non-null;} the opcode
1234      * @param options {@code non-null;} options, used to determine
1235      * which opcodes are potentially off-limits
1236      * @return {@code null-ok;} the next opcode in the same family, in the
1237      * chain of opcodes to try, or {@code null} if the given opcode is
1238      * the last in its chain
1239      */
getNextOrNull(Dop opcode, DexOptions options)1240     public static Dop getNextOrNull(Dop opcode, DexOptions options) {
1241       int nextOpcode = opcode.getNextOpcode();
1242 
1243       if (nextOpcode == Opcodes.NO_NEXT) {
1244         return null;
1245       }
1246 
1247       opcode = get(nextOpcode);
1248 
1249       return opcode;
1250     }
1251 
1252     /**
1253      * Puts the given opcode into the table of all ops.
1254      *
1255      * @param opcode {@code non-null;} the opcode
1256      */
set(Dop opcode)1257     private static void set(Dop opcode) {
1258         int idx = opcode.getOpcode() - Opcodes.MIN_VALUE;
1259         DOPS[idx] = opcode;
1260     }
1261 }
1262