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