1/*
2 * Javassist, a Java-bytecode translator toolkit.
3 * Copyright (C) 1999-2007 Shigeru Chiba. All Rights Reserved.
4 *
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License.  Alternatively, the contents of this file may be used under
8 * the terms of the GNU Lesser General Public License Version 2.1 or later.
9 *
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
13 * License.
14 */
15
16package javassist.bytecode;
17
18/**
19 * JVM Instruction Set.
20 *
21 * <p>This interface defines opcodes and
22 * array types for the NEWARRAY instruction.
23 *
24 * @see Mnemonic
25 */
26public interface Opcode {
27    /* Opcodes */
28
29    int AALOAD = 50;
30    int AASTORE = 83;
31    int ACONST_NULL = 1;
32    int ALOAD = 25;
33    int ALOAD_0 = 42;
34    int ALOAD_1 = 43;
35    int ALOAD_2 = 44;
36    int ALOAD_3 = 45;
37    int ANEWARRAY = 189;
38    int ARETURN = 176;
39    int ARRAYLENGTH = 190;
40    int ASTORE = 58;
41    int ASTORE_0 = 75;
42    int ASTORE_1 = 76;
43    int ASTORE_2 = 77;
44    int ASTORE_3 = 78;
45    int ATHROW = 191;
46    int BALOAD = 51;
47    int BASTORE = 84;
48    int BIPUSH = 16;
49    int CALOAD = 52;
50    int CASTORE = 85;
51    int CHECKCAST = 192;
52    int D2F = 144;
53    int D2I = 142;
54    int D2L = 143;
55    int DADD = 99;
56    int DALOAD = 49;
57    int DASTORE = 82;
58    int DCMPG = 152;
59    int DCMPL = 151;
60    int DCONST_0 = 14;
61    int DCONST_1 = 15;
62    int DDIV = 111;
63    int DLOAD = 24;
64    int DLOAD_0 = 38;
65    int DLOAD_1 = 39;
66    int DLOAD_2 = 40;
67    int DLOAD_3 = 41;
68    int DMUL = 107;
69    int DNEG = 119;
70    int DREM = 115;
71    int DRETURN = 175;
72    int DSTORE = 57;
73    int DSTORE_0 = 71;
74    int DSTORE_1 = 72;
75    int DSTORE_2 = 73;
76    int DSTORE_3 = 74;
77    int DSUB = 103;
78    int DUP = 89;
79    int DUP2 = 92;
80    int DUP2_X1 = 93;
81    int DUP2_X2 = 94;
82    int DUP_X1 = 90;
83    int DUP_X2 = 91;
84    int F2D = 141;
85    int F2I = 139;
86    int F2L = 140;
87    int FADD = 98;
88    int FALOAD = 48;
89    int FASTORE = 81;
90    int FCMPG = 150;
91    int FCMPL = 149;
92    int FCONST_0 = 11;
93    int FCONST_1 = 12;
94    int FCONST_2 = 13;
95    int FDIV = 110;
96    int FLOAD = 23;
97    int FLOAD_0 = 34;
98    int FLOAD_1 = 35;
99    int FLOAD_2 = 36;
100    int FLOAD_3 = 37;
101    int FMUL = 106;
102    int FNEG = 118;
103    int FREM = 114;
104    int FRETURN = 174;
105    int FSTORE = 56;
106    int FSTORE_0 = 67;
107    int FSTORE_1 = 68;
108    int FSTORE_2 = 69;
109    int FSTORE_3 = 70;
110    int FSUB = 102;
111    int GETFIELD = 180;
112    int GETSTATIC = 178;
113    int GOTO = 167;
114    int GOTO_W = 200;
115    int I2B = 145;
116    int I2C = 146;
117    int I2D = 135;
118    int I2F = 134;
119    int I2L = 133;
120    int I2S = 147;
121    int IADD = 96;
122    int IALOAD = 46;
123    int IAND = 126;
124    int IASTORE = 79;
125    int ICONST_0 = 3;
126    int ICONST_1 = 4;
127    int ICONST_2 = 5;
128    int ICONST_3 = 6;
129    int ICONST_4 = 7;
130    int ICONST_5 = 8;
131    int ICONST_M1 = 2;
132    int IDIV = 108;
133    int IFEQ = 153;
134    int IFGE = 156;
135    int IFGT = 157;
136    int IFLE = 158;
137    int IFLT = 155;
138    int IFNE = 154;
139    int IFNONNULL = 199;
140    int IFNULL = 198;
141    int IF_ACMPEQ = 165;
142    int IF_ACMPNE = 166;
143    int IF_ICMPEQ = 159;
144    int IF_ICMPGE = 162;
145    int IF_ICMPGT = 163;
146    int IF_ICMPLE = 164;
147    int IF_ICMPLT = 161;
148    int IF_ICMPNE = 160;
149    int IINC = 132;
150    int ILOAD = 21;
151    int ILOAD_0 = 26;
152    int ILOAD_1 = 27;
153    int ILOAD_2 = 28;
154    int ILOAD_3 = 29;
155    int IMUL = 104;
156    int INEG = 116;
157    int INSTANCEOF = 193;
158    int INVOKEINTERFACE = 185;
159    int INVOKESPECIAL = 183;
160    int INVOKESTATIC = 184;
161    int INVOKEVIRTUAL = 182;
162    int IOR = 128;
163    int IREM = 112;
164    int IRETURN = 172;
165    int ISHL = 120;
166    int ISHR = 122;
167    int ISTORE = 54;
168    int ISTORE_0 = 59;
169    int ISTORE_1 = 60;
170    int ISTORE_2 = 61;
171    int ISTORE_3 = 62;
172    int ISUB = 100;
173    int IUSHR = 124;
174    int IXOR = 130;
175    int JSR = 168;
176    int JSR_W = 201;
177    int L2D = 138;
178    int L2F = 137;
179    int L2I = 136;
180    int LADD = 97;
181    int LALOAD = 47;
182    int LAND = 127;
183    int LASTORE = 80;
184    int LCMP = 148;
185    int LCONST_0 = 9;
186    int LCONST_1 = 10;
187    int LDC = 18;
188    int LDC2_W = 20;
189    int LDC_W = 19;
190    int LDIV = 109;
191    int LLOAD = 22;
192    int LLOAD_0 = 30;
193    int LLOAD_1 = 31;
194    int LLOAD_2 = 32;
195    int LLOAD_3 = 33;
196    int LMUL = 105;
197    int LNEG = 117;
198    int LOOKUPSWITCH = 171;
199    int LOR = 129;
200    int LREM = 113;
201    int LRETURN = 173;
202    int LSHL = 121;
203    int LSHR = 123;
204    int LSTORE = 55;
205    int LSTORE_0 = 63;
206    int LSTORE_1 = 64;
207    int LSTORE_2 = 65;
208    int LSTORE_3 = 66;
209    int LSUB = 101;
210    int LUSHR = 125;
211    int LXOR = 131;
212    int MONITORENTER = 194;
213    int MONITOREXIT = 195;
214    int MULTIANEWARRAY = 197;
215    int NEW = 187;
216    int NEWARRAY = 188;
217    int NOP = 0;
218    int POP = 87;
219    int POP2 = 88;
220    int PUTFIELD = 181;
221    int PUTSTATIC = 179;
222    int RET = 169;
223    int RETURN = 177;
224    int SALOAD = 53;
225    int SASTORE = 86;
226    int SIPUSH = 17;
227    int SWAP = 95;
228    int TABLESWITCH = 170;
229    int WIDE = 196;
230
231    /* array-type code for the newarray instruction */
232
233    int T_BOOLEAN = 4;
234    int T_CHAR = 5;
235    int T_FLOAT = 6;
236    int T_DOUBLE = 7;
237    int T_BYTE = 8;
238    int T_SHORT = 9;
239    int T_INT = 10;
240    int T_LONG = 11;
241
242    /* how many values are pushed on the operand stack. */
243    int[] STACK_GROW = {
244        0, // nop, 0
245        1, // aconst_null, 1
246        1, // iconst_m1, 2
247        1, // iconst_0, 3
248        1, // iconst_1, 4
249        1, // iconst_2, 5
250        1, // iconst_3, 6
251        1, // iconst_4, 7
252        1, // iconst_5, 8
253        2, // lconst_0, 9
254        2, // lconst_1, 10
255        1, // fconst_0, 11
256        1, // fconst_1, 12
257        1, // fconst_2, 13
258        2, // dconst_0, 14
259        2, // dconst_1, 15
260        1, // bipush, 16
261        1, // sipush, 17
262        1, // ldc, 18
263        1, // ldc_w, 19
264        2, // ldc2_w, 20
265        1, // iload, 21
266        2, // lload, 22
267        1, // fload, 23
268        2, // dload, 24
269        1, // aload, 25
270        1, // iload_0, 26
271        1, // iload_1, 27
272        1, // iload_2, 28
273        1, // iload_3, 29
274        2, // lload_0, 30
275        2, // lload_1, 31
276        2, // lload_2, 32
277        2, // lload_3, 33
278        1, // fload_0, 34
279        1, // fload_1, 35
280        1, // fload_2, 36
281        1, // fload_3, 37
282        2, // dload_0, 38
283        2, // dload_1, 39
284        2, // dload_2, 40
285        2, // dload_3, 41
286        1, // aload_0, 42
287        1, // aload_1, 43
288        1, // aload_2, 44
289        1, // aload_3, 45
290        -1, // iaload, 46
291        0, // laload, 47
292        -1, // faload, 48
293        0, // daload, 49
294        -1, // aaload, 50
295        -1, // baload, 51
296        -1, // caload, 52
297        -1, // saload, 53
298        -1, // istore, 54
299        -2, // lstore, 55
300        -1, // fstore, 56
301        -2, // dstore, 57
302        -1, // astore, 58
303        -1, // istore_0, 59
304        -1, // istore_1, 60
305        -1, // istore_2, 61
306        -1, // istore_3, 62
307        -2, // lstore_0, 63
308        -2, // lstore_1, 64
309        -2, // lstore_2, 65
310        -2, // lstore_3, 66
311        -1, // fstore_0, 67
312        -1, // fstore_1, 68
313        -1, // fstore_2, 69
314        -1, // fstore_3, 70
315        -2, // dstore_0, 71
316        -2, // dstore_1, 72
317        -2, // dstore_2, 73
318        -2, // dstore_3, 74
319        -1, // astore_0, 75
320        -1, // astore_1, 76
321        -1, // astore_2, 77
322        -1, // astore_3, 78
323        -3, // iastore, 79
324        -4, // lastore, 80
325        -3, // fastore, 81
326        -4, // dastore, 82
327        -3, // aastore, 83
328        -3, // bastore, 84
329        -3, // castore, 85
330        -3, // sastore, 86
331        -1, // pop, 87
332        -2, // pop2, 88
333        1, // dup, 89
334        1, // dup_x1, 90
335        1, // dup_x2, 91
336        2, // dup2, 92
337        2, // dup2_x1, 93
338        2, // dup2_x2, 94
339        0, // swap, 95
340        -1, // iadd, 96
341        -2, // ladd, 97
342        -1, // fadd, 98
343        -2, // dadd, 99
344        -1, // isub, 100
345        -2, // lsub, 101
346        -1, // fsub, 102
347        -2, // dsub, 103
348        -1, // imul, 104
349        -2, // lmul, 105
350        -1, // fmul, 106
351        -2, // dmul, 107
352        -1, // idiv, 108
353        -2, // ldiv, 109
354        -1, // fdiv, 110
355        -2, // ddiv, 111
356        -1, // irem, 112
357        -2, // lrem, 113
358        -1, // frem, 114
359        -2, // drem, 115
360        0, // ineg, 116
361        0, // lneg, 117
362        0, // fneg, 118
363        0, // dneg, 119
364        -1, // ishl, 120
365        -1, // lshl, 121
366        -1, // ishr, 122
367        -1, // lshr, 123
368        -1, // iushr, 124
369        -1, // lushr, 125
370        -1, // iand, 126
371        -2, // land, 127
372        -1, // ior, 128
373        -2, // lor, 129
374        -1, // ixor, 130
375        -2, // lxor, 131
376        0, // iinc, 132
377        1, // i2l, 133
378        0, // i2f, 134
379        1, // i2d, 135
380        -1, // l2i, 136
381        -1, // l2f, 137
382        0, // l2d, 138
383        0, // f2i, 139
384        1, // f2l, 140
385        1, // f2d, 141
386        -1, // d2i, 142
387        0, // d2l, 143
388        -1, // d2f, 144
389        0, // i2b, 145
390        0, // i2c, 146
391        0, // i2s, 147
392        -3, // lcmp, 148
393        -1, // fcmpl, 149
394        -1, // fcmpg, 150
395        -3, // dcmpl, 151
396        -3, // dcmpg, 152
397        -1, // ifeq, 153
398        -1, // ifne, 154
399        -1, // iflt, 155
400        -1, // ifge, 156
401        -1, // ifgt, 157
402        -1, // ifle, 158
403        -2, // if_icmpeq, 159
404        -2, // if_icmpne, 160
405        -2, // if_icmplt, 161
406        -2, // if_icmpge, 162
407        -2, // if_icmpgt, 163
408        -2, // if_icmple, 164
409        -2, // if_acmpeq, 165
410        -2, // if_acmpne, 166
411        0, // goto, 167
412        1, // jsr, 168
413        0, // ret, 169
414        -1, // tableswitch, 170
415        -1, // lookupswitch, 171
416        -1, // ireturn, 172
417        -2, // lreturn, 173
418        -1, // freturn, 174
419        -2, // dreturn, 175
420        -1, // areturn, 176
421        0, // return, 177
422        0, // getstatic, 178            depends on the type
423        0, // putstatic, 179            depends on the type
424        0, // getfield, 180             depends on the type
425        0, // putfield, 181             depends on the type
426        0, // invokevirtual, 182        depends on the type
427        0, // invokespecial, 183        depends on the type
428        0, // invokestatic, 184         depends on the type
429        0, // invokeinterface, 185      depends on the type
430        0, // undefined, 186
431        1, // new, 187
432        0, // newarray, 188
433        0, // anewarray, 189
434        0, // arraylength, 190
435        -1, // athrow, 191              stack is cleared
436        0, // checkcast, 192
437        0, // instanceof, 193
438        -1, // monitorenter, 194
439        -1, // monitorexit, 195
440        0, // wide, 196                 depends on the following opcode
441        0, // multianewarray, 197       depends on the dimensions
442        -1, // ifnull, 198
443        -1, // ifnonnull, 199
444        0, // goto_w, 200
445        1 // jsr_w, 201
446    };
447}
448