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