1/*
2 * ProGuard -- shrinking, optimization, obfuscation, and preverification
3 *             of Java bytecode.
4 *
5 * Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu)
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the Free
9 * Software Foundation; either version 2 of the License, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 * more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21package proguard.optimize.peephole;
22
23import proguard.classfile.constant.*;
24import proguard.classfile.instruction.*;
25import proguard.classfile.util.InstructionSequenceMatcher;
26
27/**
28 * This class contains a set of instruction sequences and their suggested
29 * replacements.
30 *
31 * @see InstructionSequencesReplacer
32 * @author Eric Lafortune
33 */
34public class InstructionSequenceConstants
35{
36    public static final int X = InstructionSequenceMatcher.X;
37    public static final int Y = InstructionSequenceMatcher.Y;
38    public static final int Z = InstructionSequenceMatcher.Z;
39
40    public static final int A = InstructionSequenceMatcher.A;
41    public static final int B = InstructionSequenceMatcher.B;
42    public static final int C = InstructionSequenceMatcher.C;
43    public static final int D = InstructionSequenceMatcher.D;
44
45
46    private static final int I_32768              =  0;
47    private static final int I_65536              =  1;
48    private static final int I_16777216           =  2;
49
50//  private static final int I_0x000000ff
51    private static final int I_0x0000ff00         =  3;
52    private static final int I_0x00ff0000         =  4;
53    private static final int I_0xff000000         =  5;
54    private static final int I_0x0000ffff         =  6;
55    private static final int I_0xffff0000         =  7;
56
57    private static final int L_M1                 =  8;
58    private static final int L_2                  =  9;
59    private static final int L_4                  = 10;
60    private static final int L_8                  = 11;
61    private static final int L_16                 = 12;
62    private static final int L_32                 = 13;
63    private static final int L_64                 = 14;
64    private static final int L_128                = 15;
65    private static final int L_256                = 16;
66    private static final int L_512                = 17;
67    private static final int L_1024               = 18;
68    private static final int L_2048               = 19;
69    private static final int L_4096               = 20;
70    private static final int L_8192               = 21;
71    private static final int L_16384              = 22;
72    private static final int L_32768              = 23;
73    private static final int L_65536              = 24;
74    private static final int L_16777216           = 25;
75    private static final int L_4294967296         = 26;
76
77    private static final int L_0x00000000ffffffff = 27;
78    private static final int L_0xffffffff00000000 = 28;
79
80    private static final int F_M1                 = 29;
81
82    private static final int D_M1                 = 30;
83
84    private static final int FIELD_I              = 31;
85    private static final int FIELD_L              = 32;
86    private static final int FIELD_F              = 33;
87    private static final int FIELD_D              = 34;
88
89    private static final int NAME_AND_TYPE_I      = 35;
90    private static final int NAME_AND_TYPE_L      = 36;
91    private static final int NAME_AND_TYPE_F      = 37;
92    private static final int NAME_AND_TYPE_D      = 38;
93
94    private static final int TYPE_I               = 39;
95    private static final int TYPE_L               = 40;
96    private static final int TYPE_F               = 41;
97    private static final int TYPE_D               = 42;
98
99
100    public static final Constant[] CONSTANTS = new Constant[]
101    {
102        new IntegerConstant(32768),
103        new IntegerConstant(65536),
104        new IntegerConstant(16777216),
105
106        new IntegerConstant(0x0000ff00),
107        new IntegerConstant(0x00ff0000),
108        new IntegerConstant(0xff000000),
109        new IntegerConstant(0x0000ffff),
110        new IntegerConstant(0xffff0000),
111
112        new LongConstant(-1L),
113        new LongConstant(2L),
114        new LongConstant(4L),
115        new LongConstant(8L),
116        new LongConstant(16L),
117        new LongConstant(32L),
118        new LongConstant(64L),
119        new LongConstant(128L),
120        new LongConstant(256L),
121        new LongConstant(512L),
122        new LongConstant(1024L),
123        new LongConstant(2048L),
124        new LongConstant(4096L),
125        new LongConstant(8192L),
126        new LongConstant(16384L),
127        new LongConstant(32768L),
128        new LongConstant(65536L),
129        new LongConstant(16777216L),
130        new LongConstant(4294967296L),
131
132        new LongConstant(0x00000000ffffffffL),
133        new LongConstant(0xffffffff00000000L),
134
135        new FloatConstant(-1f),
136
137        new DoubleConstant(-1d),
138
139        new FieldrefConstant(X, NAME_AND_TYPE_I, null, null),
140        new FieldrefConstant(X, NAME_AND_TYPE_L, null, null),
141        new FieldrefConstant(X, NAME_AND_TYPE_F, null, null),
142        new FieldrefConstant(X, NAME_AND_TYPE_D, null, null),
143
144        new NameAndTypeConstant(Y, TYPE_I),
145        new NameAndTypeConstant(Y, TYPE_L),
146        new NameAndTypeConstant(Y, TYPE_F),
147        new NameAndTypeConstant(Y, TYPE_D),
148
149        new Utf8Constant("I"),
150        new Utf8Constant("J"),
151        new Utf8Constant("F"),
152        new Utf8Constant("D"),
153    };
154
155
156    public static final Instruction[][][] VARIABLE = new Instruction[][][]
157    {
158        {   // nop = nothing
159            {
160                new SimpleInstruction(InstructionConstants.OP_NOP),
161            },{
162                // Nothing.
163            },
164        },
165        {   // iload/pop = nothing
166            {
167                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
168                new SimpleInstruction(InstructionConstants.OP_POP),
169            },{
170                // Nothing.
171            },
172        },
173        {   // lload/pop2 = nothing
174            {
175                new VariableInstruction(InstructionConstants.OP_LLOAD, X),
176                new SimpleInstruction(InstructionConstants.OP_POP2),
177            },{
178                // Nothing.
179            },
180        },
181        {   // fload/pop = nothing
182            {
183                new VariableInstruction(InstructionConstants.OP_FLOAD, X),
184                new SimpleInstruction(InstructionConstants.OP_POP),
185            },{
186                // Nothing.
187            },
188        },
189        {   // dload/pop2 = nothing
190            {
191                new VariableInstruction(InstructionConstants.OP_DLOAD, X),
192                new SimpleInstruction(InstructionConstants.OP_POP2),
193            },{
194                // Nothing.
195            },
196        },
197        {   // aload/pop = nothing
198            {
199                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
200                new SimpleInstruction(InstructionConstants.OP_POP),
201            },{
202                // Nothing.
203            },
204        },
205        {   // i = i = nothing
206            {
207                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
208                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
209            },{
210                // Nothing.
211            },
212        },
213        {   // l = l = nothing
214            {
215                new VariableInstruction(InstructionConstants.OP_LLOAD, X),
216                new VariableInstruction(InstructionConstants.OP_LSTORE, X),
217            },{
218                // Nothing.
219            },
220        },
221        {   // f = f = nothing
222            {
223                new VariableInstruction(InstructionConstants.OP_FLOAD, X),
224                new VariableInstruction(InstructionConstants.OP_FSTORE, X),
225            },{
226                // Nothing.
227            },
228        },
229        {   // d = d = nothing
230            {
231                new VariableInstruction(InstructionConstants.OP_DLOAD, X),
232                new VariableInstruction(InstructionConstants.OP_DSTORE, X),
233            },{
234                // Nothing.
235            },
236        },
237        {   // a = a = nothing
238            {
239                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
240                new SimpleInstruction(InstructionConstants.OP_POP),
241            },{
242                // Nothing.
243            },
244        },
245        {   // istore/istore = pop/istore
246            {
247                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
248                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
249            },{
250                new SimpleInstruction(InstructionConstants.OP_POP),
251                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
252            },
253        },
254        {   // lstore/lstore = pop2/lstore
255            {
256                new VariableInstruction(InstructionConstants.OP_LSTORE, X),
257                new VariableInstruction(InstructionConstants.OP_LSTORE, X),
258            },{
259                new SimpleInstruction(InstructionConstants.OP_POP2),
260                new VariableInstruction(InstructionConstants.OP_LSTORE, X),
261            },
262        },
263        {   // fstore/fstore = pop/fstore
264            {
265                new VariableInstruction(InstructionConstants.OP_FSTORE, X),
266                new VariableInstruction(InstructionConstants.OP_FSTORE, X),
267            },{
268                new SimpleInstruction(InstructionConstants.OP_POP),
269                new VariableInstruction(InstructionConstants.OP_FSTORE, X),
270            },
271        },
272        {   // dstore/dstore = pop2/dstore
273            {
274                new VariableInstruction(InstructionConstants.OP_DSTORE, X),
275                new VariableInstruction(InstructionConstants.OP_DSTORE, X),
276            },{
277                new SimpleInstruction(InstructionConstants.OP_POP2),
278                new VariableInstruction(InstructionConstants.OP_DSTORE, X),
279            },
280        },
281        {   // astore/astore = pop/astore
282            {
283                new VariableInstruction(InstructionConstants.OP_ASTORE, X),
284                new VariableInstruction(InstructionConstants.OP_ASTORE, X),
285            },{
286                new SimpleInstruction(InstructionConstants.OP_POP),
287                new VariableInstruction(InstructionConstants.OP_ASTORE, X),
288            },
289        },
290        {   // istore/iload = dup/istore
291            {
292                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
293                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
294            },{
295                new SimpleInstruction(InstructionConstants.OP_DUP),
296                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
297            },
298        },
299        {   // lstore/lload = dup2/lstore
300            {
301                new VariableInstruction(InstructionConstants.OP_LSTORE, X),
302                new VariableInstruction(InstructionConstants.OP_LLOAD, X),
303            },{
304                new SimpleInstruction(InstructionConstants.OP_DUP2),
305                new VariableInstruction(InstructionConstants.OP_LSTORE, X),
306            },
307        },
308        {   // fstore/fload = dup/fstore
309            {
310                new VariableInstruction(InstructionConstants.OP_FSTORE, X),
311                new VariableInstruction(InstructionConstants.OP_FLOAD, X),
312            },{
313                new SimpleInstruction(InstructionConstants.OP_DUP),
314                new VariableInstruction(InstructionConstants.OP_FSTORE, X),
315            },
316        },
317        {   // dstore/dload = dup2/dstore
318            {
319                new VariableInstruction(InstructionConstants.OP_DSTORE, X),
320                new VariableInstruction(InstructionConstants.OP_DLOAD, X),
321            },{
322                new SimpleInstruction(InstructionConstants.OP_DUP2),
323                new VariableInstruction(InstructionConstants.OP_DSTORE, X),
324            },
325        },
326        {   // astore/aload = dup/astore
327            {
328                new VariableInstruction(InstructionConstants.OP_ASTORE, X),
329                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
330            },{
331                new SimpleInstruction(InstructionConstants.OP_DUP),
332                new VariableInstruction(InstructionConstants.OP_ASTORE, X),
333            },
334        },
335    };
336
337    public static final Instruction[][][] ARITHMETIC = new Instruction[][][]
338    {
339        {   // c + i = i + c
340            {
341                new SimpleInstruction(InstructionConstants.OP_ICONST_0, A),
342                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
343                new SimpleInstruction(InstructionConstants.OP_IADD),
344            },{
345                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
346                new SimpleInstruction(InstructionConstants.OP_ICONST_0, A),
347                new SimpleInstruction(InstructionConstants.OP_IADD),
348            },
349        },
350        {   // b + i = i + b
351            {
352                new SimpleInstruction(InstructionConstants.OP_BIPUSH, A),
353                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
354                new SimpleInstruction(InstructionConstants.OP_IADD),
355            },{
356                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
357                new SimpleInstruction(InstructionConstants.OP_BIPUSH, A),
358                new SimpleInstruction(InstructionConstants.OP_IADD),
359            },
360        },
361        {   // s + i = i + s
362            {
363                new SimpleInstruction(InstructionConstants.OP_SIPUSH, A),
364                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
365                new SimpleInstruction(InstructionConstants.OP_IADD),
366            },{
367                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
368                new SimpleInstruction(InstructionConstants.OP_SIPUSH, A),
369                new SimpleInstruction(InstructionConstants.OP_IADD),
370            },
371        },
372        {   // c + i = i + c
373            {
374                new ConstantInstruction(InstructionConstants.OP_LDC, A),
375                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
376                new SimpleInstruction(InstructionConstants.OP_IADD),
377            },{
378                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
379                new ConstantInstruction(InstructionConstants.OP_LDC, A),
380                new SimpleInstruction(InstructionConstants.OP_IADD),
381            },
382        },
383        {   // c * i = i * c
384            {
385                new SimpleInstruction(InstructionConstants.OP_ICONST_0, A),
386                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
387                new SimpleInstruction(InstructionConstants.OP_IMUL),
388            },{
389                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
390                new SimpleInstruction(InstructionConstants.OP_ICONST_0, A),
391                new SimpleInstruction(InstructionConstants.OP_IMUL),
392            },
393        },
394        {   // b * i = i * b
395            {
396                new SimpleInstruction(InstructionConstants.OP_BIPUSH, A),
397                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
398                new SimpleInstruction(InstructionConstants.OP_IMUL),
399            },{
400                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
401                new SimpleInstruction(InstructionConstants.OP_BIPUSH, A),
402                new SimpleInstruction(InstructionConstants.OP_IMUL),
403            },
404        },
405        {   // s * i = i * s
406            {
407                new SimpleInstruction(InstructionConstants.OP_SIPUSH, A),
408                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
409                new SimpleInstruction(InstructionConstants.OP_IMUL),
410            },{
411                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
412                new SimpleInstruction(InstructionConstants.OP_SIPUSH, A),
413                new SimpleInstruction(InstructionConstants.OP_IMUL),
414            },
415        },
416        {   // c * i = i * c
417            {
418                new ConstantInstruction(InstructionConstants.OP_LDC, A),
419                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
420                new SimpleInstruction(InstructionConstants.OP_IMUL),
421            },{
422                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
423                new ConstantInstruction(InstructionConstants.OP_LDC, A),
424                new SimpleInstruction(InstructionConstants.OP_IMUL),
425            },
426        },
427        {   // c + l = l + c
428            {
429                new SimpleInstruction(InstructionConstants.OP_LCONST_0, A),
430                new VariableInstruction(InstructionConstants.OP_LLOAD, X),
431                new SimpleInstruction(InstructionConstants.OP_LADD),
432            },{
433                new VariableInstruction(InstructionConstants.OP_LLOAD, X),
434                new SimpleInstruction(InstructionConstants.OP_LCONST_0, A),
435                new SimpleInstruction(InstructionConstants.OP_LADD),
436            },
437        },
438        {   // c + l = l + c
439            {
440                new ConstantInstruction(InstructionConstants.OP_LDC2_W, A),
441                new VariableInstruction(InstructionConstants.OP_LLOAD, X),
442                new SimpleInstruction(InstructionConstants.OP_LADD),
443            },{
444                new VariableInstruction(InstructionConstants.OP_LLOAD, X),
445                new ConstantInstruction(InstructionConstants.OP_LDC2_W, A),
446                new SimpleInstruction(InstructionConstants.OP_LADD),
447            },
448        },
449        {   // c * l = l * c
450            {
451                new SimpleInstruction(InstructionConstants.OP_LCONST_0, A),
452                new VariableInstruction(InstructionConstants.OP_LLOAD, X),
453                new SimpleInstruction(InstructionConstants.OP_LMUL),
454            },{
455                new VariableInstruction(InstructionConstants.OP_LLOAD, X),
456                new SimpleInstruction(InstructionConstants.OP_LCONST_0, A),
457                new SimpleInstruction(InstructionConstants.OP_LMUL),
458            },
459        },
460        {   // c + f = f + c
461            {
462                new SimpleInstruction(InstructionConstants.OP_FCONST_0, A),
463                new VariableInstruction(InstructionConstants.OP_FLOAD, X),
464                new SimpleInstruction(InstructionConstants.OP_FADD),
465            },{
466                new VariableInstruction(InstructionConstants.OP_FLOAD, X),
467                new SimpleInstruction(InstructionConstants.OP_FCONST_0, A),
468                new SimpleInstruction(InstructionConstants.OP_FADD),
469            },
470        },
471        {   // c + f = f + c
472            {
473                new ConstantInstruction(InstructionConstants.OP_LDC, A),
474                new VariableInstruction(InstructionConstants.OP_FLOAD, X),
475                new SimpleInstruction(InstructionConstants.OP_FADD),
476            },{
477                new VariableInstruction(InstructionConstants.OP_FLOAD, X),
478                new ConstantInstruction(InstructionConstants.OP_LDC, A),
479                new SimpleInstruction(InstructionConstants.OP_FADD),
480            },
481        },
482        {   // c * f = f * c
483            {
484                new SimpleInstruction(InstructionConstants.OP_FCONST_0, A),
485                new VariableInstruction(InstructionConstants.OP_FLOAD, X),
486                new SimpleInstruction(InstructionConstants.OP_FMUL),
487            },{
488                new VariableInstruction(InstructionConstants.OP_FLOAD, X),
489                new SimpleInstruction(InstructionConstants.OP_FCONST_0, A),
490                new SimpleInstruction(InstructionConstants.OP_FMUL),
491            },
492        },
493        {   // c * f = f * c
494            {
495                new ConstantInstruction(InstructionConstants.OP_LDC, A),
496                new VariableInstruction(InstructionConstants.OP_FLOAD, X),
497                new SimpleInstruction(InstructionConstants.OP_LMUL),
498            },{
499                new VariableInstruction(InstructionConstants.OP_FLOAD, X),
500                new ConstantInstruction(InstructionConstants.OP_LDC, A),
501                new SimpleInstruction(InstructionConstants.OP_LMUL),
502            },
503        },
504        {   // c + d = d + c
505            {
506                new SimpleInstruction(InstructionConstants.OP_DCONST_0, A),
507                new VariableInstruction(InstructionConstants.OP_DLOAD, X),
508                new SimpleInstruction(InstructionConstants.OP_DADD),
509            },{
510                new VariableInstruction(InstructionConstants.OP_DLOAD, X),
511                new SimpleInstruction(InstructionConstants.OP_DCONST_0, A),
512                new SimpleInstruction(InstructionConstants.OP_DADD),
513            },
514        },
515        {   // c + d = d + c
516            {
517                new ConstantInstruction(InstructionConstants.OP_LDC2_W, A),
518                new VariableInstruction(InstructionConstants.OP_DLOAD, X),
519                new SimpleInstruction(InstructionConstants.OP_DADD),
520            },{
521                new VariableInstruction(InstructionConstants.OP_DLOAD, X),
522                new ConstantInstruction(InstructionConstants.OP_LDC2_W, A),
523                new SimpleInstruction(InstructionConstants.OP_DADD),
524            },
525        },
526        {   // c * d = d * c
527            {
528                new SimpleInstruction(InstructionConstants.OP_DCONST_0, A),
529                new VariableInstruction(InstructionConstants.OP_DLOAD, X),
530                new SimpleInstruction(InstructionConstants.OP_DMUL),
531            },{
532                new VariableInstruction(InstructionConstants.OP_DLOAD, X),
533                new SimpleInstruction(InstructionConstants.OP_DCONST_0, A),
534                new SimpleInstruction(InstructionConstants.OP_DMUL),
535            },
536        },
537        {   // c * d = d * c
538            {
539                new ConstantInstruction(InstructionConstants.OP_LDC2_W, A),
540                new VariableInstruction(InstructionConstants.OP_DLOAD, X),
541                new SimpleInstruction(InstructionConstants.OP_DMUL),
542            },{
543                new VariableInstruction(InstructionConstants.OP_DLOAD, X),
544                new ConstantInstruction(InstructionConstants.OP_LDC2_W, A),
545                new SimpleInstruction(InstructionConstants.OP_DMUL),
546            },
547        },
548        {   // i = i + c = i += c
549            {
550                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
551                new SimpleInstruction(InstructionConstants.OP_ICONST_0, A),
552                new SimpleInstruction(InstructionConstants.OP_IADD),
553                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
554            },{
555                new VariableInstruction(InstructionConstants.OP_IINC, X, A),
556            },
557        },
558        {   // i = i + b = i += b
559            {
560                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
561                new SimpleInstruction(InstructionConstants.OP_BIPUSH, A),
562                new SimpleInstruction(InstructionConstants.OP_IADD),
563                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
564            },{
565                new VariableInstruction(InstructionConstants.OP_IINC, X, A),
566            },
567        },
568        {   // i = i + s = i += s
569            {
570                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
571                new SimpleInstruction(InstructionConstants.OP_SIPUSH, A),
572                new SimpleInstruction(InstructionConstants.OP_IADD),
573                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
574            },{
575                new VariableInstruction(InstructionConstants.OP_IINC, X, A),
576            },
577        },
578        {   // i = i - -1 = i++
579            {
580                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
581                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
582                new SimpleInstruction(InstructionConstants.OP_ISUB),
583                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
584            },{
585                new VariableInstruction(InstructionConstants.OP_IINC, X, 1),
586            },
587        },
588        {   // i = i - 1 = i--
589            {
590                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
591                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
592                new SimpleInstruction(InstructionConstants.OP_ISUB),
593                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
594            },{
595                new VariableInstruction(InstructionConstants.OP_IINC, X, -1),
596            },
597        },
598        {   // i = i - 2 = i -= 2
599            {
600                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
601                new SimpleInstruction(InstructionConstants.OP_ICONST_2),
602                new SimpleInstruction(InstructionConstants.OP_ISUB),
603                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
604            },{
605                new VariableInstruction(InstructionConstants.OP_IINC, X, -2),
606            },
607        },
608        {   // i = i - 3 = i -= 3
609            {
610                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
611                new SimpleInstruction(InstructionConstants.OP_ICONST_3),
612                new SimpleInstruction(InstructionConstants.OP_ISUB),
613                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
614            },{
615                new VariableInstruction(InstructionConstants.OP_IINC, X, -3),
616            },
617        },
618        {   // i = i - 4 = i -= 4
619            {
620                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
621                new SimpleInstruction(InstructionConstants.OP_ICONST_4),
622                new SimpleInstruction(InstructionConstants.OP_ISUB),
623                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
624            },{
625                new VariableInstruction(InstructionConstants.OP_IINC, X, -4),
626            },
627        },
628        {   // i = i - 5 = i -= 5
629            {
630                new VariableInstruction(InstructionConstants.OP_ILOAD, X),
631                new SimpleInstruction(InstructionConstants.OP_ICONST_5),
632                new SimpleInstruction(InstructionConstants.OP_ISUB),
633                new VariableInstruction(InstructionConstants.OP_ISTORE, X),
634            },{
635                new VariableInstruction(InstructionConstants.OP_IINC, X, -5),
636            },
637        },
638        {   // ... + 0 = ...
639            {
640                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
641                new SimpleInstruction(InstructionConstants.OP_IADD),
642            },{
643                // Nothing.
644            },
645        },
646        {   // ... + 0L = ...
647            {
648                new SimpleInstruction(InstructionConstants.OP_LCONST_0),
649                new SimpleInstruction(InstructionConstants.OP_LADD),
650            },{
651                // Nothing.
652            },
653        },
654        {   // ... + 0f = ...
655            {
656                new SimpleInstruction(InstructionConstants.OP_FCONST_0),
657                new SimpleInstruction(InstructionConstants.OP_FADD),
658            },{
659                // Nothing.
660            },
661        },
662        {   // ... + 0d = ...
663            {
664                new SimpleInstruction(InstructionConstants.OP_DCONST_0),
665                new SimpleInstruction(InstructionConstants.OP_DADD),
666            },{
667                // Nothing.
668            },
669        },
670        {   // ... - 0 = ...
671            {
672                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
673                new SimpleInstruction(InstructionConstants.OP_ISUB),
674            },{
675                // Nothing.
676            },
677        },
678        {   // ... - 0L = ...
679            {
680                new SimpleInstruction(InstructionConstants.OP_LCONST_0),
681                new SimpleInstruction(InstructionConstants.OP_LSUB),
682            },{
683                // Nothing.
684            },
685        },
686        {   // ... - 0f = ...
687            {
688                new SimpleInstruction(InstructionConstants.OP_FCONST_0),
689                new SimpleInstruction(InstructionConstants.OP_FSUB),
690            },{
691                // Nothing.
692            },
693        },
694        {   // ... - 0d = ...
695            {
696                new SimpleInstruction(InstructionConstants.OP_DCONST_0),
697                new SimpleInstruction(InstructionConstants.OP_DSUB),
698            },{
699                // Nothing.
700            },
701        },
702        {   // ... * -1 = -...
703            {
704                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
705                new SimpleInstruction(InstructionConstants.OP_IMUL),
706            },{
707                new SimpleInstruction(InstructionConstants.OP_INEG),
708            },
709        },
710        {   // ... * 0 = 0
711            {
712                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
713                new SimpleInstruction(InstructionConstants.OP_IMUL),
714            },{
715                new SimpleInstruction(InstructionConstants.OP_POP),
716                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
717            },
718        },
719        {   // ... * 1 = ...
720            {
721                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
722                new SimpleInstruction(InstructionConstants.OP_IMUL),
723            },{
724                // Nothing.
725            },
726        },
727        {   // ... * 2 = ... << 1
728            {
729                new SimpleInstruction(InstructionConstants.OP_ICONST_2),
730                new SimpleInstruction(InstructionConstants.OP_IMUL),
731            },{
732                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
733                new SimpleInstruction(InstructionConstants.OP_ISHL),
734            },
735        },
736        {   // ... * 4 = ... << 2
737            {
738                new SimpleInstruction(InstructionConstants.OP_ICONST_4),
739                new SimpleInstruction(InstructionConstants.OP_IMUL),
740            },{
741                new SimpleInstruction(InstructionConstants.OP_ICONST_2),
742                new SimpleInstruction(InstructionConstants.OP_ISHL),
743            },
744        },
745        {   // ... * 8 = ... << 3
746            {
747                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
748                new SimpleInstruction(InstructionConstants.OP_IMUL),
749            },{
750                new SimpleInstruction(InstructionConstants.OP_ICONST_3),
751                new SimpleInstruction(InstructionConstants.OP_ISHL),
752            },
753        },
754        {   // ... * 16 = ... << 4
755            {
756                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
757                new SimpleInstruction(InstructionConstants.OP_IMUL),
758            },{
759                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4),
760                new SimpleInstruction(InstructionConstants.OP_ISHL),
761            },
762        },
763        {   // ... * 32 = ... << 5
764            {
765                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
766                new SimpleInstruction(InstructionConstants.OP_IMUL),
767            },{
768                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5),
769                new SimpleInstruction(InstructionConstants.OP_ISHL),
770            },
771        },
772        {   // ... * 64 = ... << 6
773            {
774                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 64),
775                new SimpleInstruction(InstructionConstants.OP_IMUL),
776            },{
777                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6),
778                new SimpleInstruction(InstructionConstants.OP_ISHL),
779            },
780        },
781        {   // ... * 128 = ... << 7
782            {
783                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 128),
784                new SimpleInstruction(InstructionConstants.OP_IMUL),
785            },{
786                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7),
787                new SimpleInstruction(InstructionConstants.OP_ISHL),
788            },
789        },
790        {   // ... * 256 = ... << 8
791            {
792                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 256),
793                new SimpleInstruction(InstructionConstants.OP_IMUL),
794            },{
795                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
796                new SimpleInstruction(InstructionConstants.OP_ISHL),
797            },
798        },
799        {   // ... * 512 = ... << 9
800            {
801                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 512),
802                new SimpleInstruction(InstructionConstants.OP_IMUL),
803            },{
804                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9),
805                new SimpleInstruction(InstructionConstants.OP_ISHL),
806            },
807        },
808        {   // ... * 1024 = ... << 10
809            {
810                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 1024),
811                new SimpleInstruction(InstructionConstants.OP_IMUL),
812            },{
813                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10),
814                new SimpleInstruction(InstructionConstants.OP_ISHL),
815            },
816        },
817        {   // ... * 2048 = ... << 11
818            {
819                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 2048),
820                new SimpleInstruction(InstructionConstants.OP_IMUL),
821            },{
822                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11),
823                new SimpleInstruction(InstructionConstants.OP_ISHL),
824            },
825        },
826        {   // ... * 4096 = ... << 12
827            {
828                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 4096),
829                new SimpleInstruction(InstructionConstants.OP_IMUL),
830            },{
831                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12),
832                new SimpleInstruction(InstructionConstants.OP_ISHL),
833            },
834        },
835        {   // ... * 8192 = ... << 13
836            {
837                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 8192),
838                new SimpleInstruction(InstructionConstants.OP_IMUL),
839            },{
840                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13),
841                new SimpleInstruction(InstructionConstants.OP_ISHL),
842            },
843        },
844        {   // ... * 16384 = ... << 14
845            {
846                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 16384),
847                new SimpleInstruction(InstructionConstants.OP_IMUL),
848            },{
849                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14),
850                new SimpleInstruction(InstructionConstants.OP_ISHL),
851            },
852        },
853        {   // ... * 32768 = ... << 15
854            {
855                new ConstantInstruction(InstructionConstants.OP_LDC, I_32768),
856                new SimpleInstruction(InstructionConstants.OP_IMUL),
857            },{
858                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15),
859                new SimpleInstruction(InstructionConstants.OP_ISHL),
860            },
861        },
862        {   // ... * 65536 = ... << 16
863            {
864                new ConstantInstruction(InstructionConstants.OP_LDC, I_65536),
865                new SimpleInstruction(InstructionConstants.OP_IMUL),
866            },{
867                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
868                new SimpleInstruction(InstructionConstants.OP_ISHL),
869            },
870        },
871        {   // ... * 16777216 = ... << 24
872            {
873                new ConstantInstruction(InstructionConstants.OP_LDC, I_16777216),
874                new SimpleInstruction(InstructionConstants.OP_IMUL),
875            },{
876                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
877                new SimpleInstruction(InstructionConstants.OP_ISHL),
878            },
879        },
880        {   // ... * -1L = -...
881            {
882                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1),
883                new SimpleInstruction(InstructionConstants.OP_LMUL),
884            },{
885                new SimpleInstruction(InstructionConstants.OP_LNEG),
886            },
887        },
888        {   // ... * 0L = 0L
889            {
890                new SimpleInstruction(InstructionConstants.OP_LCONST_0),
891                new SimpleInstruction(InstructionConstants.OP_LMUL),
892            },{
893                new SimpleInstruction(InstructionConstants.OP_POP2),
894                new SimpleInstruction(InstructionConstants.OP_LCONST_0),
895            },
896        },
897        {   // ... * 1L = ...
898            {
899                new SimpleInstruction(InstructionConstants.OP_LCONST_1),
900                new SimpleInstruction(InstructionConstants.OP_LMUL),
901            },{
902                // Nothing.
903            },
904        },
905        {   // ... * 2L = ... << 1
906            {
907                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2),
908                new SimpleInstruction(InstructionConstants.OP_LMUL),
909            },{
910                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
911                new SimpleInstruction(InstructionConstants.OP_LSHL),
912            },
913        },
914        {   // ... * 4L = ... << 2
915            {
916                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4),
917                new SimpleInstruction(InstructionConstants.OP_LMUL),
918            },{
919                new SimpleInstruction(InstructionConstants.OP_ICONST_2),
920                new SimpleInstruction(InstructionConstants.OP_LSHL),
921            },
922        },
923        {   // ... * 8L = ... << 3
924            {
925                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8),
926                new SimpleInstruction(InstructionConstants.OP_LMUL),
927            },{
928                new SimpleInstruction(InstructionConstants.OP_ICONST_3),
929                new SimpleInstruction(InstructionConstants.OP_LSHL),
930            },
931        },
932        {   // ... * 16L = ... << 4
933            {
934                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16),
935                new SimpleInstruction(InstructionConstants.OP_LMUL),
936            },{
937                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4),
938                new SimpleInstruction(InstructionConstants.OP_LSHL),
939            },
940        },
941        {   // ... * 32L = ... << 5
942            {
943                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32),
944                new SimpleInstruction(InstructionConstants.OP_LMUL),
945            },{
946                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5),
947                new SimpleInstruction(InstructionConstants.OP_LSHL),
948            },
949        },
950        {   // ... * 64L = ... << 6
951            {
952                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_64),
953                new SimpleInstruction(InstructionConstants.OP_LMUL),
954            },{
955                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6),
956                new SimpleInstruction(InstructionConstants.OP_LSHL),
957            },
958        },
959        {   // ... * 128L = ... << 7
960            {
961                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_128),
962                new SimpleInstruction(InstructionConstants.OP_LMUL),
963            },{
964                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7),
965                new SimpleInstruction(InstructionConstants.OP_LSHL),
966            },
967        },
968        {   // ... * 256L = ... << 8
969            {
970                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_256),
971                new SimpleInstruction(InstructionConstants.OP_LMUL),
972            },{
973                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
974                new SimpleInstruction(InstructionConstants.OP_LSHL),
975            },
976        },
977        {   // ... * 512L = ... << 9
978            {
979                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_512),
980                new SimpleInstruction(InstructionConstants.OP_LMUL),
981            },{
982                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9),
983                new SimpleInstruction(InstructionConstants.OP_LSHL),
984            },
985        },
986        {   // ... * 1024L = ... << 10
987            {
988                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_1024),
989                new SimpleInstruction(InstructionConstants.OP_LMUL),
990            },{
991                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10),
992                new SimpleInstruction(InstructionConstants.OP_LSHL),
993            },
994        },
995        {   // ... * 2048L = ... << 11
996            {
997                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2048),
998                new SimpleInstruction(InstructionConstants.OP_LMUL),
999            },{
1000                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11),
1001                new SimpleInstruction(InstructionConstants.OP_LSHL),
1002            },
1003        },
1004        {   // ... * 4096L = ... << 12
1005            {
1006                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4096),
1007                new SimpleInstruction(InstructionConstants.OP_LMUL),
1008            },{
1009                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12),
1010                new SimpleInstruction(InstructionConstants.OP_LSHL),
1011            },
1012        },
1013        {   // ... * 8192L = ... << 13
1014            {
1015                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8192),
1016                new SimpleInstruction(InstructionConstants.OP_LMUL),
1017            },{
1018                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13),
1019                new SimpleInstruction(InstructionConstants.OP_LSHL),
1020            },
1021        },
1022        {   // ... * 16384L = ... << 14
1023            {
1024                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16384),
1025                new SimpleInstruction(InstructionConstants.OP_LMUL),
1026            },{
1027                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14),
1028                new SimpleInstruction(InstructionConstants.OP_LSHL),
1029            },
1030        },
1031        {   // ... * 32768L = ... << 15
1032            {
1033                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32768),
1034                new SimpleInstruction(InstructionConstants.OP_LMUL),
1035            },{
1036                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15),
1037                new SimpleInstruction(InstructionConstants.OP_LSHL),
1038            },
1039        },
1040        {   // ... * 65536LL = ... << 16
1041            {
1042                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_65536),
1043                new SimpleInstruction(InstructionConstants.OP_LMUL),
1044            },{
1045                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1046                new SimpleInstruction(InstructionConstants.OP_LSHL),
1047            },
1048        },
1049        {   // ... * 16777216L = ... << 24
1050            {
1051                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16777216),
1052                new SimpleInstruction(InstructionConstants.OP_LMUL),
1053            },{
1054                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1055                new SimpleInstruction(InstructionConstants.OP_LSHL),
1056            },
1057        },
1058        {   // ... * 4294967296L = ... << 32
1059            {
1060                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4294967296),
1061                new SimpleInstruction(InstructionConstants.OP_LMUL),
1062            },{
1063                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
1064                new SimpleInstruction(InstructionConstants.OP_LSHL),
1065            },
1066        },
1067        {   // ... * -1f = -...
1068            {
1069                new ConstantInstruction(InstructionConstants.OP_LDC, F_M1),
1070                new SimpleInstruction(InstructionConstants.OP_FMUL),
1071            },{
1072                new SimpleInstruction(InstructionConstants.OP_FNEG),
1073            },
1074        },
1075//        {   // ... * 0f = 0f (or NaN)
1076//            {
1077//                new SimpleInstruction(InstructionConstants.OP_FCONST_0),
1078//                new SimpleInstruction(InstructionConstants.OP_FMUL),
1079//            },{
1080//                new SimpleInstruction(InstructionConstants.OP_POP),
1081//                new SimpleInstruction(InstructionConstants.OP_FCONST_0),
1082//            },
1083//        },
1084        {   // ... * 1f = ...
1085            {
1086                new SimpleInstruction(InstructionConstants.OP_FCONST_1),
1087                new SimpleInstruction(InstructionConstants.OP_FMUL),
1088            },{
1089                // Nothing.
1090            },
1091        },
1092        {   // ... * -1d = -...
1093            {
1094                new ConstantInstruction(InstructionConstants.OP_LDC2_W, D_M1),
1095                new SimpleInstruction(InstructionConstants.OP_DMUL),
1096            },{
1097                new SimpleInstruction(InstructionConstants.OP_DNEG),
1098            },
1099        },
1100//        {   // ... * 0d = 0d (or NaN)
1101//            {
1102//                new SimpleInstruction(InstructionConstants.OP_DCONST_0),
1103//                new SimpleInstruction(InstructionConstants.OP_DMUL),
1104//            },{
1105//                new SimpleInstruction(InstructionConstants.OP_POP2),
1106//                new SimpleInstruction(InstructionConstants.OP_DCONST_0),
1107//            },
1108//        },
1109        {   // ... * 1d = ...
1110            {
1111                new SimpleInstruction(InstructionConstants.OP_DCONST_1),
1112                new SimpleInstruction(InstructionConstants.OP_DMUL),
1113            },{
1114                // Nothing.
1115            },
1116        },
1117        {   // ... / -1 = -...
1118            {
1119                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
1120                new SimpleInstruction(InstructionConstants.OP_IDIV),
1121            },{
1122                new SimpleInstruction(InstructionConstants.OP_INEG),
1123            },
1124        },
1125        {   // ... / 1 = ...
1126            {
1127                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
1128                new SimpleInstruction(InstructionConstants.OP_IDIV),
1129            },{
1130                // Nothing.
1131            },
1132        },
1133        // Not valid for negative values.
1134//        {   // ... / 2 = ... >> 1
1135//            {
1136//                new SimpleInstruction(InstructionConstants.OP_ICONST_2),
1137//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1138//            },{
1139//                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
1140//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1141//            },
1142//        },
1143//        {   // ... / 4 = ... >> 2
1144//            {
1145//                new SimpleInstruction(InstructionConstants.OP_ICONST_4),
1146//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1147//            },{
1148//                new SimpleInstruction(InstructionConstants.OP_ICONST_2),
1149//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1150//            },
1151//        },
1152//        {   // ... / 8 = ... >> 3
1153//            {
1154//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1155//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1156//            },{
1157//                new SimpleInstruction(InstructionConstants.OP_ICONST_3),
1158//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1159//            },
1160//        },
1161//        {   // ... / 16 = ... >> 4
1162//            {
1163//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1164//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1165//            },{
1166//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4),
1167//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1168//            },
1169//        },
1170//        {   // ... / 32 = ... >> 5
1171//            {
1172//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
1173//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1174//            },{
1175//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5),
1176//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1177//            },
1178//        },
1179//        {   // ... / 64 = ... >> 6
1180//            {
1181//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 64),
1182//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1183//            },{
1184//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6),
1185//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1186//            },
1187//        },
1188//        {   // ... / 128 = ... >> 7
1189//            {
1190//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 128),
1191//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1192//            },{
1193//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7),
1194//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1195//            },
1196//        },
1197//        {   // ... / 256 = ... >> 8
1198//            {
1199//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 256),
1200//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1201//            },{
1202//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1203//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1204//            },
1205//        },
1206//        {   // ... / 512 = ... >> 9
1207//            {
1208//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 512),
1209//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1210//            },{
1211//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9),
1212//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1213//            },
1214//        },
1215//        {   // ... / 1024 = ... >> 10
1216//            {
1217//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 1024),
1218//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1219//            },{
1220//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10),
1221//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1222//            },
1223//        },
1224//        {   // ... / 2048 = ... >> 11
1225//            {
1226//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 2048),
1227//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1228//            },{
1229//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11),
1230//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1231//            },
1232//        },
1233//        {   // ... / 4096 = ... >> 12
1234//            {
1235//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 4096),
1236//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1237//            },{
1238//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12),
1239//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1240//            },
1241//        },
1242//        {   // ... / 8192 = ... >> 13
1243//            {
1244//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 8192),
1245//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1246//            },{
1247//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13),
1248//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1249//            },
1250//        },
1251//        {   // ... / 16384 = ... >> 14
1252//            {
1253//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 16384),
1254//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1255//            },{
1256//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14),
1257//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1258//            },
1259//        },
1260//        {   // ... / 32768 = ... >> 15
1261//            {
1262//                new ConstantInstruction(InstructionConstants.OP_LDC, I_32768),
1263//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1264//            },{
1265//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15),
1266//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1267//            },
1268//        },
1269//        {   // ... / 65536 = ... >> 16
1270//            {
1271//                new ConstantInstruction(InstructionConstants.OP_LDC, I_65536),
1272//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1273//            },{
1274//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1275//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1276//            },
1277//        },
1278//        {   // ... / 16777216 = ... >> 24
1279//            {
1280//                new ConstantInstruction(InstructionConstants.OP_LDC, I_16777216),
1281//                new SimpleInstruction(InstructionConstants.OP_IDIV),
1282//            },{
1283//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1284//                new SimpleInstruction(InstructionConstants.OP_ISHR),
1285//            },
1286//        },
1287        {   // ... / -1L = -...
1288            {
1289                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1),
1290                new SimpleInstruction(InstructionConstants.OP_LDIV),
1291            },{
1292                new SimpleInstruction(InstructionConstants.OP_LNEG),
1293            },
1294        },
1295        {   // ... / 1L = ...
1296            {
1297                new SimpleInstruction(InstructionConstants.OP_LCONST_1),
1298                new SimpleInstruction(InstructionConstants.OP_LDIV),
1299            },{
1300                // Nothing.
1301            },
1302        },
1303        // Not valid for negative values.
1304//        {   // ... / 2L = ... >> 1
1305//            {
1306//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2),
1307//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1308//            },{
1309//                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
1310//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1311//            },
1312//        },
1313//        {   // ... / 4L = ... >> 2
1314//            {
1315//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4),
1316//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1317//            },{
1318//                new SimpleInstruction(InstructionConstants.OP_ICONST_2),
1319//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1320//            },
1321//        },
1322//        {   // ... / 8L = ... >> 3
1323//            {
1324//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8),
1325//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1326//            },{
1327//                new SimpleInstruction(InstructionConstants.OP_ICONST_3),
1328//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1329//            },
1330//        },
1331//        {   // ... / 16L = ... >> 4
1332//            {
1333//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16),
1334//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1335//            },{
1336//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 4),
1337//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1338//            },
1339//        },
1340//        {   // ... / 32L = ... >> 5
1341//            {
1342//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32),
1343//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1344//            },{
1345//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 5),
1346//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1347//            },
1348//        },
1349//        {   // ... / 64L = ... >> 6
1350//            {
1351//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_64),
1352//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1353//            },{
1354//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 6),
1355//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1356//            },
1357//        },
1358//        {   // ... / 128L = ... >> 7
1359//            {
1360//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_128),
1361//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1362//            },{
1363//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 7),
1364//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1365//            },
1366//        },
1367//        {   // ... / 256L = ... >> 8
1368//            {
1369//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_256),
1370//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1371//            },{
1372//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1373//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1374//            },
1375//        },
1376//        {   // ... / 512L = ... >> 9
1377//            {
1378//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_512),
1379//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1380//            },{
1381//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 9),
1382//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1383//            },
1384//        },
1385//        {   // ... / 1024L = ... >> 10
1386//            {
1387//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_1024),
1388//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1389//            },{
1390//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 10),
1391//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1392//            },
1393//        },
1394//        {   // ... / 2048L = ... >> 11
1395//            {
1396//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_2048),
1397//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1398//            },{
1399//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 11),
1400//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1401//            },
1402//        },
1403//        {   // ... / 4096L = ... >> 12
1404//            {
1405//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4096),
1406//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1407//            },{
1408//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 12),
1409//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1410//            },
1411//        },
1412//        {   // ... / 8192L = ... >> 13
1413//            {
1414//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_8192),
1415//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1416//            },{
1417//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 13),
1418//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1419//            },
1420//        },
1421//        {   // ... / 16384L = ... >> 14
1422//            {
1423//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16384),
1424//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1425//            },{
1426//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 14),
1427//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1428//            },
1429//        },
1430//        {   // ... / 32768L = ... >> 15
1431//            {
1432//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_32768),
1433//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1434//            },{
1435//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 15),
1436//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1437//            },
1438//        },
1439//        {   // ... / 65536LL = ... >> 16
1440//            {
1441//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_65536),
1442//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1443//            },{
1444//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1445//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1446//            },
1447//        },
1448//        {   // ... / 16777216L = ... >> 24
1449//            {
1450//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_16777216),
1451//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1452//            },{
1453//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1454//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1455//            },
1456//        },
1457//        {   // ... / 4294967296L = ... >> 32
1458//            {
1459//                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_4294967296),
1460//                new SimpleInstruction(InstructionConstants.OP_LDIV),
1461//            },{
1462//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
1463//                new SimpleInstruction(InstructionConstants.OP_LSHR),
1464//            },
1465//        },
1466        {   // ... / -1f = -...
1467            {
1468                new ConstantInstruction(InstructionConstants.OP_LDC, F_M1),
1469                new SimpleInstruction(InstructionConstants.OP_FDIV),
1470            },{
1471                new SimpleInstruction(InstructionConstants.OP_FNEG),
1472            },
1473        },
1474        {   // ... / 1f = ...
1475            {
1476                new SimpleInstruction(InstructionConstants.OP_FCONST_1),
1477                new SimpleInstruction(InstructionConstants.OP_FDIV),
1478            },{
1479                // Nothing.
1480            },
1481        },
1482        {   // ... / -1d = -...
1483            {
1484                new ConstantInstruction(InstructionConstants.OP_LDC2_W, D_M1),
1485                new SimpleInstruction(InstructionConstants.OP_DDIV),
1486            },{
1487                new SimpleInstruction(InstructionConstants.OP_DNEG),
1488            },
1489        },
1490        {   // ... / 1d = ...
1491            {
1492                new SimpleInstruction(InstructionConstants.OP_DCONST_1),
1493                new SimpleInstruction(InstructionConstants.OP_DDIV),
1494            },{
1495                // Nothing.
1496            },
1497        },
1498        {   // ... % 1 = 0
1499            {
1500                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
1501                new SimpleInstruction(InstructionConstants.OP_IREM),
1502            },{
1503                new SimpleInstruction(InstructionConstants.OP_POP),
1504                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
1505            },
1506        },
1507//        {   // ... % 2 = ... & 0x1
1508//            {
1509//                new SimpleInstruction(InstructionConstants.OP_ICONST_2),
1510//                new SimpleInstruction(InstructionConstants.OP_IREM),
1511//            },{
1512//                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
1513//                new SimpleInstruction(InstructionConstants.OP_IAND),
1514//            },
1515//        },
1516//        {   // ... % 4 = ... & 0x3
1517//            {
1518//                new SimpleInstruction(InstructionConstants.OP_ICONST_4),
1519//                new SimpleInstruction(InstructionConstants.OP_IREM),
1520//            },{
1521//                new SimpleInstruction(InstructionConstants.OP_ICONST_3),
1522//                new SimpleInstruction(InstructionConstants.OP_IAND),
1523//            },
1524//        },
1525//        {   // ... % 8 = ... & 0x07
1526//            {
1527//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1528//                new SimpleInstruction(InstructionConstants.OP_IREM),
1529//            },{
1530//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x07),
1531//                new SimpleInstruction(InstructionConstants.OP_IAND),
1532//            },
1533//        },
1534//        {   // ... % 16 = ... & 0x0f
1535//            {
1536//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1537//                new SimpleInstruction(InstructionConstants.OP_IREM),
1538//            },{
1539//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x0f),
1540//                new SimpleInstruction(InstructionConstants.OP_IAND),
1541//            },
1542//        },
1543//        {   // ... % 32 = ... & 0x1f
1544//            {
1545//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
1546//                new SimpleInstruction(InstructionConstants.OP_IREM),
1547//            },{
1548//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x1f),
1549//                new SimpleInstruction(InstructionConstants.OP_IAND),
1550//            },
1551//        },
1552//        {   // ... % 64 = ... & 0x3f
1553//            {
1554//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 64),
1555//                new SimpleInstruction(InstructionConstants.OP_IREM),
1556//            },{
1557//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x3f),
1558//                new SimpleInstruction(InstructionConstants.OP_IAND),
1559//            },
1560//        },
1561//        {   // ... % 128 = ... & 0x7f
1562//            {
1563//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 128),
1564//                new SimpleInstruction(InstructionConstants.OP_IREM),
1565//            },{
1566//                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 0x7f),
1567//                new SimpleInstruction(InstructionConstants.OP_IAND),
1568//            },
1569//        },
1570//        {   // ... % 256 = ... & 0x00ff
1571//            {
1572//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 256),
1573//                new SimpleInstruction(InstructionConstants.OP_IREM),
1574//            },{
1575//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x00ff),
1576//                new SimpleInstruction(InstructionConstants.OP_IAND),
1577//            },
1578//        },
1579//        {   // ... % 512 = ... & 0x01ff
1580//            {
1581//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 512),
1582//                new SimpleInstruction(InstructionConstants.OP_IREM),
1583//            },{
1584//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x01ff),
1585//                new SimpleInstruction(InstructionConstants.OP_IAND),
1586//            },
1587//        },
1588//        {   // ... % 1024 = ... & 0x03ff
1589//            {
1590//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 1024),
1591//                new SimpleInstruction(InstructionConstants.OP_IREM),
1592//            },{
1593//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x03ff),
1594//                new SimpleInstruction(InstructionConstants.OP_IAND),
1595//            },
1596//        },
1597//        {   // ... % 2048 = ... & 0x07ff
1598//            {
1599//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 2048),
1600//                new SimpleInstruction(InstructionConstants.OP_IREM),
1601//            },{
1602//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x07ff),
1603//                new SimpleInstruction(InstructionConstants.OP_IAND),
1604//            },
1605//        },
1606//        {   // ... % 4096 = ... & 0x0fff
1607//            {
1608//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 4096),
1609//                new SimpleInstruction(InstructionConstants.OP_IREM),
1610//            },{
1611//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x0fff),
1612//                new SimpleInstruction(InstructionConstants.OP_IAND),
1613//            },
1614//        },
1615//        {   // ... % 8192 = ... & 0x1fff
1616//            {
1617//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 8192),
1618//                new SimpleInstruction(InstructionConstants.OP_IREM),
1619//            },{
1620//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x1fff),
1621//                new SimpleInstruction(InstructionConstants.OP_IAND),
1622//            },
1623//        },
1624//        {   // ... % 16384 = ... & 0x3fff
1625//            {
1626//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 16384),
1627//                new SimpleInstruction(InstructionConstants.OP_IREM),
1628//            },{
1629//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0x3fff),
1630//                new SimpleInstruction(InstructionConstants.OP_IAND),
1631//            },
1632//        },
1633        {   // ... % 1L = 0L
1634            {
1635                new SimpleInstruction(InstructionConstants.OP_LCONST_1),
1636                new SimpleInstruction(InstructionConstants.OP_LREM),
1637            },{
1638                new SimpleInstruction(InstructionConstants.OP_POP2),
1639                new SimpleInstruction(InstructionConstants.OP_LCONST_0),
1640            },
1641        },
1642//        {   // ... % 1f = 0f
1643//            {
1644//                new SimpleInstruction(InstructionConstants.OP_FCONST_1),
1645//                new SimpleInstruction(InstructionConstants.OP_FREM),
1646//            },{
1647//                new SimpleInstruction(InstructionConstants.OP_POP),
1648//                new SimpleInstruction(InstructionConstants.OP_FCONST_0),
1649//            },
1650//        },
1651//        {   // ... % 1d = 0d
1652//            {
1653//                new SimpleInstruction(InstructionConstants.OP_DCONST_1),
1654//                new SimpleInstruction(InstructionConstants.OP_DREM),
1655//            },{
1656//                new SimpleInstruction(InstructionConstants.OP_POP2),
1657//                new SimpleInstruction(InstructionConstants.OP_DCONST_0),
1658//            },
1659//        },
1660        {   // -(-...) = ...
1661            {
1662                new SimpleInstruction(InstructionConstants.OP_INEG),
1663                new SimpleInstruction(InstructionConstants.OP_INEG),
1664            },{
1665                // Nothing.
1666            },
1667        },
1668        {   // -(-...) = ...
1669            {
1670                new SimpleInstruction(InstructionConstants.OP_LNEG),
1671                new SimpleInstruction(InstructionConstants.OP_LNEG),
1672            },{
1673                // Nothing.
1674            },
1675        },
1676        {   // -(-...) = ...
1677            {
1678                new SimpleInstruction(InstructionConstants.OP_FNEG),
1679                new SimpleInstruction(InstructionConstants.OP_FNEG),
1680            },{
1681                // Nothing.
1682            },
1683        },
1684        {   // -(-...) = ...
1685            {
1686                new SimpleInstruction(InstructionConstants.OP_DNEG),
1687                new SimpleInstruction(InstructionConstants.OP_DNEG),
1688            },{
1689                // Nothing.
1690            },
1691        },
1692        {   // +(-...) = -...
1693            {
1694                new SimpleInstruction(InstructionConstants.OP_INEG),
1695                new SimpleInstruction(InstructionConstants.OP_IADD),
1696            },{
1697                new SimpleInstruction(InstructionConstants.OP_ISUB),
1698            },
1699        },
1700        {   // +(-...) = -...
1701            {
1702                new SimpleInstruction(InstructionConstants.OP_LNEG),
1703                new SimpleInstruction(InstructionConstants.OP_LADD),
1704            },{
1705                new SimpleInstruction(InstructionConstants.OP_LSUB),
1706            },
1707        },
1708        {   // +(-...) = -...
1709            {
1710                new SimpleInstruction(InstructionConstants.OP_FNEG),
1711                new SimpleInstruction(InstructionConstants.OP_FADD),
1712            },{
1713                new SimpleInstruction(InstructionConstants.OP_FSUB),
1714            },
1715        },
1716        {   // +(-...) = -...
1717            {
1718                new SimpleInstruction(InstructionConstants.OP_DNEG),
1719                new SimpleInstruction(InstructionConstants.OP_DADD),
1720            },{
1721                new SimpleInstruction(InstructionConstants.OP_DSUB),
1722            },
1723        },
1724        {   // ... << 0 = ...
1725            {
1726                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
1727                new SimpleInstruction(InstructionConstants.OP_ISHL),
1728            },{
1729                // Nothing.
1730            },
1731        },
1732        {   // ... << 0 = ...
1733            {
1734                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
1735                new SimpleInstruction(InstructionConstants.OP_LSHL),
1736            },{
1737                // Nothing.
1738            },
1739        },
1740        {   // ... >> 0 = ...
1741            {
1742                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
1743                new SimpleInstruction(InstructionConstants.OP_ISHR),
1744            },{
1745                // Nothing.
1746            },
1747        },
1748        {   // ... >> 0 = ...
1749            {
1750                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
1751                new SimpleInstruction(InstructionConstants.OP_LSHR),
1752            },{
1753                // Nothing.
1754            },
1755        },
1756        {   // ... >>> 0 = ...
1757            {
1758                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
1759                new SimpleInstruction(InstructionConstants.OP_IUSHR),
1760            },{
1761                // Nothing.
1762            },
1763        },
1764        {   // ... >>> 0 = ...
1765            {
1766                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
1767                new SimpleInstruction(InstructionConstants.OP_LUSHR),
1768            },{
1769                // Nothing.
1770            },
1771        },
1772        {   // ... & -1 = ...
1773            {
1774                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
1775                new SimpleInstruction(InstructionConstants.OP_IAND),
1776            },{
1777                // Nothing.
1778            },
1779        },
1780        {   // ... & 0 = 0
1781            {
1782                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
1783                new SimpleInstruction(InstructionConstants.OP_IAND),
1784            },{
1785                new SimpleInstruction(InstructionConstants.OP_POP),
1786                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
1787            },
1788        },
1789        {   // ... & -1L = ...
1790            {
1791                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1),
1792                new SimpleInstruction(InstructionConstants.OP_LAND),
1793            },{
1794                // Nothing.
1795            },
1796        },
1797        {   // ... & 0L = 0L
1798            {
1799                new SimpleInstruction(InstructionConstants.OP_LCONST_0),
1800                new SimpleInstruction(InstructionConstants.OP_LAND),
1801            },{
1802                new SimpleInstruction(InstructionConstants.OP_POP2),
1803                new SimpleInstruction(InstructionConstants.OP_LCONST_0),
1804            },
1805        },
1806        {   // ... | -1 = -1
1807            {
1808                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
1809                new SimpleInstruction(InstructionConstants.OP_IOR),
1810            },{
1811                new SimpleInstruction(InstructionConstants.OP_POP),
1812                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
1813            },
1814        },
1815        {   // ... | 0 = ...
1816            {
1817               new SimpleInstruction(InstructionConstants.OP_ICONST_0),
1818               new SimpleInstruction(InstructionConstants.OP_IOR),
1819           },{
1820                // Nothing.
1821            },
1822        },
1823        {   // ... | -1L = -1L
1824            {
1825                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1),
1826                new SimpleInstruction(InstructionConstants.OP_LAND),
1827            },{
1828                new SimpleInstruction(InstructionConstants.OP_POP2),
1829                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_M1),
1830            },
1831        },
1832        {   // ... | 0L = ...
1833            {
1834                new SimpleInstruction(InstructionConstants.OP_LCONST_0),
1835                new SimpleInstruction(InstructionConstants.OP_LOR),
1836            },{
1837                // Nothing.
1838            },
1839        },
1840        {   // ... ^ 0 = ...
1841            {
1842                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
1843                new SimpleInstruction(InstructionConstants.OP_IXOR),
1844            },{
1845                // Nothing.
1846            },
1847        },
1848        {   // ... ^ 0L = ...
1849            {
1850                new SimpleInstruction(InstructionConstants.OP_LCONST_0),
1851                new SimpleInstruction(InstructionConstants.OP_LXOR),
1852            },{
1853                // Nothing.
1854            },
1855        },
1856        {   // (... & 0x0000ff00) >> 8 = (... >> 8) & 0xff
1857            {
1858                new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ff00),
1859                new SimpleInstruction(InstructionConstants.OP_IAND),
1860                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1861                new SimpleInstruction(InstructionConstants.OP_ISHR),
1862            },{
1863                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1864                new SimpleInstruction(InstructionConstants.OP_ISHR),
1865                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff),
1866                new SimpleInstruction(InstructionConstants.OP_IAND),
1867            },
1868        },
1869        {   // (... & 0x0000ff00) >>> 8 = (... >>> 8) & 0xff
1870            {
1871                new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ff00),
1872                new SimpleInstruction(InstructionConstants.OP_IAND),
1873                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1874                new SimpleInstruction(InstructionConstants.OP_IUSHR),
1875            },{
1876                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 8),
1877                new SimpleInstruction(InstructionConstants.OP_IUSHR),
1878                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff),
1879                new SimpleInstruction(InstructionConstants.OP_IAND),
1880            },
1881        },
1882        {   // (... & 0x00ff0000) >> 16 = (... >> 16) & 0xff
1883            {
1884                new ConstantInstruction(InstructionConstants.OP_LDC, I_0x00ff0000),
1885                new SimpleInstruction(InstructionConstants.OP_IAND),
1886                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1887                new SimpleInstruction(InstructionConstants.OP_ISHR),
1888            },{
1889                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1890                new SimpleInstruction(InstructionConstants.OP_ISHR),
1891                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff),
1892                new SimpleInstruction(InstructionConstants.OP_IAND),
1893            },
1894        },
1895        {   // (... & 0x00ff0000) >>> 16 = (... >>> 16) & 0xff
1896            {
1897                new ConstantInstruction(InstructionConstants.OP_LDC, I_0x00ff0000),
1898                new SimpleInstruction(InstructionConstants.OP_IAND),
1899                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1900                new SimpleInstruction(InstructionConstants.OP_IUSHR),
1901            },{
1902                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1903                new SimpleInstruction(InstructionConstants.OP_IUSHR),
1904                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff),
1905                new SimpleInstruction(InstructionConstants.OP_IAND),
1906            },
1907        },
1908        {   // (... & 0xff000000) >> 24 = ... >> 24
1909            {
1910                new ConstantInstruction(InstructionConstants.OP_LDC, I_0xff000000),
1911                new SimpleInstruction(InstructionConstants.OP_IAND),
1912                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1913                new SimpleInstruction(InstructionConstants.OP_ISHR),
1914            },{
1915                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1916                new SimpleInstruction(InstructionConstants.OP_ISHR),
1917            },
1918        },
1919        {   // (... & 0xffff0000) >> 16 = ... >> 16
1920            {
1921                new ConstantInstruction(InstructionConstants.OP_LDC, I_0xffff0000),
1922                new SimpleInstruction(InstructionConstants.OP_IAND),
1923                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1924                new SimpleInstruction(InstructionConstants.OP_ISHR),
1925            },{
1926                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1927                new SimpleInstruction(InstructionConstants.OP_ISHR),
1928            },
1929        },
1930        {   // (... & 0xffff0000) >>> 16 = ... >>> 16
1931            {
1932                new ConstantInstruction(InstructionConstants.OP_LDC, I_0xffff0000),
1933                new SimpleInstruction(InstructionConstants.OP_IAND),
1934                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1935                new SimpleInstruction(InstructionConstants.OP_IUSHR),
1936            },{
1937                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
1938                new SimpleInstruction(InstructionConstants.OP_IUSHR),
1939            },
1940        },
1941        {   // (... >> 24) & 0xff = ... >>> 24
1942            {
1943                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1944                new SimpleInstruction(InstructionConstants.OP_ISHR),
1945                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff),
1946                new SimpleInstruction(InstructionConstants.OP_IAND),
1947            },{
1948                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1949                new SimpleInstruction(InstructionConstants.OP_IUSHR),
1950            },
1951        },
1952        {   // (... >>> 24) & 0xff = ... >>> 24
1953            {
1954                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1955                new SimpleInstruction(InstructionConstants.OP_IUSHR),
1956                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff),
1957                new SimpleInstruction(InstructionConstants.OP_IAND),
1958            },{
1959                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1960                new SimpleInstruction(InstructionConstants.OP_IUSHR),
1961            },
1962        },
1963        {   // (byte)(... & 0x000000ff) = (byte)...
1964            {
1965                new SimpleInstruction(InstructionConstants.OP_SIPUSH, 0xff),
1966                new SimpleInstruction(InstructionConstants.OP_IAND),
1967                new SimpleInstruction(InstructionConstants.OP_I2B),
1968            },{
1969                new SimpleInstruction(InstructionConstants.OP_I2B),
1970            },
1971        },
1972        {   // (char)(... & 0x0000ffff) = (char)...
1973            {
1974                new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ffff),
1975                new SimpleInstruction(InstructionConstants.OP_IAND),
1976                new SimpleInstruction(InstructionConstants.OP_I2C),
1977            },{
1978                new SimpleInstruction(InstructionConstants.OP_I2C),
1979            },
1980        },
1981        {   // (short)(... & 0x0000ffff) = (short)...
1982            {
1983                new ConstantInstruction(InstructionConstants.OP_LDC, I_0x0000ffff),
1984                new SimpleInstruction(InstructionConstants.OP_IAND),
1985                new SimpleInstruction(InstructionConstants.OP_I2S),
1986            },{
1987                new SimpleInstruction(InstructionConstants.OP_I2S),
1988            },
1989        },
1990        {   // (byte)(... >> 24) = ... >> 24
1991            {
1992                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1993                new SimpleInstruction(InstructionConstants.OP_ISHR),
1994                new SimpleInstruction(InstructionConstants.OP_I2B),
1995            },{
1996                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
1997                new SimpleInstruction(InstructionConstants.OP_ISHR),
1998            },
1999        },
2000        {   // (byte)(... >>> 24) = ... >> 24
2001            {
2002                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
2003                new SimpleInstruction(InstructionConstants.OP_IUSHR),
2004                new SimpleInstruction(InstructionConstants.OP_I2B),
2005            },{
2006                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
2007                new SimpleInstruction(InstructionConstants.OP_ISHR),
2008            },
2009        },
2010        {   // (char)(... >> 16) = ... >>> 16
2011            {
2012                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2013                new SimpleInstruction(InstructionConstants.OP_ISHR),
2014                new SimpleInstruction(InstructionConstants.OP_I2C),
2015            },{
2016                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2017                new SimpleInstruction(InstructionConstants.OP_IUSHR),
2018            },
2019        },
2020        {   // (char)(... >>> 16) = ... >>> 16
2021            {
2022                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2023                new SimpleInstruction(InstructionConstants.OP_IUSHR),
2024                new SimpleInstruction(InstructionConstants.OP_I2C),
2025            },{
2026                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2027                new SimpleInstruction(InstructionConstants.OP_IUSHR),
2028            },
2029        },
2030        {   // (short)(... >> 16) = ... >> 16
2031            {
2032                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2033                new SimpleInstruction(InstructionConstants.OP_ISHR),
2034                new SimpleInstruction(InstructionConstants.OP_I2S),
2035            },{
2036                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2037                new SimpleInstruction(InstructionConstants.OP_ISHR),
2038            },
2039        },
2040        {   // (short)(... >>> 16) = ... >> 16
2041            {
2042                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2043                new SimpleInstruction(InstructionConstants.OP_IUSHR),
2044                new SimpleInstruction(InstructionConstants.OP_I2S),
2045            },{
2046                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2047                new SimpleInstruction(InstructionConstants.OP_ISHR),
2048            },
2049        },
2050        {   // ... << 24 >> 24 = (byte)...
2051            {
2052                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
2053                new SimpleInstruction(InstructionConstants.OP_ISHL),
2054                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 24),
2055                new SimpleInstruction(InstructionConstants.OP_ISHR),
2056            },{
2057                new SimpleInstruction(InstructionConstants.OP_I2B),
2058            },
2059        },
2060        {   // ... << 16 >>> 16 = (char)...
2061            {
2062                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2063                new SimpleInstruction(InstructionConstants.OP_ISHL),
2064                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2065                new SimpleInstruction(InstructionConstants.OP_IUSHR),
2066            },{
2067                new SimpleInstruction(InstructionConstants.OP_I2C),
2068            },
2069        },
2070        {   // ... << 16 >> 16 = (short)...
2071            {
2072                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2073                new SimpleInstruction(InstructionConstants.OP_ISHL),
2074                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 16),
2075                new SimpleInstruction(InstructionConstants.OP_ISHR),
2076            },{
2077                new SimpleInstruction(InstructionConstants.OP_I2S),
2078            },
2079        },
2080        {   // ... << 32 >> 32 = (long)(int)...
2081            {
2082                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
2083                new SimpleInstruction(InstructionConstants.OP_LSHL),
2084                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
2085                new SimpleInstruction(InstructionConstants.OP_LSHR),
2086            },{
2087                new SimpleInstruction(InstructionConstants.OP_L2I),
2088                new SimpleInstruction(InstructionConstants.OP_I2L),
2089            },
2090        },
2091        {   // (int)(... & 0x00000000ffffffffL) = (int)...
2092            {
2093                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_0x00000000ffffffff),
2094                new SimpleInstruction(InstructionConstants.OP_LAND),
2095                new SimpleInstruction(InstructionConstants.OP_L2I),
2096            },{
2097                new SimpleInstruction(InstructionConstants.OP_L2I),
2098            },
2099        },
2100        {   // (... & 0xffffffff00000000L) >> 32 = ... >> 32
2101            {
2102                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_0xffffffff00000000),
2103                new SimpleInstruction(InstructionConstants.OP_LAND),
2104                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
2105                new SimpleInstruction(InstructionConstants.OP_LSHR),
2106            },{
2107                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
2108                new SimpleInstruction(InstructionConstants.OP_LSHR),
2109            },
2110        },
2111        {   // (... & 0xffffffff00000000L) >>> 32 = ... >>> 32
2112            {
2113                new ConstantInstruction(InstructionConstants.OP_LDC2_W, L_0xffffffff00000000),
2114                new SimpleInstruction(InstructionConstants.OP_LAND),
2115                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
2116                new SimpleInstruction(InstructionConstants.OP_LUSHR),
2117            },{
2118                new SimpleInstruction(InstructionConstants.OP_BIPUSH, 32),
2119                new SimpleInstruction(InstructionConstants.OP_LUSHR),
2120            },
2121        },
2122        {   // ... += 0 = nothing
2123            {
2124                new VariableInstruction(InstructionConstants.OP_IINC, X, 0),
2125            },{
2126                // Nothing.
2127            },
2128        },
2129    };
2130
2131    public static final Instruction[][][] FIELD = new Instruction[][][]
2132    {
2133        {   // getfield/putfield = nothing
2134            {
2135                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2136                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2137                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Y),
2138                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y),
2139            },{
2140                // Nothing.
2141            },
2142        },
2143//        {   // putfield_L/putfield_L = pop2_x1/putfield
2144//            {
2145//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2146//                // ...
2147//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L),
2148//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2149//                // ...
2150//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L),
2151//            },{
2152//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2153//                // ...
2154//                new SimpleInstruction(InstructionConstants.OP_POP2),
2155//                // ...
2156//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L),
2157//            },
2158//        },
2159//        {   // putfield_D/putfield_D = pop2_x1/putfield
2160//            {
2161//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2162//                // ...
2163//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D),
2164//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2165//                // ...
2166//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D),
2167//            },{
2168//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2169//                // ...
2170//                new SimpleInstruction(InstructionConstants.OP_POP2),
2171//                // ...
2172//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D),
2173//            },
2174//        },
2175//        {   // putfield/putfield = pop_x1/putfield
2176//            {
2177//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2178//                // ...
2179//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y),
2180//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2181//                // ...
2182//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y),
2183//            },{
2184//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2185//                // ...
2186//                new SimpleInstruction(InstructionConstants.OP_POP),
2187//                // ...
2188//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y),
2189//            },
2190//        },
2191//        {   // putfield_L/getfield_L = dup2_x1/putfield
2192//            {
2193//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2194//                // ...
2195//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L),
2196//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2197//                new ConstantInstruction(InstructionConstants.OP_GETFIELD, FIELD_L),
2198//            },{
2199//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2200//                // ...
2201//                new SimpleInstruction(InstructionConstants.OP_DUP2_X1),
2202//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_L),
2203//            },
2204//        },
2205//        {   // putfield_D/getfield_D = dup2_x1/putfield
2206//            {
2207//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2208//                // ...
2209//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D),
2210//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2211//                new ConstantInstruction(InstructionConstants.OP_GETFIELD, FIELD_D),
2212//            },{
2213//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2214//                // ...
2215//                new SimpleInstruction(InstructionConstants.OP_DUP2_X1),
2216//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, FIELD_D),
2217//            },
2218//        },
2219//        {   // putfield/getfield = dup_x1/putfield
2220//            {
2221//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2222//                // ...
2223//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y),
2224//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2225//                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Y),
2226//            },{
2227//                new VariableInstruction(InstructionConstants.OP_ALOAD, X),
2228//                // ...
2229//                new SimpleInstruction(InstructionConstants.OP_DUP_X1),
2230//                new ConstantInstruction(InstructionConstants.OP_PUTFIELD, Y),
2231//            },
2232//        },
2233        {   // getstatic/putstatic = nothing
2234            {
2235                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, X),
2236                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X),
2237            },{
2238                // Nothing.
2239            },
2240        },
2241        {   // putstatic_L/putstatic_L = pop2/putstatic
2242            {
2243                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L),
2244                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L),
2245            },{
2246                new SimpleInstruction(InstructionConstants.OP_POP2),
2247                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L),
2248            },
2249        },
2250        {   // putstatic_D/putstatic_D = pop2/putstatic
2251            {
2252                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D),
2253                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D),
2254            },{
2255                new SimpleInstruction(InstructionConstants.OP_POP2),
2256                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D),
2257            },
2258        },
2259        {   // putstatic/putstatic = pop/putstatic
2260            {
2261                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X),
2262                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X),
2263            },{
2264                new SimpleInstruction(InstructionConstants.OP_POP),
2265                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X),
2266            },
2267        },
2268        {   // putstatic_L/getstatic_L = dup2/putstatic
2269            {
2270                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L),
2271                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, FIELD_L),
2272            },{
2273                new SimpleInstruction(InstructionConstants.OP_DUP2),
2274                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_L),
2275            },
2276        },
2277        {   // putstatic_D/getstatic_D = dup2/putstatic
2278            {
2279                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D),
2280                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, FIELD_D),
2281            },{
2282                new SimpleInstruction(InstructionConstants.OP_DUP2),
2283                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, FIELD_D),
2284            },
2285        },
2286        {   // putstatic/getstatic = dup/putstatic
2287            {
2288                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X),
2289                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, X),
2290            },{
2291                new SimpleInstruction(InstructionConstants.OP_DUP),
2292                new ConstantInstruction(InstructionConstants.OP_PUTSTATIC, X),
2293            },
2294        },
2295    };
2296
2297    public static final Instruction[][][] CAST = new Instruction[][][]
2298    {
2299        {   // (byte)(byte)... = (byte)...
2300            {
2301                new SimpleInstruction(InstructionConstants.OP_I2B),
2302                new SimpleInstruction(InstructionConstants.OP_I2B),
2303            },{
2304                new SimpleInstruction(InstructionConstants.OP_I2B),
2305            },
2306        },
2307        {   // (byte)(char)... = (byte)...
2308            {
2309                new SimpleInstruction(InstructionConstants.OP_I2C),
2310                new SimpleInstruction(InstructionConstants.OP_I2B),
2311            },{
2312                new SimpleInstruction(InstructionConstants.OP_I2B),
2313            },
2314        },
2315        {   // (byte)(short)... = (byte)...
2316            {
2317                new SimpleInstruction(InstructionConstants.OP_I2S),
2318                new SimpleInstruction(InstructionConstants.OP_I2B),
2319            },{
2320                new SimpleInstruction(InstructionConstants.OP_I2B),
2321            },
2322        },
2323        {   // (char)(char)... = (char)...
2324            {
2325                new SimpleInstruction(InstructionConstants.OP_I2C),
2326                new SimpleInstruction(InstructionConstants.OP_I2C),
2327            },{
2328                new SimpleInstruction(InstructionConstants.OP_I2C),
2329            },
2330        },
2331        {   // (char)(short)... = (char)...
2332            {
2333                new SimpleInstruction(InstructionConstants.OP_I2S),
2334                new SimpleInstruction(InstructionConstants.OP_I2C),
2335            },{
2336                new SimpleInstruction(InstructionConstants.OP_I2C),
2337            },
2338        },
2339        {   // (short)(byte)... = (byte)...
2340            {
2341                new SimpleInstruction(InstructionConstants.OP_I2B),
2342                new SimpleInstruction(InstructionConstants.OP_I2S),
2343            },{
2344                new SimpleInstruction(InstructionConstants.OP_I2B),
2345            },
2346        },
2347        {   // (short)(char)... = (short)...
2348            {
2349                new SimpleInstruction(InstructionConstants.OP_I2C),
2350                new SimpleInstruction(InstructionConstants.OP_I2S),
2351            },{
2352                new SimpleInstruction(InstructionConstants.OP_I2S),
2353            },
2354        },
2355        {   // (short)(short)... = (short)...
2356            {
2357                new SimpleInstruction(InstructionConstants.OP_I2S),
2358                new SimpleInstruction(InstructionConstants.OP_I2S),
2359            },{
2360                new SimpleInstruction(InstructionConstants.OP_I2S),
2361            },
2362        },
2363        {   // (int)(long)... = ...
2364            {
2365                new SimpleInstruction(InstructionConstants.OP_I2L),
2366                new SimpleInstruction(InstructionConstants.OP_L2I),
2367            },{
2368                // Nothing.
2369            },
2370        },
2371        {   // (X)(X)... = (X)...
2372            {
2373                new ConstantInstruction(InstructionConstants.OP_CHECKCAST, X),
2374                new ConstantInstruction(InstructionConstants.OP_CHECKCAST, X),
2375            },{
2376                new ConstantInstruction(InstructionConstants.OP_CHECKCAST, X),
2377            },
2378        },
2379        // Not handled correctly in all cases by VMs prior to Java 6...
2380//        {   // (byte)bytes[...] = bytes[...]
2381//            {
2382//                new SimpleInstruction(InstructionConstants.OP_BALOAD),
2383//                new SimpleInstruction(InstructionConstants.OP_I2B),
2384//            },{
2385//                new SimpleInstruction(InstructionConstants.OP_BALOAD),
2386//            },
2387//        },
2388//        {   // (short)bytes[...] = bytes[...]
2389//            {
2390//                 new SimpleInstruction(InstructionConstants.OP_BALOAD),
2391//                 new SimpleInstruction(InstructionConstants.OP_I2S),
2392//             },{
2393//                new SimpleInstruction(InstructionConstants.OP_BALOAD),
2394//            },
2395//        },
2396//        {   // (char)chars[...] = chars[...]
2397//            {
2398//                new SimpleInstruction(InstructionConstants.OP_CALOAD),
2399//                new SimpleInstruction(InstructionConstants.OP_I2C),
2400//            },{
2401//                new SimpleInstruction(InstructionConstants.OP_CALOAD),
2402//            },
2403//        },
2404//        {   // (short)shorts[...] = shorts[...]
2405//            {
2406//                new SimpleInstruction(InstructionConstants.OP_SALOAD),
2407//                new SimpleInstruction(InstructionConstants.OP_I2S),
2408//            },{
2409//                new SimpleInstruction(InstructionConstants.OP_SALOAD),
2410//            },
2411//        },
2412//        {   // bytes[...] = (byte)... = bytes[...] = ...
2413//            {
2414//                new SimpleInstruction(InstructionConstants.OP_I2B),
2415//                new SimpleInstruction(InstructionConstants.OP_BASTORE),
2416//            },{
2417//                new SimpleInstruction(InstructionConstants.OP_BASTORE),
2418//            },
2419//        },
2420//        {   // chars[...] = (char)... = chars[...] = ...
2421//            {
2422//                new SimpleInstruction(InstructionConstants.OP_I2C),
2423//                new SimpleInstruction(InstructionConstants.OP_CASTORE),
2424//            },{
2425//                new SimpleInstruction(InstructionConstants.OP_CASTORE),
2426//            },
2427//        },
2428//        {   // shorts[...] = (short)... = shorts[...] = ...
2429//            {
2430//                new SimpleInstruction(InstructionConstants.OP_I2S),
2431//                new SimpleInstruction(InstructionConstants.OP_SASTORE),
2432//            },{
2433//                new SimpleInstruction(InstructionConstants.OP_SASTORE),
2434//            },
2435//        },
2436    };
2437
2438    public static final Instruction[][][] BRANCH = new Instruction[][][]
2439    {
2440        {   // goto +3 = nothing
2441            {
2442                new BranchInstruction(InstructionConstants.OP_GOTO, 3),
2443            },{
2444                // Nothing.
2445            },
2446        },
2447        {   // ifeq +3 = pop
2448            {
2449                new BranchInstruction(InstructionConstants.OP_IFEQ, 3),
2450            },{
2451                new SimpleInstruction(InstructionConstants.OP_POP),
2452            },
2453        },
2454        {   // ifne +3 = pop
2455            {
2456                new BranchInstruction(InstructionConstants.OP_IFNE, 3),
2457            },{
2458                new SimpleInstruction(InstructionConstants.OP_POP),
2459            },
2460        },
2461        {   // iflt +3 = pop
2462            {
2463                new BranchInstruction(InstructionConstants.OP_IFLT, 3),
2464            },{
2465                new SimpleInstruction(InstructionConstants.OP_POP),
2466            },
2467        },
2468        {   // ifge +3 = pop
2469            {
2470                new BranchInstruction(InstructionConstants.OP_IFGE, 3),
2471            },{
2472                new SimpleInstruction(InstructionConstants.OP_POP),
2473            },
2474        },
2475        {   // ifgt +3 = pop
2476            {
2477                new BranchInstruction(InstructionConstants.OP_IFGT, 3),
2478            },{
2479                new SimpleInstruction(InstructionConstants.OP_POP),
2480            },
2481        },
2482        {   // ifle +3 = pop
2483            {
2484                new BranchInstruction(InstructionConstants.OP_IFLE, 3),
2485            },{
2486                new SimpleInstruction(InstructionConstants.OP_POP),
2487            },
2488        },
2489        {   // ificmpeq +3 = pop2
2490            {
2491                new BranchInstruction(InstructionConstants.OP_IFICMPEQ, 3),
2492            },{
2493                new SimpleInstruction(InstructionConstants.OP_POP2),
2494            },
2495        },
2496        {   // ificmpne +3 = pop2
2497            {
2498                new BranchInstruction(InstructionConstants.OP_IFICMPNE, 3),
2499            },{
2500                new SimpleInstruction(InstructionConstants.OP_POP2),
2501            },
2502        },
2503        {   // ificmplt +3 = pop2
2504            {
2505                new BranchInstruction(InstructionConstants.OP_IFICMPLT, 3),
2506            },{
2507                new SimpleInstruction(InstructionConstants.OP_POP2),
2508            },
2509        },
2510        {   // ificmpge +3 = pop2
2511            {
2512                new BranchInstruction(InstructionConstants.OP_IFICMPGE, 3),
2513            },{
2514                new SimpleInstruction(InstructionConstants.OP_POP2),
2515            },
2516        },
2517        {   // ificmpgt +3 = pop2
2518            {
2519                new BranchInstruction(InstructionConstants.OP_IFICMPGT, 3),
2520            },{
2521                new SimpleInstruction(InstructionConstants.OP_POP2),
2522            },
2523        },
2524        {   // ificmple +3 = pop2
2525            {
2526                new BranchInstruction(InstructionConstants.OP_IFICMPLE, 3),
2527            },{
2528                new SimpleInstruction(InstructionConstants.OP_POP2),
2529            },
2530        },
2531        {   // ifacmpeq +3 = pop2
2532            {
2533                new BranchInstruction(InstructionConstants.OP_IFACMPEQ, 3),
2534            },{
2535                new SimpleInstruction(InstructionConstants.OP_POP2),
2536            },
2537        },
2538        {   // ifacmpne +3 = pop2
2539            {
2540                new BranchInstruction(InstructionConstants.OP_IFACMPNE, 3),
2541            },{
2542                new SimpleInstruction(InstructionConstants.OP_POP2),
2543            },
2544        },
2545        {   // ifnull +3 = pop
2546            {
2547                new BranchInstruction(InstructionConstants.OP_IFNULL, 3),
2548            },{
2549                new SimpleInstruction(InstructionConstants.OP_POP),
2550            },
2551        },
2552        {   // ifnonnull +3 = pop
2553            {
2554                new BranchInstruction(InstructionConstants.OP_IFNONNULL, 3),
2555            },{
2556                new SimpleInstruction(InstructionConstants.OP_POP),
2557            },
2558        },
2559        {   // if (... == 0) = ifeq
2560            {
2561                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2562                new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X),
2563            },{
2564                new BranchInstruction(InstructionConstants.OP_IFEQ, X),
2565            },
2566        },
2567        {   // if (0 == i) = iload/ifeq
2568            {
2569                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2570                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2571                new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X),
2572            },{
2573                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2574                new BranchInstruction(InstructionConstants.OP_IFEQ, X),
2575            },
2576        },
2577        {   // if (0 == i) = getstatic/ifeq
2578            {
2579                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2580                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2581                new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X),
2582            },{
2583                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2584                new BranchInstruction(InstructionConstants.OP_IFEQ, X),
2585            },
2586        },
2587        {   // if (0 == i) = getfield/ifeq
2588            {
2589                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2590                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2591                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2592                new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X),
2593            },{
2594                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2595                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2596                new BranchInstruction(InstructionConstants.OP_IFEQ, X),
2597            },
2598        },
2599        {   // if (... != 0) = ifne
2600            {
2601                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2602                new BranchInstruction(InstructionConstants.OP_IFICMPNE, X),
2603            },{
2604                new BranchInstruction(InstructionConstants.OP_IFNE, X),
2605            },
2606        },
2607        {   // if (0 != i) = iload/ifeq
2608            {
2609                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2610                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2611                new BranchInstruction(InstructionConstants.OP_IFICMPNE, X),
2612            },{
2613                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2614                new BranchInstruction(InstructionConstants.OP_IFNE, X),
2615            },
2616        },
2617        {   // if (0 != i) = getstatic/ifeq
2618            {
2619                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2620                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2621                new BranchInstruction(InstructionConstants.OP_IFICMPNE, X),
2622            },{
2623                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2624                new BranchInstruction(InstructionConstants.OP_IFNE, X),
2625            },
2626        },
2627        {   // if (0 != i) = getfield/ifeq
2628            {
2629                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2630                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2631                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2632                new BranchInstruction(InstructionConstants.OP_IFICMPNE, X),
2633            },{
2634                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2635                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2636                new BranchInstruction(InstructionConstants.OP_IFNE, X),
2637            },
2638        },
2639        {   // if (... < 0) = iflt
2640            {
2641                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2642                new BranchInstruction(InstructionConstants.OP_IFICMPLT, X),
2643            },{
2644                new BranchInstruction(InstructionConstants.OP_IFLT, X),
2645            },
2646        },
2647        {   // if (... < 1) = ifle
2648            {
2649                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
2650                new BranchInstruction(InstructionConstants.OP_IFICMPLT, X),
2651            },{
2652                new BranchInstruction(InstructionConstants.OP_IFLE, X),
2653            },
2654        },
2655        {   // if (0 > i) = iload/iflt
2656            {
2657                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2658                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2659                new BranchInstruction(InstructionConstants.OP_IFICMPGT, X),
2660            },{
2661                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2662                new BranchInstruction(InstructionConstants.OP_IFLT, X),
2663            },
2664        },
2665        {   // if (1 > i) = iload/ifle
2666            {
2667                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
2668                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2669                new BranchInstruction(InstructionConstants.OP_IFICMPGT, X),
2670            },{
2671                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2672                new BranchInstruction(InstructionConstants.OP_IFLE, X),
2673            },
2674        },
2675        {   // if (0 > i) = getstatic/iflt
2676            {
2677                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2678                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2679                new BranchInstruction(InstructionConstants.OP_IFICMPGT, X),
2680            },{
2681                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2682                new BranchInstruction(InstructionConstants.OP_IFLT, X),
2683            },
2684        },
2685        {   // if (1 > i) = getstatic/ifle
2686            {
2687                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
2688                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2689                new BranchInstruction(InstructionConstants.OP_IFICMPGT, X),
2690            },{
2691                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2692                new BranchInstruction(InstructionConstants.OP_IFLE, X),
2693            },
2694        },
2695        {   // if (0 > i) = getfield/iflt
2696            {
2697                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2698                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2699                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2700                new BranchInstruction(InstructionConstants.OP_IFICMPGT, X),
2701            },{
2702                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2703                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2704                new BranchInstruction(InstructionConstants.OP_IFLT, X),
2705            },
2706        },
2707        {   // if (1 > i) = getfield/ifle
2708            {
2709                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
2710                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2711                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2712                new BranchInstruction(InstructionConstants.OP_IFICMPGT, X),
2713            },{
2714                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2715                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2716                new BranchInstruction(InstructionConstants.OP_IFLE, X),
2717            },
2718        },
2719        {   // if (... >= 0) = ifge
2720            {
2721                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2722                new BranchInstruction(InstructionConstants.OP_IFICMPGE, X),
2723            },{
2724                new BranchInstruction(InstructionConstants.OP_IFGE, X),
2725            },
2726        },
2727        {   // if (... >= 1) = ifgt
2728            {
2729                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
2730                new BranchInstruction(InstructionConstants.OP_IFICMPGE, X),
2731            },{
2732                new BranchInstruction(InstructionConstants.OP_IFGT, X),
2733            },
2734        },
2735        {   // if (0 <= i) = iload/ifge
2736            {
2737                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2738                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2739                new BranchInstruction(InstructionConstants.OP_IFICMPLE, X),
2740            },{
2741                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2742                new BranchInstruction(InstructionConstants.OP_IFGE, X),
2743            },
2744        },
2745        {   // if (1 <= i) = iload/ifgt
2746            {
2747                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
2748                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2749                new BranchInstruction(InstructionConstants.OP_IFICMPLE, X),
2750            },{
2751                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2752                new BranchInstruction(InstructionConstants.OP_IFGT, X),
2753            },
2754        },
2755        {   // if (0 <= i) = getstatic/ifge
2756            {
2757                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2758                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2759                new BranchInstruction(InstructionConstants.OP_IFICMPLE, X),
2760            },{
2761                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2762                new BranchInstruction(InstructionConstants.OP_IFGE, X),
2763            },
2764        },
2765        {   // if (1 <= i) = getstatic/ifgt
2766            {
2767                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
2768                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2769                new BranchInstruction(InstructionConstants.OP_IFICMPLE, X),
2770            },{
2771                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2772                new BranchInstruction(InstructionConstants.OP_IFGT, X),
2773            },
2774        },
2775        {   // if (0 <= i) = getfield/ifge
2776            {
2777                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2778                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2779                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2780                new BranchInstruction(InstructionConstants.OP_IFICMPLE, X),
2781            },{
2782                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2783                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2784                new BranchInstruction(InstructionConstants.OP_IFGE, X),
2785            },
2786        },
2787        {   // if (1 <= i) = getfield/ifgt
2788            {
2789                new SimpleInstruction(InstructionConstants.OP_ICONST_1),
2790                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2791                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2792                new BranchInstruction(InstructionConstants.OP_IFICMPLE, X),
2793            },{
2794                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2795                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2796                new BranchInstruction(InstructionConstants.OP_IFGT, X),
2797            },
2798        },
2799        {   // if (... > 0) = ifgt
2800            {
2801                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2802                new BranchInstruction(InstructionConstants.OP_IFICMPGT, X),
2803            },{
2804                new BranchInstruction(InstructionConstants.OP_IFGT, X),
2805            },
2806        },
2807        {   // if (... > -1) = ifge
2808            {
2809                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
2810                new BranchInstruction(InstructionConstants.OP_IFICMPGT, X),
2811            },{
2812                new BranchInstruction(InstructionConstants.OP_IFGE, X),
2813            },
2814        },
2815        {   // if (0 < i) = iload/ifgt
2816            {
2817                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2818                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2819                new BranchInstruction(InstructionConstants.OP_IFICMPLT, X),
2820            },{
2821                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2822                new BranchInstruction(InstructionConstants.OP_IFGT, X),
2823            },
2824        },
2825        {   // if (-1 < i) = iload/ifge
2826            {
2827                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
2828                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2829                new BranchInstruction(InstructionConstants.OP_IFICMPLT, X),
2830            },{
2831                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2832                new BranchInstruction(InstructionConstants.OP_IFGE, X),
2833            },
2834        },
2835        {   // if (0 < i) = getstatic/ifgt
2836            {
2837                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2838                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2839                new BranchInstruction(InstructionConstants.OP_IFICMPLT, X),
2840            },{
2841                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2842                new BranchInstruction(InstructionConstants.OP_IFGT, X),
2843            },
2844        },
2845        {   // if (-1 < i) = getstatic/ifge
2846            {
2847                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
2848                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2849                new BranchInstruction(InstructionConstants.OP_IFICMPLT, X),
2850            },{
2851                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2852                new BranchInstruction(InstructionConstants.OP_IFGE, X),
2853            },
2854        },
2855        {   // if (0 < i) = getfield/ifgt
2856            {
2857                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2858                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2859                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2860                new BranchInstruction(InstructionConstants.OP_IFICMPLT, X),
2861            },{
2862                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2863                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2864                new BranchInstruction(InstructionConstants.OP_IFGT, X),
2865            },
2866        },
2867        {   // if (-1 < i) = getfield/ifge
2868            {
2869                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
2870                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2871                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2872                new BranchInstruction(InstructionConstants.OP_IFICMPLT, X),
2873            },{
2874                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2875                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2876                new BranchInstruction(InstructionConstants.OP_IFGE, X),
2877            },
2878        },
2879        {   // if (... <= 0) = ifle
2880            {
2881                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2882                new BranchInstruction(InstructionConstants.OP_IFICMPLE, X),
2883            },{
2884                new BranchInstruction(InstructionConstants.OP_IFLE, X),
2885            },
2886        },
2887        {   // if (... <= -1) = iflt
2888            {
2889                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
2890                new BranchInstruction(InstructionConstants.OP_IFICMPLE, X),
2891            },{
2892                new BranchInstruction(InstructionConstants.OP_IFLT, X),
2893            },
2894        },
2895        {   // if (0 >= i) = iload/ifle
2896            {
2897                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2898                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2899                new BranchInstruction(InstructionConstants.OP_IFICMPGE, X),
2900            },{
2901                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2902                new BranchInstruction(InstructionConstants.OP_IFLE, X),
2903            },
2904        },
2905        {   // if (-1 >= i) = iload/iflt
2906            {
2907                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
2908                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2909                new BranchInstruction(InstructionConstants.OP_IFICMPGE, X),
2910            },{
2911                new VariableInstruction(InstructionConstants.OP_ILOAD, Y),
2912                new BranchInstruction(InstructionConstants.OP_IFLT, X),
2913            },
2914        },
2915        {   // if (0 >= i) = getstatic/ifle
2916            {
2917                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2918                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2919                new BranchInstruction(InstructionConstants.OP_IFICMPGE, X),
2920            },{
2921                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2922                new BranchInstruction(InstructionConstants.OP_IFLE, X),
2923            },
2924        },
2925        {   // if (-1 >= i) = getstatic/iflt
2926            {
2927                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
2928                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2929                new BranchInstruction(InstructionConstants.OP_IFICMPGE, X),
2930            },{
2931                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2932                new BranchInstruction(InstructionConstants.OP_IFLT, X),
2933            },
2934        },
2935        {   // if (0 >= i) = getfield/ifle
2936            {
2937                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
2938                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2939                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2940                new BranchInstruction(InstructionConstants.OP_IFICMPGE, X),
2941            },{
2942                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2943                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2944                new BranchInstruction(InstructionConstants.OP_IFLE, X),
2945            },
2946        },
2947        {   // if (-1 >= i) = getfield/iflt
2948            {
2949                new SimpleInstruction(InstructionConstants.OP_ICONST_M1),
2950                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2951                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2952                new BranchInstruction(InstructionConstants.OP_IFICMPGE, X),
2953            },{
2954                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2955                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2956                new BranchInstruction(InstructionConstants.OP_IFLT, X),
2957            },
2958        },
2959        {   // if (... == null) = ifnull
2960            {
2961                new SimpleInstruction(InstructionConstants.OP_ACONST_NULL),
2962                new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X),
2963            },{
2964                new BranchInstruction(InstructionConstants.OP_IFNULL, X),
2965            },
2966        },
2967        {   // if (null == a) = aload/ifnull
2968            {
2969                new SimpleInstruction(InstructionConstants.OP_ACONST_NULL),
2970                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2971                new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X),
2972            },{
2973                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2974                new BranchInstruction(InstructionConstants.OP_IFNULL, X),
2975            },
2976        },
2977        {   // if (null == a) = getstatic/ifnull
2978            {
2979                new SimpleInstruction(InstructionConstants.OP_ACONST_NULL),
2980                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2981                new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X),
2982            },{
2983                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
2984                new BranchInstruction(InstructionConstants.OP_IFNULL, X),
2985            },
2986        },
2987        {   // if (null == a) = getfield/ifnull
2988            {
2989                new SimpleInstruction(InstructionConstants.OP_ACONST_NULL),
2990                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2991                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2992                new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X),
2993            },{
2994                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
2995                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
2996                new BranchInstruction(InstructionConstants.OP_IFNULL, X),
2997            },
2998        },
2999        {   // if (... != null) = ifnonnull
3000            {
3001                new SimpleInstruction(InstructionConstants.OP_ACONST_NULL),
3002                new BranchInstruction(InstructionConstants.OP_IFACMPNE, X),
3003            },{
3004                new BranchInstruction(InstructionConstants.OP_IFNONNULL, X),
3005            },
3006        },
3007        {   // if (null != a) = aload/ifnonnull
3008            {
3009                new SimpleInstruction(InstructionConstants.OP_ACONST_NULL),
3010                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
3011                new BranchInstruction(InstructionConstants.OP_IFACMPNE, X),
3012            },{
3013                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
3014                new BranchInstruction(InstructionConstants.OP_IFNONNULL, X),
3015            },
3016        },
3017        {   // if (null != a) = getstatic/ifnonnull
3018            {
3019                new SimpleInstruction(InstructionConstants.OP_ACONST_NULL),
3020                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
3021                new BranchInstruction(InstructionConstants.OP_IFACMPNE, X),
3022            },{
3023                new ConstantInstruction(InstructionConstants.OP_GETSTATIC, Y),
3024                new BranchInstruction(InstructionConstants.OP_IFNONNULL, X),
3025            },
3026        },
3027        {   // if (null != a) = getfield/ifnonnull
3028            {
3029                new SimpleInstruction(InstructionConstants.OP_ACONST_NULL),
3030                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
3031                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
3032                new BranchInstruction(InstructionConstants.OP_IFACMPNE, X),
3033            },{
3034                new VariableInstruction(InstructionConstants.OP_ALOAD, Y),
3035                new ConstantInstruction(InstructionConstants.OP_GETFIELD, Z),
3036                new BranchInstruction(InstructionConstants.OP_IFNONNULL, X),
3037            },
3038        },
3039        {   // iconst_0/ifeq = goto
3040            {
3041                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
3042                new BranchInstruction(InstructionConstants.OP_IFEQ, X),
3043            },{
3044                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3045            },
3046        },
3047        {   // iconst/ifeq = nothing
3048            {
3049                new SimpleInstruction(InstructionConstants.OP_ICONST_0, A),
3050                new BranchInstruction(InstructionConstants.OP_IFEQ, X),
3051            },{
3052                // Nothing.
3053            },
3054        },
3055        {   // bipush/ifeq = nothing
3056            {
3057                new SimpleInstruction(InstructionConstants.OP_BIPUSH, A),
3058                new BranchInstruction(InstructionConstants.OP_IFEQ, X),
3059            },{
3060                // Nothing.
3061            },
3062        },
3063        {   // sipush/ifeq = nothing
3064            {
3065                new SimpleInstruction(InstructionConstants.OP_SIPUSH, A),
3066                new BranchInstruction(InstructionConstants.OP_IFEQ, X),
3067            },{
3068                // Nothing.
3069            },
3070        },
3071        {   // iconst_0/ifne = nothing
3072            {
3073                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
3074                new BranchInstruction(InstructionConstants.OP_IFNE, X),
3075            },{
3076                // Nothing.
3077            },
3078        },
3079        {   // iconst/ifne = goto
3080            {
3081                new SimpleInstruction(InstructionConstants.OP_ICONST_0, A),
3082                new BranchInstruction(InstructionConstants.OP_IFNE, X),
3083            },{
3084                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3085            },
3086        },
3087        {   // bipush/ifne = goto
3088            {
3089                new SimpleInstruction(InstructionConstants.OP_BIPUSH, A),
3090                new BranchInstruction(InstructionConstants.OP_IFNE, X),
3091            },{
3092                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3093            },
3094        },
3095        {   // sipush/ifne = goto
3096            {
3097                new SimpleInstruction(InstructionConstants.OP_SIPUSH, A),
3098                new BranchInstruction(InstructionConstants.OP_IFNE, X),
3099            },{
3100                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3101            },
3102        },
3103        {   // iconst_0/iflt = nothing
3104            {
3105                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
3106                new BranchInstruction(InstructionConstants.OP_IFLT, X),
3107            },{
3108                // Nothing.
3109            },
3110        },
3111        {   // iconst_0/ifge = goto
3112            {
3113                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
3114                new BranchInstruction(InstructionConstants.OP_IFGE, X),
3115            },{
3116                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3117            },
3118        },
3119        {   // iconst_0/ifgt = nothing
3120            {
3121                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
3122                new BranchInstruction(InstructionConstants.OP_IFGT, X),
3123            },{
3124                // Nothing.
3125            },
3126        },
3127        {   // iconst_0/ifle = goto
3128            {
3129                new SimpleInstruction(InstructionConstants.OP_ICONST_0),
3130                new BranchInstruction(InstructionConstants.OP_IFLE, X),
3131            },{
3132                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3133            },
3134        },
3135        {   // aconst_null/ifnull = goto
3136            {
3137                new SimpleInstruction(InstructionConstants.OP_ACONST_NULL),
3138                new BranchInstruction(InstructionConstants.OP_IFNULL, X),
3139            },{
3140                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3141            },
3142        },
3143        {   // aconst_null/ifnonnul = nothing
3144            {
3145                new SimpleInstruction(InstructionConstants.OP_ACONST_NULL),
3146                new BranchInstruction(InstructionConstants.OP_IFNONNULL, X),
3147            },{
3148                // Nothing.
3149            },
3150        },
3151        {   // ifeq/goto = ifne
3152            {
3153                new BranchInstruction(InstructionConstants.OP_IFEQ, 6),
3154                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3155            },{
3156                new BranchInstruction(InstructionConstants.OP_IFNE, X),
3157            },
3158        },
3159        {   // ifne/goto = ifeq
3160            {
3161                new BranchInstruction(InstructionConstants.OP_IFNE, 6),
3162                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3163            },{
3164                new BranchInstruction(InstructionConstants.OP_IFEQ, X),
3165            },
3166        },
3167        {   // iflt/goto = ifge
3168            {
3169                new BranchInstruction(InstructionConstants.OP_IFLT, 6),
3170                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3171            },{
3172                new BranchInstruction(InstructionConstants.OP_IFGE, X),
3173            },
3174        },
3175        {   // ifge/goto = iflt
3176            {
3177                new BranchInstruction(InstructionConstants.OP_IFGE, 6),
3178                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3179            },{
3180                new BranchInstruction(InstructionConstants.OP_IFLT, X),
3181            },
3182        },
3183        {   // ifgt/goto = ifle
3184            {
3185                new BranchInstruction(InstructionConstants.OP_IFGT, 6),
3186                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3187            },{
3188                new BranchInstruction(InstructionConstants.OP_IFLE, X),
3189            },
3190        },
3191        {   // ifle/goto = ifgt
3192            {
3193                new BranchInstruction(InstructionConstants.OP_IFLE, 6),
3194                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3195            },{
3196                new BranchInstruction(InstructionConstants.OP_IFGT, X),
3197            },
3198        },
3199        {   // ificmpeq/goto = ificmpne
3200            {
3201                new BranchInstruction(InstructionConstants.OP_IFICMPEQ, 6),
3202                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3203            },{
3204                new BranchInstruction(InstructionConstants.OP_IFICMPNE, X),
3205            },
3206        },
3207        {   // ificmpne/goto = ificmpeq
3208            {
3209                new BranchInstruction(InstructionConstants.OP_IFICMPNE, 6),
3210                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3211            },{
3212                new BranchInstruction(InstructionConstants.OP_IFICMPEQ, X),
3213            },
3214        },
3215        {   // ificmplt/goto = ificmpge
3216            {
3217                new BranchInstruction(InstructionConstants.OP_IFICMPLT, 6),
3218                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3219            },{
3220                new BranchInstruction(InstructionConstants.OP_IFICMPGE, X),
3221            },
3222        },
3223        {   // ificmpge/goto = ificmplt
3224            {
3225                new BranchInstruction(InstructionConstants.OP_IFICMPGE, 6),
3226                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3227            },{
3228                new BranchInstruction(InstructionConstants.OP_IFICMPLT, X),
3229            },
3230        },
3231        {   // ificmpgt/goto = ificmple
3232            {
3233                new BranchInstruction(InstructionConstants.OP_IFICMPGT, 6),
3234                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3235            },{
3236                new BranchInstruction(InstructionConstants.OP_IFICMPLE, X),
3237            },
3238        },
3239        {   // ificmple/goto = ificmpgt
3240            {
3241                new BranchInstruction(InstructionConstants.OP_IFICMPLE, 6),
3242                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3243            },{
3244                new BranchInstruction(InstructionConstants.OP_IFICMPGT, X),
3245            },
3246        },
3247        {   // ifacmpeq/goto = ifacmpne
3248            {
3249                new BranchInstruction(InstructionConstants.OP_IFACMPEQ, 6),
3250                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3251            },{
3252                new BranchInstruction(InstructionConstants.OP_IFACMPNE, X),
3253            },
3254        },
3255        {   // ifacmpne/goto = ifacmpeq
3256            {
3257                new BranchInstruction(InstructionConstants.OP_IFACMPNE, 6),
3258                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3259            },{
3260                new BranchInstruction(InstructionConstants.OP_IFACMPEQ, X),
3261            },
3262        },
3263        {   // ifnull/goto = ifnonnull
3264            {
3265                new BranchInstruction(InstructionConstants.OP_IFNULL, 6),
3266                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3267            },{
3268                new BranchInstruction(InstructionConstants.OP_IFNONNULL, X),
3269            },
3270        },
3271        {   // ifnonnull/goto = ifnull
3272            {
3273                new BranchInstruction(InstructionConstants.OP_IFNONNULL, 6),
3274                new BranchInstruction(InstructionConstants.OP_GOTO, X),
3275            },{
3276                new BranchInstruction(InstructionConstants.OP_IFNULL, X),
3277            },
3278        },
3279//        {   // switch (...) { default: ... } = pop/goto ...
3280//            {
3281//                new TableSwitchInstruction(InstructionConstants.OP_TABLESWITCH, A, X, Y, 0, new int[0]),
3282//            },{
3283//                new SimpleInstruction(InstructionConstants.OP_POP),
3284//                new BranchInstruction(InstructionConstants.OP_GOTO, A),
3285//            },
3286//        },
3287//        {   // switch (...) { default: ... } = pop/goto ...
3288//            {
3289//                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, 0, new int[0], new int[0]),
3290//            },{
3291//                new SimpleInstruction(InstructionConstants.OP_POP),
3292//                new BranchInstruction(InstructionConstants.OP_GOTO, A),
3293//            },
3294//        },
3295        {   // switch (...) { case/case/default: ... } = switch (...) { case/default: ... }
3296            {
3297                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { X, Y }, new int[] { A, B }),
3298            },{
3299                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { Y }, new int[] { B }),
3300            },
3301        },
3302        {   // switch (...) { case/case/default: ... } = switch (...) { case/default: ... }
3303            {
3304                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X, Y }, new int[] { A, B }),
3305            },{
3306                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X }, new int[] { A }),
3307            },
3308        },
3309        {   // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... }
3310            {
3311                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { X, Y, Z }, new int[] { A, B, C }),
3312            },{
3313                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, new int[] { Y, Z }, new int[] { B, C }),
3314            },
3315        },
3316        {   // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... }
3317            {
3318                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X, Y, Z }, new int[] { A, B, C }),
3319            },{
3320                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, B, new int[] { X, Z }, new int[] { A, C }),
3321            },
3322        },
3323        {   // switch (...) { case/case/case/default: ... } = switch (...) { case/case/default: ... }
3324            {
3325                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, C, new int[] { X, Y, Z }, new int[] { A, B, C }),
3326            },{
3327                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, C, new int[] { X, Y }, new int[] { A, B }),
3328            },
3329        },
3330//        {   // switch (...) { case ...: ...  default:  ... }
3331//            // = if (... == ...) ... else ...
3332//            {
3333//                new TableSwitchInstruction(InstructionConstants.OP_TABLESWITCH, A, X, Y, 1, new int[] { B }),
3334//            },{
3335//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, X),
3336//                new BranchInstruction(InstructionConstants.OP_IFICMPNE, A),
3337//                new BranchInstruction(InstructionConstants.OP_GOTO, B),
3338//            },
3339//        },
3340//        {   // switch (...) { case ...: ...  default:  ... }
3341//            // = if (... == ...) ... else ...
3342//            {
3343//                new LookUpSwitchInstruction(InstructionConstants.OP_LOOKUPSWITCH, A, 1, new int[] { X }, new int[] { B }),
3344//            },{
3345//                new SimpleInstruction(InstructionConstants.OP_SIPUSH, X),
3346//                new BranchInstruction(InstructionConstants.OP_IFICMPNE, A),
3347//                new BranchInstruction(InstructionConstants.OP_GOTO, B),
3348//            },
3349//        }
3350    };
3351}