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 */
9package com.vladium.jcd.opcodes;
10
11// ----------------------------------------------------------------------------
12/**
13 * @author Vlad Roubtsov, (C) 2003
14 */
15public
16interface 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