Mercurial > hg > blitz_condensed
comparison src/com/go/trove/classfile/Opcode.java @ 0:3dc0c5604566
Initial checkin of blitz 2.0 fcs - no installer yet.
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 21 Mar 2009 11:00:06 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:3dc0c5604566 |
---|---|
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: 1.1 $-->, <!--$$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 getMnemonic(byte opcode) | |
274 throws IllegalArgumentException { | |
275 try { | |
276 return Mnemonic.m[opcode & 0xff]; | |
277 } | |
278 catch (ArrayIndexOutOfBoundsException e) { | |
279 throw new IllegalArgumentException | |
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 | |
329 ("Opcode not an if instruction: " + getMnemonic(opcode)); | |
330 } | |
331 } | |
332 | |
333 private static class Mnemonic { | |
334 public static final String[] 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 } |