KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > go > trove > classfile > Opcode


1 /* ====================================================================
2  * Trove - Copyright (c) 1997-2000 Walt Disney Internet Group
3  * ====================================================================
4  * The Tea Software License, Version 1.1
5  *
6  * Copyright (c) 2000 Walt Disney Internet Group. All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Walt Disney Internet Group (http://opensource.go.com/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "Tea", "TeaServlet", "Kettle", "Trove" and "BeanDoc" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact opensource@dig.com.
31  *
32  * 5. Products derived from this software may not be called "Tea",
33  * "TeaServlet", "Kettle" or "Trove", nor may "Tea", "TeaServlet",
34  * "Kettle", "Trove" or "BeanDoc" appear in their name, without prior
35  * written permission of the Walt Disney Internet Group.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE WALT DISNEY INTERNET GROUP OR ITS
41  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
42  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
43  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
44  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
45  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
46  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
47  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48  * ====================================================================
49  *
50  * For more information about Tea, please see http://opensource.go.com/.
51  */

52
53 package com.go.trove.classfile;
54
55 /******************************************************************************
56  * A collection of opcode constants for creating class file byte code. These
57  * opcodes are defined in chapter 6 of
58  * <i>The Java Virual Machine Specification</i>.
59  *
60  * @author Brian S O'Neill
61  * @version
62  * <!--$$Revision:--> 25 <!-- $-->, <!--$$JustDate:--> 9/07/00 <!-- $-->
63  * @see CodeAttr
64  */

