• 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