• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
2  *
3  * This program and the accompanying materials are made available under
4  * the terms of the Common Public License v1.0 which accompanies this distribution,
5  * and is available at http://www.eclipse.org/legal/cpl-v10.html
6  *
7  * $Id: IOpcodes.java,v 1.1.1.1.2.1 2004/07/10 03:34:52 vlad_r Exp $
8  */
9 package com.vladium.jcd.opcodes;
10 
11 // ----------------------------------------------------------------------------
12 /**
13  * @author Vlad Roubtsov, (C) 2003
14  */
15 public
16 interface IOpcodes
17 {
18     // public: ................................................................
19 
20     //  opcode              hex     dec opbytes stackwords wideable
21     int _nop              = 0x00; // 00     0   0
22     int _aconst_null      = 0x01; // 01     0   +1
23     int _iconst_m1        = 0x02; // 02     0   +1
24     int _iconst_0         = 0x03; // 03     0   +1
25     int _iconst_1         = 0x04; // 04     0   +1
26     int _iconst_2         = 0x05; // 05     0   +1
27     int _iconst_3         = 0x06; // 06     0   +1
28     int _iconst_4         = 0x07; // 07     0   +1
29     int _iconst_5         = 0x08; // 08     0   +1
30     int _lconst_0         = 0x09; // 09     0   +2
31     int _lconst_1         = 0x0A; // 10     0   +2
32     int _fconst_0         = 0x0B; // 11     0   +1
33     int _fconst_1         = 0x0C; // 12     0   +1
34     int _fconst_2         = 0x0D; // 13     0   +1
35     int _dconst_0         = 0x0E; // 14     0   +2
36     int _dconst_1         = 0x0F; // 15     0   +2
37     int _bipush           = 0x10; // 16     1   +1
38     int _sipush           = 0x11; // 17     2   +1
39     int _ldc              = 0x12; // 18     1   +1
40     int _ldc_w            = 0x13; // 19     2   +1
41     int _ldc2_w           = 0x14; // 20     2   +2
42     int _iload            = 0x15; // 21     1   +1  true
43     int _lload            = 0x16; // 22     1   +2  true
44     int _fload            = 0x17; // 23     1   +1  true
45     int _dload            = 0x18; // 24     1   +2  true
46     int _aload            = 0x19; // 25     1   +1  true
47     int _iload_0          = 0x1A; // 26     0   +1
48     int _iload_1          = 0x1B; // 27     0   +1
49     int _iload_2          = 0x1C; // 28     0   +1
50     int _iload_3          = 0x1D; // 29     0   +1
51     int _lload_0          = 0x1E; // 30     0   +2
52     int _lload_1          = 0x1F; // 31     0   +2
53     int _lload_2          = 0x20; // 32     0   +2
54     int _lload_3          = 0x21; // 33     0   +2
55     int _fload_0          = 0x22; // 34     0   +1
56     int _fload_1          = 0x23; // 35     0   +1
57     int _fload_2          = 0x24; // 36     0   +1
58     int _fload_3          = 0x25; // 37     0   +1
59     int _dload_0          = 0x26; // 38     0   +2
60     int _dload_1          = 0x27; // 39     0   +2
61     int _dload_2          = 0x28; // 40     0   +2
62     int _dload_3          = 0x29; // 41     0   +2
63     int _aload_0          = 0x2A; // 42     0   +1
64     int _aload_1          = 0x2B; // 43     0   +1
65     int _aload_2          = 0x2C; // 44     0   +1
66     int _aload_3          = 0x2D; // 45     0   +1
67     int _iaload           = 0x2E; // 46     0   -1
68     int _laload           = 0x2F; // 47     0   0
69     int _faload           = 0x30; // 48     0   -1
70     int _daload           = 0x31; // 49     0   0
71     int _aaload           = 0x32; // 50     0   -1
72     int _baload           = 0x33; // 51     0   -1
73     int _caload           = 0x34; // 52     0   -1
74     int _saload           = 0x35; // 53     0   -1
75     int _istore           = 0x36; // 54     1   -1  true
76     int _lstore           = 0x37; // 55     1   -2  true
77     int _fstore           = 0x38; // 56     1   -1  true
78     int _dstore           = 0x39; // 57     1   -2  true
79     int _astore           = 0x3A; // 58     1   -1  true
80     int _istore_0         = 0x3B; // 59     0   -1
81     int _istore_1         = 0x3C; // 60     0   -1
82     int _istore_2         = 0x3D; // 61     0   -1
83     int _istore_3         = 0x3E; // 62     0   -1
84     int _lstore_0         = 0x3F; // 63     0   -2
85     int _lstore_1         = 0x40; // 64     0   -2
86     int _lstore_2         = 0x41; // 65     0   -2
87     int _lstore_3         = 0x42; // 66     0   -2
88     int _fstore_0         = 0x43; // 67     0   -1
89     int _fstore_1         = 0x44; // 68     0   -1
90     int _fstore_2         = 0x45; // 69     0   -1
91     int _fstore_3         = 0x46; // 70     0   -1
92     int _dstore_0         = 0x47; // 71     0   -2
93     int _dstore_1         = 0x48; // 72     0   -2
94     int _dstore_2         = 0x49; // 73     0   -2
95     int _dstore_3         = 0x4A; // 74     0   -2
96     int _astore_0         = 0x4B; // 75     0   -1
97     int _astore_1         = 0x4C; // 76     0   -1
98     int _astore_2         = 0x4D; // 77     0   -1
99     int _astore_3         = 0x4E; // 78     0   -1
100     int _iastore          = 0x4F; // 79     0   -3
101     int _lastore          = 0x50; // 80     0   -4
102     int _fastore          = 0x51; // 81     0   -3
103     int _dastore          = 0x52; // 82     0   -4
104     int _aastore          = 0x53; // 83     0   -3
105     int _bastore          = 0x54; // 84     0   -3
106     int _castore          = 0x55; // 85     0   -3
107     int _sastore          = 0x56; // 86     0   -3
108     int _pop              = 0x57; // 87     0   -1
109     int _pop2             = 0x58; // 88     0   -2
110     int _dup              = 0x59; // 89     0   +1
111     int _dup_x1           = 0x5A; // 90     0   +1
112     int _dup_x2           = 0x5B; // 91     0   +1
113     int _dup2             = 0x5C; // 92     0   +2
114     int _dup2_x1          = 0x5D; // 93     0   +2
115     int _dup2_x2          = 0x5E; // 94     0   +2
116     int _swap             = 0x5F; // 95     0   0
117     int _iadd             = 0x60; // 96     0   -1
118     int _ladd             = 0x61; // 97     0   -2
119     int _fadd             = 0x62; // 98     0   -1
120     int _dadd             = 0x63; // 99     0   -2
121     int _isub             = 0x64; // 100    0   -1
122     int _lsub             = 0x65; // 101    0   -2
123     int _fsub             = 0x66; // 102    0   -1
124     int _dsub             = 0x67; // 103    0   -2
125     int _imul             = 0x68; // 104    0   -1
126     int _lmul             = 0x69; // 105    0   -2
127     int _fmul             = 0x6A; // 106    0   -1
128     int _dmul             = 0x6B; // 107    0   -2
129     int _idiv             = 0x6C; // 108    0   -1
130     int _ldiv             = 0x6D; // 109    0   -2
131     int _fdiv             = 0x6E; // 110    0   -1
132     int _ddiv             = 0x6F; // 111    0   -2
133     int _irem             = 0x70; // 112    0   -1
134     int _lrem             = 0x71; // 113    0   -2
135     int _frem             = 0x72; // 114    0   -1
136     int _drem             = 0x73; // 115    0   -2
137     int _ineg             = 0x74; // 116    0   0
138     int _lneg             = 0x75; // 117    0   0
139     int _fneg             = 0x76; // 118    0   0
140     int _dneg             = 0x77; // 119    0   0
141     int _ishl             = 0x78; // 120    0   -1
142     int _lshl             = 0x79; // 121    0   -1
143     int _ishr             = 0x7A; // 122    0   -1
144     int _lshr             = 0x7B; // 123    0   -1
145     int _iushr            = 0x7C; // 124    0   -1
146     int _lushr            = 0x7D; // 125    0   -2
147     int _iand             = 0x7E; // 126    0   -1
148     int _land             = 0x7F; // 127    0   -2
149     int _ior              = 0x80; // 128    0   -1
150     int _lor              = 0x81; // 129    0   -2
151     int _ixor             = 0x82; // 130    0   -1
152     int _lxor             = 0x83; // 131    0   -2
153     int _iinc             = 0x84; // 132    2   0   true    [widening is tricky here]
154     int _i2l              = 0x85; // 133    0   +1
155     int _i2f              = 0x86; // 134    0   0
156     int _i2d              = 0x87; // 135    0   +1
157     int _l2i              = 0x88; // 136    0   -1
158     int _l2f              = 0x89; // 137    0   -1
159     int _l2d              = 0x8A; // 138    0   0
160     int _f2i              = 0x8B; // 139    0   0
161     int _f2l              = 0x8C; // 140    0   +1
162     int _f2d              = 0x8D; // 141    0   +1
163     int _d2i              = 0x8E; // 142    0   -1
164     int _d2l              = 0x8F; // 143    0   0
165     int _d2f              = 0x90; // 144    0   -1
166     int _i2b              = 0x91; // 145    0   0
167     int _i2c              = 0x92; // 146    0   0
168     int _i2s              = 0x93; // 147    0   0
169     int _lcmp             = 0x94; // 148    0   -3
170     int _fcmpl            = 0x95; // 149    0   -1
171     int _fcmpg            = 0x96; // 150    0   -1
172     int _dcmpl            = 0x97; // 151    0   -3
173     int _dcmpg            = 0x98; // 152    0   -3
174     int _ifeq             = 0x99; // 153    2   -1
175     int _ifne             = 0x9A; // 154    2   -1
176     int _iflt             = 0x9B; // 155    2   -1
177     int _ifge             = 0x9C; // 156    2   -1
178     int _ifgt             = 0x9D; // 157    2   -1
179     int _ifle             = 0x9E; // 158    2   -1
180     int _if_icmpeq        = 0x9F; // 159    2   -2
181     int _if_icmpne        = 0xA0; // 160    2   -2
182     int _if_icmplt        = 0xA1; // 161    2   -2
183     int _if_icmpge        = 0xA2; // 162    2   -2
184     int _if_icmpgt        = 0xA3; // 163    2   -2
185     int _if_icmple        = 0xA4; // 164    2   -2
186     int _if_acmpeq        = 0xA5; // 165    2   -2
187     int _if_acmpne        = 0xA6; // 166    2   -2
188     int _goto             = 0xA7; // 167    2   0
189     int _jsr              = 0xA8; // 168    2   +1
190     int _ret              = 0xA9; // 169    1   0   true
191     int _tableswitch      = 0xAA; // 170    *   -1      [there are padding bytes and variable number of operands]
192     int _lookupswitch     = 0xAB; // 171    *   -1      [there are padding bytes and variable number of operands]
193     int _ireturn          = 0xAC; // 172    0   -1*     [current method returns]
194     int _lreturn          = 0xAD; // 173    0   -2*     [current method returns]
195     int _freturn          = 0xAE; // 174    0   -1*     [current method returns]
196     int _dreturn          = 0xAF; // 175    0   -2*     [current method returns]
197     int _areturn          = 0xB0; // 176    0   -1*     [current method returns]
198     int _return           = 0xB1; // 177    0   0*      [current method returns]
199     int _getstatic        = 0xB2; // 178    2   +1 or +2*   [after stack depends on the field type]
200     int _putstatic        = 0xB3; // 179    2   -1 or -2*   [after stack depends on the field type]
201     int _getfield         = 0xB4; // 180    2   0 or +1*    [after stack depends on the field type]
202     int _putfield         = 0xB5; // 181    2   -2 or -3*   [after stack depends on the field type]
203     int _invokevirtual    = 0xB6; // 182    2   *   *   [stack words pushed for the call are emptied]
204     int _invokespecial    = 0xB7; // 183    2   *   *   [stack words pushed for the call are emptied]
205     int _invokestatic     = 0xB8; // 184    2   *   *   [stack words pushed for the call are emptied]
206     int _invokeinterface  = 0xB9; // 185    4   *   *   [last operand is 0; stack words pushed for the call are emptied]
207     int _unused           = 0xBA; // 186    *   *   *   [for historical reasons, opcode value 186 is not used]
208     int _new              = 0xBB; // 187    2   +1
209     int _newarray         = 0xBC; // 188    1   0
210     int _anewarray        = 0xBD; // 189    2   0
211     int _arraylength      = 0xBE; // 190    0   0
212     int _athrow           = 0xBF; // 191    0   0*  *   [stack frame is emptied except for 1 obj ref]
213     int _checkcast        = 0xC0; // 192    2   0
214     int _instanceof       = 0xC1; // 193    2   0
215     int _monitorenter     = 0xC2; // 194    0   -1
216     int _monitorexit      = 0xC3; // 195    0   -1
217     int _wide             = 0xC4; // 196    *   *       [depends on instruction being modified]
218     int _multianewarray   = 0xC5; // 197    3   *       [variable number of stack operands]
219     int _ifnull           = 0xC6; // 198    2   -1
220     int _ifnonnull        = 0xC7; // 199    2   -1
221     int _goto_w           = 0xC8; // 200    4   0
222     int _jsr_w            = 0xC9; // 201    4   +1
223     // reserved opcodes:
224     int _breakpoint       = 0xCA; // 202
225     int _impdep1          = 0xFE; // 254
226     int _impdep2          = 0xFF; // 255
227 
228 
229     String [] MNEMONICS =
230     {
231         "nop",              // 0x00    00
232         "aconst_null",      // 0x01    01
233         "iconst_m1",        // 0x02    02
234         "iconst_0",         // 0x03    03
235         "iconst_1",         // 0x04    04
236         "iconst_2",         // 0x05    05
237         "iconst_3",         // 0x06    06
238         "iconst_4",         // 0x07    07
239         "iconst_5",         // 0x08    08
240         "lconst_0",         // 0x09    09
241         "lconst_1",         // 0x0A    10
242         "fconst_0",         // 0x0B    11
243         "fconst_1",         // 0x0C    12
244         "fconst_2",         // 0x0D    13
245         "dconst_0",         // 0x0E    14
246         "dconst_1",         // 0x0F    15
247         "bipush",           // 0x10    16
248         "sipush",           // 0x11    17
249         "ldc",              // 0x12    18
250         "ldc_w",            // 0x13    19
251         "ldc2_w",           // 0x14    20
252         "iload",            // 0x15    21
253         "lload",            // 0x16    22
254         "fload",            // 0x17    23
255         "dload",            // 0x18    24
256         "aload",            // 0x19    25
257         "iload_0",          // 0x1A    26
258         "iload_1",          // 0x1B    27
259         "iload_2",          // 0x1C    28
260         "iload_3",          // 0x1D    29
261         "lload_0",          // 0x1E    30
262         "lload_1",          // 0x1F    31
263         "lload_2",          // 0x20    32
264         "lload_3",          // 0x21    33
265         "fload_0",          // 0x22    34
266         "fload_1",          // 0x23    35
267         "fload_2",          // 0x24    36
268         "fload_3",          // 0x25    37
269         "dload_0",          // 0x26    38
270         "dload_1",          // 0x27    39
271         "dload_2",          // 0x28    40
272         "dload_3",          // 0x29    41
273         "aload_0",          // 0x2A    42
274         "aload_1",          // 0x2B    43
275         "aload_2",          // 0x2C    44
276         "aload_3",          // 0x2D    45
277         "iaload",           // 0x2E    46
278         "laload",           // 0x2F    47
279         "faload",           // 0x30    48
280         "daload",           // 0x31    49
281         "aaload",           // 0x32    50
282         "baload",           // 0x33    51
283         "caload",           // 0x34    52
284         "saload",           // 0x35    53
285         "istore",           // 0x36    54
286         "lstore",           // 0x37    55
287         "fstore",           // 0x38    56
288         "dstore",           // 0x39    57
289         "astore",           // 0x3A    58
290         "istore_0",         // 0x3B    59
291         "istore_1",         // 0x3C    60
292         "istore_2",         // 0x3D    61
293         "istore_3",         // 0x3E    62
294         "lstore_0",         // 0x3F    63
295         "lstore_1",         // 0x40    64
296         "lstore_2",         // 0x41    65
297         "lstore_3",         // 0x42    66
298         "fstore_0",         // 0x43    67
299         "fstore_1",         // 0x44    68
300         "fstore_2",         // 0x45    69
301         "fstore_3",         // 0x46    70
302         "dstore_0",         // 0x47    71
303         "dstore_1",         // 0x48    72
304         "dstore_2",         // 0x49    73
305         "dstore_3",         // 0x4A    74
306         "astore_0",         // 0x4B    75
307         "astore_1",         // 0x4C    76
308         "astore_2",         // 0x4D    77
309         "astore_3",         // 0x4E    78
310         "iastore",          // 0x4F    79
311         "lastore",          // 0x50    80
312         "fastore",          // 0x51    81
313         "dastore",          // 0x52    82
314         "aastore",          // 0x53    83
315         "bastore",          // 0x54    84
316         "castore",          // 0x55    85
317         "sastore",          // 0x56    86
318         "pop",              // 0x57    87
319         "pop2",             // 0x58    88
320         "dup",              // 0x59    089
321         "dup_x1",           // 0x5A    090
322         "dup_x2",           // 0x5B    091
323         "dup2",             // 0x5C    092
324         "dup2_x1",          // 0x5D    093
325         "dup2_x2",          // 0x5E    094
326         "swap",             // 0x5F    095
327         "iadd",             // 0x60    096
328         "ladd",             // 0x61    097
329         "fadd",             // 0x62    098
330         "dadd",             // 0x63    099
331         "isub",             // 0x64    100
332         "lsub",             // 0x65    101
333         "fsub",             // 0x66    102
334         "dsub",             // 0x67    103
335         "imul",             // 0x68    104
336         "lmul",             // 0x69    105
337         "fmul",             // 0x6A    106
338         "dmul",             // 0x6B    107
339         "idiv",             // 0x6C    108
340         "ldiv",             // 0x6D    109
341         "fdiv",             // 0x6E    110
342         "ddiv",             // 0x6F    111
343         "irem",             // 0x70    112
344         "lrem",             // 0x71    113
345         "frem",             // 0x72    114
346         "drem",             // 0x73    115
347         "ineg",             // 0x74    116
348         "lneg",             // 0x75    117
349         "fneg",             // 0x76    118
350         "dneg",             // 0x77    119
351         "ishl",             // 0x78    120
352         "lshl",             // 0x79    121
353         "ishr",             // 0x7A    122
354         "lshr",             // 0x7B    123
355         "iushr",            // 0x7C    124
356         "lushr",            // 0x7D    125
357         "iand",             // 0x7E    126
358         "land",             // 0x7F    127
359         "ior",              // 0x80    128
360         "lor",              // 0x81    129
361         "ixor",             // 0x82    130
362         "lxor",             // 0x83    131
363         "iinc",             // 0x84    132
364         "i2l",              // 0x85    133
365         "i2f",              // 0x86    134
366         "i2d",              // 0x87    135
367         "l2i",              // 0x88    136
368         "l2f",              // 0x89    137
369         "l2d",              // 0x8A    138
370         "f2i",              // 0x8B    139
371         "f2l",              // 0x8C    140
372         "f2d",              // 0x8D    141
373         "d2i",              // 0x8E    142
374         "d2l",              // 0x8F    143
375         "d2f",              // 0x90    144
376         "i2b",              // 0x91    145
377         "i2c",              // 0x92    146
378         "i2s",              // 0x93    147
379         "lcmp",             // 0x94    148
380         "fcmpl",            // 0x95    149
381         "fcmpg",            // 0x96    150
382         "dcmpl",            // 0x97    151
383         "dcmpg",            // 0x98    152
384         "ifeq",             // 0x99    153
385         "ifne",             // 0x9A    154
386         "iflt",             // 0x9B    155
387         "ifge",             // 0x9C    156
388         "ifgt",             // 0x9D    157
389         "ifle",             // 0x9E    158
390         "if_icmpeq",        // 0x9F    159
391         "if_icmpne",        // 0xA0    160
392         "if_icmplt",        // 0xA1    161
393         "if_icmpge",        // 0xA2    162
394         "if_icmpgt",        // 0xA3    163
395         "if_icmple",        // 0xA4    164
396         "if_acmpeq",        // 0xA5    165
397         "if_acmpne",        // 0xA6    166
398         "goto",             // 0xA7    167
399         "jsr",              // 0xA8    168
400         "ret",              // 0xA9    169
401         "tableswitch",      // 0xAA    170
402         "lookupswitch",     // 0xAB    171
403         "ireturn",          // 0xAC    172
404         "lreturn",          // 0xAD    173
405         "freturn",          // 0xAE    174
406         "dreturn",          // 0xAF    175
407         "areturn",          // 0xB0    176
408         "return",           // 0xB1    177
409         "getstatic",        // 0xB2    178
410         "putstatic",        // 0xB3    179
411         "getfield",         // 0xB4    180
412         "putfield",         // 0xB5    181
413         "invokevirtual",    // 0xB6    182
414         "invokespecial",    // 0xB7    183
415         "invokestatic",     // 0xB8    184
416         "invokeinterface",  // 0xB9    185
417         "unused",           // 0xBA    186
418         "new",              // 0xBB    187
419         "newarray",         // 0xBC    188
420         "anewarray",        // 0xBD    189
421         "arraylength",      // 0xBE    190
422         "athrow",           // 0xBF    191
423         "checkcast",        // 0xC0    192
424         "instanceof",       // 0xC1    193
425         "monitorenter",     // 0xC2    194
426         "monitorexit",      // 0xC3    195
427         "[wide]",           // 0xC4    196
428         "multianewarray",   // 0xC5    197
429         "ifnull",           // 0xC6    198
430         "ifnonnull",        // 0xC7    199
431         "goto_w",           // 0xC8    200
432         "jsr_w"             // 0xC9    201
433     };
434 
435 
436     boolean [] CONDITIONAL_BRANCHES = clinit._CONDITIONAL_BRANCHES;
437     boolean [] COMPOUND_CONDITIONAL_BRANCHES = clinit._COMPOUND_CONDITIONAL_BRANCHES;
438     boolean [] UNCONDITIONAL_BRANCHES = clinit._UNCONDITIONAL_BRANCHES;
439     boolean [] BRANCHES = clinit._BRANCHES;
440 
441     int [] NARROW_SIZE = clinit._NARROW_SIZE; // including the opcode itself
442     int [] WIDE_SIZE = clinit._WIDE_SIZE; // including the opcode itself
443 
444 
445     static final class clinit
446     {
447         static final boolean [] _CONDITIONAL_BRANCHES;
448         static final boolean [] _COMPOUND_CONDITIONAL_BRANCHES;
449         static final boolean [] _UNCONDITIONAL_BRANCHES;
450         static final boolean [] _BRANCHES;
451         static final int [] _NARROW_SIZE;
452         static final int [] _WIDE_SIZE;
453 
454         static
455         {
456             final int opcodeCount = MNEMONICS.length;
457 
458             _CONDITIONAL_BRANCHES = new boolean [opcodeCount];
459 
460             _CONDITIONAL_BRANCHES [_ifeq] = true;
461             _CONDITIONAL_BRANCHES [_iflt] = true;
462             _CONDITIONAL_BRANCHES [_ifle] = true;
463             _CONDITIONAL_BRANCHES [_ifne] = true;
464             _CONDITIONAL_BRANCHES [_ifgt] = true;
465             _CONDITIONAL_BRANCHES [_ifge] = true;
466             _CONDITIONAL_BRANCHES [_ifnull] = true;
467             _CONDITIONAL_BRANCHES [_ifnonnull] = true;
468             _CONDITIONAL_BRANCHES [_if_icmpeq] = true;
469             _CONDITIONAL_BRANCHES [_if_icmpne] = true;
470             _CONDITIONAL_BRANCHES [_if_icmplt] = true;
471             _CONDITIONAL_BRANCHES [_if_icmpgt] = true;
472             _CONDITIONAL_BRANCHES [_if_icmple] = true;
473             _CONDITIONAL_BRANCHES [_if_icmpge] = true;
474             _CONDITIONAL_BRANCHES [_if_acmpeq] = true;
475             _CONDITIONAL_BRANCHES [_if_acmpne] = true;
476 
477 
478             _COMPOUND_CONDITIONAL_BRANCHES = new boolean [opcodeCount];
479 
480             _COMPOUND_CONDITIONAL_BRANCHES [_tableswitch] = true;
481             _COMPOUND_CONDITIONAL_BRANCHES [_lookupswitch] = true;
482 
483 
484             _UNCONDITIONAL_BRANCHES = new boolean  [opcodeCount];
485 
486             _UNCONDITIONAL_BRANCHES [_goto] = true;
487             _UNCONDITIONAL_BRANCHES [_goto_w] = true;
488             _UNCONDITIONAL_BRANCHES [_jsr] = true;
489             _UNCONDITIONAL_BRANCHES [_jsr_w] = true;
490             _UNCONDITIONAL_BRANCHES [_ret] = true;
491 
492             _UNCONDITIONAL_BRANCHES [_ireturn] = true;
493             _UNCONDITIONAL_BRANCHES [_lreturn] = true;
494             _UNCONDITIONAL_BRANCHES [_freturn] = true;
495             _UNCONDITIONAL_BRANCHES [_dreturn] = true;
496             _UNCONDITIONAL_BRANCHES [_areturn] = true;
497             _UNCONDITIONAL_BRANCHES [_return] = true;
498 
499             _UNCONDITIONAL_BRANCHES [_athrow] = true;
500 
501 
502             _BRANCHES = new boolean [opcodeCount];
503 
504             for (int o = 0; o < opcodeCount; ++ o)
505                 if (_CONDITIONAL_BRANCHES [o]) _BRANCHES [o] = true;
506 
507             for (int o = 0; o < opcodeCount; ++ o)
508                 if (_COMPOUND_CONDITIONAL_BRANCHES [o]) _BRANCHES [o] = true;
509 
510             for (int o = 0; o < opcodeCount; ++ o)
511                 if (_UNCONDITIONAL_BRANCHES [o]) _BRANCHES [o] = true;
512 
513 
514             _NARROW_SIZE = new int [opcodeCount];
515 
516             for (int o = 0; o < opcodeCount; ++ o) _NARROW_SIZE [o] = 1;
517 
518             _NARROW_SIZE [_bipush] = 2;
519             _NARROW_SIZE [_sipush] = 3;
520 
521             _NARROW_SIZE [_ldc] = 2;
522             _NARROW_SIZE [_ldc_w] = 3;
523             _NARROW_SIZE [_ldc2_w] = 3;
524 
525             _NARROW_SIZE [_iload] = 2;
526             _NARROW_SIZE [_lload] = 2;
527             _NARROW_SIZE [_fload] = 2;
528             _NARROW_SIZE [_dload] = 2;
529             _NARROW_SIZE [_aload] = 2;
530             _NARROW_SIZE [_istore] = 2;
531             _NARROW_SIZE [_lstore] = 2;
532             _NARROW_SIZE [_fstore] = 2;
533             _NARROW_SIZE [_dstore] = 2;
534             _NARROW_SIZE [_astore] = 2;
535 
536             _NARROW_SIZE [_iinc] = 3;
537 
538             _NARROW_SIZE [_ifeq] = 3;
539             _NARROW_SIZE [_ifne] = 3;
540             _NARROW_SIZE [_iflt] = 3;
541             _NARROW_SIZE [_ifge] = 3;
542             _NARROW_SIZE [_ifgt] = 3;
543             _NARROW_SIZE [_ifle] = 3;
544             _NARROW_SIZE [_if_icmpeq] = 3;
545             _NARROW_SIZE [_if_icmpne] = 3;
546             _NARROW_SIZE [_if_icmplt] = 3;
547             _NARROW_SIZE [_if_icmpge] = 3;
548             _NARROW_SIZE [_if_icmpgt] = 3;
549             _NARROW_SIZE [_if_icmple] = 3;
550             _NARROW_SIZE [_if_acmpeq] = 3;
551             _NARROW_SIZE [_if_acmpne] = 3;
552             _NARROW_SIZE [_goto] = 3;
553             _NARROW_SIZE [_jsr] = 3;
554             _NARROW_SIZE [_ifnull] = 3;
555             _NARROW_SIZE [_ifnonnull] = 3;
556 
557             _NARROW_SIZE [_ret] = 2;
558 
559             _NARROW_SIZE [_lookupswitch] = -1;   // special case #2
560             _NARROW_SIZE [_tableswitch] = 0;    // special case #1
561 
562             _NARROW_SIZE [_getstatic] = 3;
563             _NARROW_SIZE [_putstatic] = 3;
564             _NARROW_SIZE [_getfield] = 3;
565             _NARROW_SIZE [_putfield] = 3;
566 
567             _NARROW_SIZE [_invokevirtual] = 3;
568             _NARROW_SIZE [_invokespecial] = 3;
569             _NARROW_SIZE [_invokestatic] = 3;
570 
571             _NARROW_SIZE [_invokeinterface] = 5;
572 
573             _NARROW_SIZE [_new] = 3;
574             _NARROW_SIZE [_checkcast] = 3;
575             _NARROW_SIZE [_instanceof] = 3;
576 
577             _NARROW_SIZE [_newarray] = 2;
578             _NARROW_SIZE [_anewarray] = 3;
579             _NARROW_SIZE [_multianewarray] = 4;
580 
581             _NARROW_SIZE [_goto_w] = 5;
582             _NARROW_SIZE [_jsr_w] = 5;
583 
584 
585             _WIDE_SIZE = (int []) _NARROW_SIZE.clone ();
586 
587             _WIDE_SIZE [_iload] = 3;
588             _WIDE_SIZE [_lload] = 3;
589             _WIDE_SIZE [_fload] = 3;
590             _WIDE_SIZE [_dload] = 3;
591             _WIDE_SIZE [_aload] = 3;
592             _WIDE_SIZE [_istore] = 3;
593             _WIDE_SIZE [_lstore] = 3;
594             _WIDE_SIZE [_fstore] = 3;
595             _WIDE_SIZE [_dstore] = 3;
596             _WIDE_SIZE [_astore] = 3;
597 
598             _WIDE_SIZE [_iinc] = 5;
599 
600             _WIDE_SIZE [_ret] = 3;
601         }
602 
603     } // end of nested class
604 
605 } // end of interface
606 // ----------------------------------------------------------------------------
607 
608