65 public class Opcode {
66     public final static byte NOP = (byte)0;
67     public final static byte ACONST_NULL = (byte)1;
68     public final static byte ICONST_M1 = (byte)2;
69     public final static byte ICONST_0 = (byte)3;
70     public final static byte ICONST_1 = (byte)4;
71     public final static byte ICONST_2 = (byte)5;
72     public final static byte ICONST_3 = (byte)6;
73     public final static byte ICONST_4 = (byte)7;
74     public final static byte ICONST_5 = (byte)8;
75     public final static byte LCONST_0 = (byte)9;
76     public final static byte LCONST_1 = (byte)10;
77     public final static byte FCONST_0 = (byte)11;
78     public final static byte FCONST_1 = (byte)12;
79     public final static byte FCONST_2 = (byte)13;
80     public final static byte DCONST_0 = (byte)14;
81     public final static byte DCONST_1 = (byte)15;
82     public final static byte BIPUSH = (byte)16;
83     public final static byte SIPUSH = (byte)17;
84     public final static byte LDC = (byte)18;
85     public final static byte LDC_W = (byte)19;
86     public final static byte LDC2_W = (byte)20;
87     public final static byte ILOAD = (byte)21;
88     public final static byte LLOAD = (byte)22;
89     public final static byte FLOAD = (byte)23;
90     public final static byte DLOAD = (byte)24;
91     public final static byte ALOAD = (byte)25;
92     public final static byte ILOAD_0 = (byte)26;
93     public final static byte ILOAD_1 = (byte)27;
94     public final static byte ILOAD_2 = (byte)28;
95     public final static byte ILOAD_3 = (byte)29;
96     public final static byte LLOAD_0 = (byte)30;
97     public final static byte LLOAD_1 = (byte)31;
98     public final static byte LLOAD_2 = (byte)32;
99     public final static byte LLOAD_3 = (byte)33;
100     public final static byte FLOAD_0 = (byte)34;
101     public final static byte FLOAD_1 = (byte)35;
102     public final static byte FLOAD_2 = (byte)36;
103     public final static byte FLOAD_3 = (byte)37;
104     public final static byte DLOAD_0 = (byte)38;
105     public final static byte DLOAD_1 = (byte)39;
106     public final static byte DLOAD_2 = (byte)40;
107     public final static byte DLOAD_3 = (byte)41;
108     public final static byte ALOAD_0 = (byte)42;
109     public final static byte ALOAD_1 = (byte)43;
110     public final static byte ALOAD_2 = (byte)44;
111     public final static byte ALOAD_3 = (byte)45;
112     public final static byte IALOAD = (byte)46;
113     public final static byte LALOAD = (byte)47;
114     public final static byte FALOAD = (byte)48;
115     public final static byte DALOAD = (byte)49;
116     public final static byte AALOAD = (byte)50;
117     public final static byte BALOAD = (byte)51;
118     public final static byte CALOAD = (byte)52;
119     public final static byte SALOAD = (byte)53;
120     public final static byte ISTORE = (byte)54;
121     public final static byte LSTORE = (byte)55;
122     public final static byte FSTORE = (byte)56;
123     public final static byte DSTORE = (byte)57;
124     public final static byte ASTORE = (byte)58;
125     public final static byte ISTORE_0 = (byte)59;
126     public final static byte ISTORE_1 = (byte)60;
127     public final static byte ISTORE_2 = (byte)61;
128     public final static byte ISTORE_3 = (byte)62;
129     public final static byte LSTORE_0 = (byte)63;
130     public final static byte LSTORE_1 = (byte)64;
131     public final static byte LSTORE_2 = (byte)65;
132     public final static byte LSTORE_3 = (byte)66;
133     public final static byte FSTORE_0 = (byte)67;
134     public final static byte FSTORE_1 = (byte)68;
135     public final static byte FSTORE_2 = (byte)69;
136     public final static byte FSTORE_3 = (byte)70;
137     public final static byte DSTORE_0 = (byte)71;
138     public final static byte DSTORE_1 = (byte)72;
139     public final static byte DSTORE_2 = (byte)73;
140     public final static byte DSTORE_3 = (byte)74;
141     public final static byte ASTORE_0 = (byte)75;
142     public final static byte ASTORE_1 = (byte)76;
143     public final static byte ASTORE_2 = (byte)77;
144     public final static byte ASTORE_3 = (byte)78;
145     public final static byte IASTORE = (byte)79;
146     public final static byte LASTORE = (byte)80;
147     public final static byte FASTORE = (byte)81;
148     public final static byte DASTORE = (byte)82;
149     public final static byte AASTORE = (byte)83;
150     public final static byte BASTORE = (byte)84;
151     public final static byte CASTORE = (byte)85;
152     public final static byte SASTORE = (byte)86;
153     public final static byte POP = (byte)87;
154     public final static byte POP2 = (byte)88;
155     public final static byte DUP = (byte)89;
156     public final static byte DUP_X1 = (byte)90;
157     public final static byte DUP_X2 = (byte)91;
158     public final static byte DUP2 = (byte)92;
159     public final static byte DUP2_X1 = (byte)93;
160     public final static byte DUP2_X2 = (byte)94;
161     public final static byte SWAP = (byte)95;
162     public final static byte IADD = (byte)96;
163     public final static byte LADD = (byte)97;
164     public final static byte FADD = (byte)98;
165     public final static byte DADD = (byte)99;
166     public final static byte ISUB = (byte)100;
167     public final static byte LSUB = (byte)101;
168     public final static byte FSUB = (byte)102;
169     public final static byte DSUB = (byte)103;
170     public final static byte IMUL = (byte)104;
171     public final static byte LMUL = (byte)105;
172     public final static byte FMUL = (byte)106;
173     public final static byte DMUL = (byte)107;
174     public final static byte IDIV = (byte)108;
175     public final static byte LDIV = (byte)109;
176     public final static byte FDIV = (byte)110;
177     public final static byte DDIV = (byte)111;
178     public final static byte IREM = (byte)112;
179     public final static byte LREM = (byte)113;
180     public final static byte FREM = (byte)114;
181     public final static byte DREM = (byte)115;
182     public final static byte INEG = (byte)116;
183     public final static byte LNEG = (byte)117;
184     public final static byte FNEG = (byte)118;
185     public final static byte DNEG = (byte)119;
186     public final static byte ISHL = (byte)120;
187     public final static byte LSHL = (byte)121;
188     public final static byte ISHR = (byte)122;
189     public final static byte LSHR = (byte)123;
190     public final static byte IUSHR = (byte)124;
191     public final static byte LUSHR = (byte)125;
192     public final static byte IAND = (byte)126;
193     public final static byte LAND = (byte)127;
194     public final static byte IOR = (byte)128;
195     public final static byte LOR = (byte)129;
196     public final static byte IXOR = (byte)130;
197     public final static byte LXOR = (byte)131;
198     public final static byte IINC = (byte)132;
199     public final static byte I2L = (byte)133;
200     public final static byte I2F = (byte)134;
201     public final static byte I2D = (byte)135;
202     public final static byte L2I = (byte)136;
203     public final static byte L2F = (byte)137;
204     public final static byte L2D = (byte)138;
205     public final static byte F2I = (byte)139;
206     public final static byte F2L = (byte)140;
207     public final static byte F2D = (byte)141;
208     public final static byte D2I = (byte)142;
209     public final static byte D2L = (byte)143;
210     public final static byte D2F = (byte)144;
211     public final static byte I2B = (byte)145;
212     public final static byte I2C = (byte)146;
213     public final static byte I2S = (byte)147;
214     public final static byte LCMP = (byte)148;
215     public final static byte FCMPL = (byte)149;
216     public final static byte FCMPG = (byte)150;
217     public final static byte DCMPL = (byte)151;
218     public final static byte DCMPG = (byte)152;
219     public final static byte IFEQ = (byte)153;
220     public final static byte IFNE = (byte)154;
221     public final static byte IFLT = (byte)155;
222     public final static byte IFGE = (byte)156;
223     public final static byte IFGT = (byte)157;
224     public final static byte IFLE = (byte)158;
225     public final static byte IF_ICMPEQ = (byte)159;
226     public final static byte IF_ICMPNE = (byte)160;
227     public final static byte IF_ICMPLT = (byte)161;
228     public final static byte IF_ICMPGE = (byte)162;
229     public final static byte IF_ICMPGT = (byte)163;
230     public final static byte IF_ICMPLE = (byte)164;
231     public final static byte IF_ACMPEQ = (byte)165;
232     public final static byte IF_ACMPNE = (byte)166;
233     public final static byte GOTO = (byte)167;
234     public final static byte JSR = (byte)168;
235     public final static byte RET = (byte)169;
236     public final static byte TABLESWITCH = (byte)170;
237     public final static byte LOOKUPSWITCH = (byte)171;
238     public final static byte IRETURN = (byte)172;
239     public final static byte LRETURN = (byte)173;
240     public final static byte FRETURN = (byte)174;
241     public final static byte DRETURN = (byte)175;
242     public final static byte ARETURN = (byte)176;
243     public final static byte RETURN = (byte)177;
244     public final static byte GETSTATIC = (byte)178;
245     public final static byte PUTSTATIC = (byte)179;
246     public final static byte GETFIELD = (byte)180;
247     public final static byte PUTFIELD = (byte)181;
248     public final static byte INVOKEVIRTUAL = (byte)182;
249     public final static byte INVOKESPECIAL = (byte)183;
250     public final static byte INVOKESTATIC = (byte)184;
251     public final static byte INVOKEINTERFACE = (byte)185;
252     public final static byte UNUSED = (byte)186;
253     public final static byte NEW = (byte)187;
254     public final static byte NEWARRAY = (byte)188;
255     public final static byte ANEWARRAY = (byte)189;
256     public final static byte ARRAYLENGTH = (byte)190;
257     public final static byte ATHROW = (byte)191;
258     public final static byte CHECKCAST = (byte)192;
259     public final static byte INSTANCEOF = (byte)193;
260     public final static byte MONITORENTER = (byte)194;
261     public final static byte MONITOREXIT = (byte)195;
262     public final static byte WIDE = (byte)196;
263     public final static byte MULTIANEWARRAY = (byte)197;
264     public final static byte IFNULL = (byte)198;
265     public final static byte IFNONNULL = (byte)199;
266     public final static byte GOTO_W = (byte)200;
267     public final static byte JSR_W = (byte)201;
268     public final static byte BREAKPOINT = (byte)202;
269
270     /**
271      * @exception IllegalArgumentException if opcode is invalid
272      */

273     public final static String JavaDoc getMnemonic(byte opcode)
274         throws IllegalArgumentException JavaDoc {
275         try {
276             return Mnemonic.m[opcode & 0xff];
277         }
278         catch (ArrayIndexOutOfBoundsException JavaDoc e) {
279             throw new IllegalArgumentException JavaDoc
280                 ("Opcode not valid: " + opcode);
281         }
282     }
283
284     /**
285      * Reverses the condition for an "if" opcode. i.e. IFEQ is changed to
286      * IFNE.
287      */

288     public final static byte reverseIfOpcode(byte opcode) {
289         // Actually, because the numbers assigned to the "if" opcodes
290
// were so cleverly chosen, all I really need to do is toggle
291
// bit 0. I'm not going to do that because I still need to check if
292
// an invalid opcode was passed in.
293

294         switch (opcode) {
295         case IF_ACMPEQ:
296             return IF_ACMPNE;
297         case IF_ACMPNE:
298             return IF_ACMPEQ;
299         case IF_ICMPEQ:
300             return IF_ICMPNE;
301         case IF_ICMPNE:
302             return IF_ICMPEQ;
303         case IF_ICMPLT:
304             return IF_ICMPGE;
305         case IF_ICMPGE:
306             return IF_ICMPLT;
307         case IF_ICMPGT:
308             return IF_ICMPLE;
309         case IF_ICMPLE:
310             return IF_ICMPGT;
311         case IFEQ:
312             return IFNE;
313         case IFNE:
314             return IFEQ;
315         case IFLT:
316             return IFGE;
317         case IFGE:
318             return IFLT;
319         case IFGT:
320             return IFLE;
321         case IFLE:
322             return IFGT;
323         case IFNONNULL:
324             return IFNULL;
325         case IFNULL:
326             return IFNONNULL;
327         default:
328             throw new IllegalArgumentException JavaDoc
329                 ("Opcode not an if instruction: " + getMnemonic(opcode));
330         }
331     }
332
333     private static class Mnemonic {
334         public static final String JavaDoc[] m =
335         {
336             "nop",
337             "aconst_null",
338             "iconst_m1",
339             "iconst_0",
340             "iconst_1",
341             "iconst_2",
342             "iconst_3",
343             "iconst_4",
344             "iconst_5",
345             "lconst_0",
346             "lconst_1",
347             "fconst_0",
348             "fconst_1",
349             "fconst_2",
350             "dconst_0",
351             "dconst_1",
352             "bipush",
353             "sipush",
354             "ldc",
355             "ldc_w",
356             "ldc2_w",
357             "iload",
358             "lload",
359             "fload",
360             "dload",
361             "aload",
362             "iload_0",
363             "iload_1",
364             "iload_2",
365             "iload_3",
366             "lload_0",
367             "lload_1",
368             "lload_2",
369             "lload_3",
370             "fload_0",
371             "fload_1",
372             "fload_2",
373             "fload_3",
374             "dload_0",
375             "dload_1",
376             "dload_2",
377             "dload_3",
378             "aload_0",
379             "aload_1",
380             "aload_2",
381             "aload_3",
382             "iaload",
383             "laload",
384             "faload",
385             "daload",
386             "aaload",
387             "baload",
388             "caload",
389             "saload",
390             "istore",
391             "lstore",
392             "fstore",
393             "dstore",
394             "astore",
395             "istore_0",
396             "istore_1",
397             "istore_2",
398             "istore_3",
399             "lstore_0",
400             "lstore_1",
401             "lstore_2",
402             "lstore_3",
403             "fstore_0",
404             "fstore_1",
405             "fstore_2",
406             "fstore_3",
407             "dstore_0",
408             "dstore_1",
409             "dstore_2",
410             "dstore_3",
411             "astore_0",
412             "astore_1",
413             "astore_2",
414             "astore_3",
415             "iastore",
416             "lastore",
417             "fastore",
418             "dastore",
419             "aastore",
420             "bastore",
421             "castore",
422             "sastore",
423             "pop",
424             "pop2",
425             "dup",
426             "dup_x1",
427             "dup_x2",
428             "dup2",
429             "dup2_x1",
430             "dup2_x2",
431             "swap",
432             "iadd",
433             "ladd",
434             "fadd",
435             "dadd",
436             "isub",
437             "lsub",
438             "fsub",
439             "dsub",
440             "imul",
441             "lmul",
442             "fmul",
443             "dmul",
444             "idiv",
445             "ldiv",
446             "fdiv",
447             "ddiv",
448             "irem",
449             "lrem",
450             "frem",
451             "drem",
452             "ineg",
453             "lneg",
454             "fneg",
455             "dneg",
456             "ishl",
457             "lshl",
458             "ishr",
459             "lshr",
460             "iushr",
461             "lushr",
462             "iand",
463             "land",
464             "ior",
465             "lor",
466             "ixor",
467             "lxor",
468             "iinc",
469             "i2l",
470             "i2f",
471             "i2d",
472             "l2i",
473             "l2f",
474             "l2d",
475             "f2i",
476             "f2l",
477             "f2d",
478             "d2i",
479             "d2l",
480             "d2f",
481             "i2b",
482             "i2c",
483             "i2s",
484             "lcmp",
485             "fcmpl",
486             "fcmpg",
487             "dcmpl",
488             "dcmpg",
489             "ifeq",
490             "ifne",
491             "iflt",
492             "ifge",
493             "ifgt",
494             "ifle",
495             "if_icmpeq",
496             "if_icmpne",
497             "if_icmplt",
498             "if_icmpge",
499             "if_icmpgt",
500             "if_icmple",
501             "if_acmpeq",
502             "if_acmpne",
503             "goto",
504             "jsr",
505             "ret",
506             "tableswitch",
507             "lookupswitch",
508             "ireturn",
509             "lreturn",
510             "freturn",
511             "dreturn",
512             "areturn",
513             "return",
514             "getstatic",
515             "putstatic",
516             "getfield",
517             "putfield",
518             "invokevirtual",
519             "invokespecial",
520             "invokestatic",
521             "invokeinterface",
522             "unused",
523             "new",
524             "newarray",
525             "anewarray",
526             "arraylength",
527             "athrow",
528             "checkcast",
529             "instanceof",
530             "monitorenter",
531             "monitorexit",
532             "wide",
533             "multianewarray",
534             "ifnull",
535             "ifnonnull",
536             "goto_w",
537             "jsr_w",
538             "breakpoint",
539         };
540     }
541 }
542
Popular Tags