001 /*
002 * This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 * This file is licensed to You under the Eclipse Public License (EPL);
005 * You may not use this file except in compliance with the License. You
006 * may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 * See the COPYRIGHT.txt file distributed with this work for information
011 * regarding copyright ownership.
012 */
013 package org.jikesrvm.classloader;
014
015 /**
016 * Information about java byte codes that appear in the "code" attribute
017 * of a .class file.
018 */
019 public interface BytecodeConstants {
020 // The following mnemonics are defined in Chapter 10 of The Java Virtual Machine Specification.
021 //
022 int JBC_nop = 0;
023 int JBC_aconst_null = 1;
024 int JBC_iconst_m1 = 2;
025 int JBC_iconst_0 = 3;
026 int JBC_iconst_1 = 4;
027 int JBC_iconst_2 = 5;
028 int JBC_iconst_3 = 6;
029 int JBC_iconst_4 = 7;
030 int JBC_iconst_5 = 8;
031 int JBC_lconst_0 = 9;
032 int JBC_lconst_1 = 10;
033 int JBC_fconst_0 = 11;
034 int JBC_fconst_1 = 12;
035 int JBC_fconst_2 = 13;
036 int JBC_dconst_0 = 14;
037 int JBC_dconst_1 = 15;
038 int JBC_bipush = 16;
039 int JBC_sipush = 17;
040 int JBC_ldc = 18;
041 int JBC_ldc_w = 19;
042 int JBC_ldc2_w = 20;
043 int JBC_iload = 21;
044 int JBC_lload = 22;
045 int JBC_fload = 23;
046 int JBC_dload = 24;
047 int JBC_aload = 25;
048 int JBC_iload_0 = 26;
049 int JBC_iload_1 = 27;
050 int JBC_iload_2 = 28;
051 int JBC_iload_3 = 29;
052 int JBC_lload_0 = 30;
053 int JBC_lload_1 = 31;
054 int JBC_lload_2 = 32;
055 int JBC_lload_3 = 33;
056 int JBC_fload_0 = 34;
057 int JBC_fload_1 = 35;
058 int JBC_fload_2 = 36;
059 int JBC_fload_3 = 37;
060 int JBC_dload_0 = 38;
061 int JBC_dload_1 = 39;
062 int JBC_dload_2 = 40;
063 int JBC_dload_3 = 41;
064 int JBC_aload_0 = 42;
065 int JBC_aload_1 = 43;
066 int JBC_aload_2 = 44;
067 int JBC_aload_3 = 45;
068 int JBC_iaload = 46;
069 int JBC_laload = 47;
070 int JBC_faload = 48;
071 int JBC_daload = 49;
072 int JBC_aaload = 50;
073 int JBC_baload = 51;
074 int JBC_caload = 52;
075 int JBC_saload = 53;
076 int JBC_istore = 54;
077 int JBC_lstore = 55;
078 int JBC_fstore = 56;
079 int JBC_dstore = 57;
080 int JBC_astore = 58;
081 int JBC_istore_0 = 59;
082 int JBC_istore_1 = 60;
083 int JBC_istore_2 = 61;
084 int JBC_istore_3 = 62;
085 int JBC_lstore_0 = 63;
086 int JBC_lstore_1 = 64;
087 int JBC_lstore_2 = 65;
088 int JBC_lstore_3 = 66;
089 int JBC_fstore_0 = 67;
090 int JBC_fstore_1 = 68;
091 int JBC_fstore_2 = 69;
092 int JBC_fstore_3 = 70;
093 int JBC_dstore_0 = 71;
094 int JBC_dstore_1 = 72;
095 int JBC_dstore_2 = 73;
096 int JBC_dstore_3 = 74;
097 int JBC_astore_0 = 75;
098 int JBC_astore_1 = 76;
099 int JBC_astore_2 = 77;
100 int JBC_astore_3 = 78;
101 int JBC_iastore = 79;
102 int JBC_lastore = 80;
103 int JBC_fastore = 81;
104 int JBC_dastore = 82;
105 int JBC_aastore = 83;
106 int JBC_bastore = 84;
107 int JBC_castore = 85;
108 int JBC_sastore = 86;
109 int JBC_pop = 87;
110 int JBC_pop2 = 88;
111 int JBC_dup = 89;
112 int JBC_dup_x1 = 90;
113 int JBC_dup_x2 = 91;
114 int JBC_dup2 = 92;
115 int JBC_dup2_x1 = 93;
116 int JBC_dup2_x2 = 94;
117 int JBC_swap = 95;
118 int JBC_iadd = 96;
119 int JBC_ladd = 97;
120 int JBC_fadd = 98;
121 int JBC_dadd = 99;
122 int JBC_isub = 100;
123 int JBC_lsub = 101;
124 int JBC_fsub = 102;
125 int JBC_dsub = 103;
126 int JBC_imul = 104;
127 int JBC_lmul = 105;
128 int JBC_fmul = 106;
129 int JBC_dmul = 107;
130 int JBC_idiv = 108;
131 int JBC_ldiv = 109;
132 int JBC_fdiv = 110;
133 int JBC_ddiv = 111;
134 int JBC_irem = 112;
135 int JBC_lrem = 113;
136 int JBC_frem = 114;
137 int JBC_drem = 115;
138 int JBC_ineg = 116;
139 int JBC_lneg = 117;
140 int JBC_fneg = 118;
141 int JBC_dneg = 119;
142 int JBC_ishl = 120;
143 int JBC_lshl = 121;
144 int JBC_ishr = 122;
145 int JBC_lshr = 123;
146 int JBC_iushr = 124;
147 int JBC_lushr = 125;
148 int JBC_iand = 126;
149 int JBC_land = 127;
150 int JBC_ior = 128;
151 int JBC_lor = 129;
152 int JBC_ixor = 130;
153 int JBC_lxor = 131;
154 int JBC_iinc = 132;
155 int JBC_i2l = 133;
156 int JBC_i2f = 134;
157 int JBC_i2d = 135;
158 int JBC_l2i = 136;
159 int JBC_l2f = 137;
160 int JBC_l2d = 138;
161 int JBC_f2i = 139;
162 int JBC_f2l = 140;
163 int JBC_f2d = 141;
164 int JBC_d2i = 142;
165 int JBC_d2l = 143;
166 int JBC_d2f = 144;
167 int JBC_int2byte = 145;
168 int JBC_int2char = 146;
169 int JBC_int2short = 147;
170 int JBC_lcmp = 148;
171 int JBC_fcmpl = 149;
172 int JBC_fcmpg = 150;
173 int JBC_dcmpl = 151;
174 int JBC_dcmpg = 152;
175 int JBC_ifeq = 153;
176 int JBC_ifne = 154;
177 int JBC_iflt = 155;
178 int JBC_ifge = 156;
179 int JBC_ifgt = 157;
180 int JBC_ifle = 158;
181 int JBC_if_icmpeq = 159;
182 int JBC_if_icmpne = 160;
183 int JBC_if_icmplt = 161;
184 int JBC_if_icmpge = 162;
185 int JBC_if_icmpgt = 163;
186 int JBC_if_icmple = 164;
187 int JBC_if_acmpeq = 165;
188 int JBC_if_acmpne = 166;
189 int JBC_goto = 167;
190 int JBC_jsr = 168;
191 int JBC_ret = 169;
192 int JBC_tableswitch = 170;
193 int JBC_lookupswitch = 171;
194 int JBC_ireturn = 172;
195 int JBC_lreturn = 173;
196 int JBC_freturn = 174;
197 int JBC_dreturn = 175;
198 int JBC_areturn = 176;
199 int JBC_return = 177;
200 int JBC_getstatic = 178;
201 int JBC_putstatic = 179;
202 int JBC_getfield = 180;
203 int JBC_putfield = 181;
204 int JBC_invokevirtual = 182;
205 int JBC_invokespecial = 183;
206 int JBC_invokestatic = 184;
207 int JBC_invokeinterface = 185;
208 int JBC_xxxunusedxxx = 186;
209 int JBC_new = 187;
210 int JBC_newarray = 188;
211 int JBC_anewarray = 189;
212 int JBC_arraylength = 190;
213 int JBC_athrow = 191;
214 int JBC_checkcast = 192;
215 int JBC_instanceof = 193;
216 int JBC_monitorenter = 194;
217 int JBC_monitorexit = 195;
218 int JBC_wide = 196;
219 int JBC_multianewarray = 197;
220 int JBC_ifnull = 198;
221 int JBC_ifnonnull = 199;
222 int JBC_goto_w = 200;
223 int JBC_jsr_w = 201;
224
225 int JBC_impdep1 = 254;
226 int JBC_impdep2 = 255;
227
228 // Length of each instruction introduced by the above bytecodes.
229 // -1 indicates a variable length instruction.
230 // -2 indicates an unused instruction.
231 //
232 byte[] JBC_length = {1, // nop
233 1, // aconst_null
234 1, // iconst_m1
235 1, // iconst_0
236 1, // iconst_1
237 1, // iconst_2
238 1, // iconst_3
239 1, // iconst_4
240 1, // iconst_5
241 1, // lconst_0
242 1, // lconst_1
243 1, // fconst_0
244 1, // fconst_1
245 1, // fconst_2
246 1, // dconst_0
247 1, // dconst_1
248 2, // bipush
249 3, // sipush
250 2, // ldc
251 3, // ldc_w
252 3, // ldc2_w
253 2, // iload
254 2, // lload
255 2, // fload
256 2, // dload
257 2, // aload
258 1, // iload_0
259 1, // iload_1
260 1, // iload_2
261 1, // iload_3
262 1, // lload_0
263 1, // lload_1
264 1, // lload_2
265 1, // lload_3
266 1, // fload_0
267 1, // fload_1
268 1, // fload_2
269 1, // fload_3
270 1, // dload_0
271 1, // dload_1
272 1, // dload_2
273 1, // dload_3
274 1, // aload_0
275 1, // aload_1
276 1, // aload_2
277 1, // aload_3
278 1, // iaload
279 1, // laload
280 1, // faload
281 1, // daload
282 1, // aaload
283 1, // baload
284 1, // caload
285 1, // saload
286 2, // istore
287 2, // lstore
288 2, // fstore
289 2, // dstore
290 2, // astore
291 1, // istore_0
292 1, // istore_1
293 1, // istore_2
294 1, // istore_3
295 1, // lstore_0
296 1, // lstore_1
297 1, // lstore_2
298 1, // lstore_3
299 1, // fstore_0
300 1, // fstore_1
301 1, // fstore_2
302 1, // fstore_3
303 1, // dstore_0
304 1, // dstore_1
305 1, // dstore_2
306 1, // dstore_3
307 1, // astore_0
308 1, // astore_1
309 1, // astore_2
310 1, // astore_3
311 1, // iastore
312 1, // lastore
313 1, // fastore
314 1, // dastore
315 1, // aastore
316 1, // bastore
317 1, // castore
318 1, // sastore
319 1, // pop
320 1, // pop2
321 1, // dup
322 1, // dup_x1
323 1, // dup_x2
324 1, // dup2
325 1, // dup2_x1
326 1, // dup2_x2
327 1, // swap
328 1, // iadd
329 1, // ladd
330 1, // fadd
331 1, // dadd
332 1, // isub
333 1, // lsub
334 1, // fsub
335 1, // dsub
336 1, // imul
337 1, // lmul
338 1, // fmul
339 1, // dmul
340 1, // idiv
341 1, // ldiv
342 1, // fdiv
343 1, // ddiv
344 1, // irem
345 1, // lrem
346 1, // frem
347 1, // drem
348 1, // ineg
349 1, // lneg
350 1, // fneg
351 1, // dneg
352 1, // ishl
353 1, // lshl
354 1, // ishr
355 1, // lshr
356 1, // iushr
357 1, // lushr
358 1, // iand
359 1, // land
360 1, // ior
361 1, // lor
362 1, // ixor
363 1, // lxor
364 3, // iinc
365 1, // i2l
366 1, // i2f
367 1, // i2d
368 1, // l2i
369 1, // l2f
370 1, // l2d
371 1, // f2i
372 1, // f2l
373 1, // f2d
374 1, // d2i
375 1, // d2l
376 1, // d2f
377 1, // int2byte
378 1, // int2char
379 1, // int2short
380 1, // lcmp
381 1, // fcmpl
382 1, // fcmpg
383 1, // dcmpl
384 1, // dcmpg
385 3, // ifeq
386 3, // ifne
387 3, // iflt
388 3, // ifge
389 3, // ifgt
390 3, // ifle
391 3, // if_icmpeq
392 3, // if_icmpne
393 3, // if_icmplt
394 3, // if_icmpge
395 3, // if_icmpgt
396 3, // if_icmple
397 3, // if_acmpeq
398 3, // if_acmpne
399 3, // goto
400 3, // jsr
401 2, // ret
402 -1, // tableswitch
403 -1, // lookupswitch
404 1, // ireturn
405 1, // lreturn
406 1, // freturn
407 1, // dreturn
408 1, // areturn
409 1, // return
410 3, // getstatic
411 3, // putstatic
412 3, // getfield
413 3, // putfield
414 3, // invokevirtual
415 3, // invokenonvirtual
416 3, // invokestatic
417 5, // invokeinterface
418 -2, // xxxunusedxxx
419 3, // new
420 2, // newarray
421 3, // anewarray
422 1, // arraylength
423 1, // athrow
424 3, // checkcast
425 3, // instanceof
426 1, // monitorenter
427 1, // monitorexit
428 -1, // wide
429 4, // multianewarray
430 3, // ifnull
431 3, // ifnonnull
432 5, // goto_w
433 5, // jsr_w
434 -2, // 202
435 -2, // 203
436 -2, // 204
437 -2, // 205
438 -2, // 206
439 -2, // 207
440 -2, // 208
441 -2, // 209
442 -2, // 210
443 -2, // 211
444 -2, // 212
445 -2, // 213
446 -2, // 214
447 -2, // 215
448 -2, // 216
449 -2, // 217
450 -2, // 218
451 -2, // 219
452 -2, // 220
453 -2, // 221
454 -2, // 222
455 -2, // 223
456 -2, // 224
457 -2, // 225
458 -2, // 226
459 -2, // 227
460 -2, // 228
461 -2, // 229
462 -2, // 230
463 -2, // 231
464 -2, // 232
465 -2, // 233
466 -2, // 234
467 -2, // 235
468 -2, // 236
469 -2, // 237
470 -2, // 238
471 -2, // 239
472 -2, // 240
473 -2, // 241
474 -2, // 242
475 -2, // 243
476 -2, // 244
477 -2, // 245
478 -2, // 246
479 -2, // 247
480 -2, // 248
481 -2, // 249
482 -2, // 250
483 -2, // 251
484 -2, // 252
485 -2, // 253
486 -1, // impdep1 254
487 -2, // 255
488 };
489
490 /**
491 * Bytecode names (for debugging/printing)
492 */
493 String[] JBC_name =
494 {"nop",
495 "aconst_null",
496 "iconst_m1",
497 "iconst_0",
498 "iconst_1",
499 "iconst_2",
500 "iconst_3",
501 "iconst_4",
502 "iconst_5",
503 "lconst_0",
504 "lconst_1",
505 "fconst_0",
506 "fconst_1",
507 "fconst_2",
508 "dconst_0",
509 "dconst_1",
510 "bipush",
511 "sipush",
512 "ldc",
513 "ldc_w",
514 "ldc2_w",
515 "iload",
516 "lload",
517 "fload",
518 "dload",
519 "aload",
520 "iload_0",
521 "iload_1",
522 "iload_2",
523 "iload_3",
524 "lload_0",
525 "lload_1",
526 "lload_2",
527 "lload_3",
528 "fload_0",
529 "fload_1",
530 "fload_2",
531 " fload_3",
532 " dload_0",
533 " dload_1",
534 " dload_2",
535 " dload_3",
536 " aload_0",
537 " aload_1",
538 " aload_2",
539 " aload_3",
540 " iaload",
541 " laload",
542 " faload",
543 " daload",
544 " aaload",
545 " baload",
546 " caload",
547 " saload",
548 " istore",
549 " lstore",
550 " fstore",
551 " dstore",
552 " astore",
553 " istore_0",
554 " istore_1",
555 " istore_2",
556 " istore_3",
557 " lstore_0",
558 " lstore_1",
559 " lstore_2",
560 " lstore_3",
561 " fstore_0",
562 " fstore_1",
563 " fstore_2",
564 " fstore_3",
565 " dstore_0",
566 " dstore_1",
567 " dstore_2",
568 " dstore_3",
569 " astore_0",
570 " astore_1",
571 " astore_2",
572 " astore_3",
573 "iastore",
574 "lastore",
575 "fastore",
576 "dastore",
577 "aastore",
578 "bastore",
579 "castore",
580 "sastore",
581 "pop",
582 "pop2",
583 "dup",
584 "dup_x1",
585 "dup_x2",
586 "dup2",
587 "dup2_x1",
588 "dup2_x2",
589 "swap",
590 "iadd",
591 "ladd",
592 "fadd",
593 "dadd",
594 "isub",
595 "lsub",
596 "fsub",
597 "dsub",
598 "imul",
599 "lmul",
600 "fmul",
601 "dmul",
602 "idiv",
603 "ldiv",
604 "fdiv",
605 "ddiv",
606 "irem",
607 "lrem",
608 "frem",
609 "drem",
610 "ineg",
611 "lneg",
612 "fneg",
613 "dneg",
614 "ishl",
615 "lshl",
616 "ishr",
617 "lshr",
618 "iushr",
619 "lushr",
620 "iand",
621 "land",
622 "ior",
623 "lor",
624 "ixor",
625 "lxor",
626 "iinc",
627 "i2l",
628 "i2f",
629 "i2d",
630 "l2i",
631 "l2f",
632 "l2d",
633 "f2i",
634 "f2l",
635 "f2d",
636 "d2i",
637 "d2l",
638 "d2f",
639 "int2byte",
640 "int2char",
641 "int2short",
642 "lcmp",
643 "fcmpl",
644 "fcmpg",
645 "dcmpl",
646 "dcmpg",
647 "ifeq",
648 "ifne",
649 "iflt",
650 "ifge",
651 "ifgt",
652 "ifle",
653 "if_icmpeq",
654 "if_icmpne",
655 "if_icmplt",
656 "if_icmpge",
657 "if_icmpgt",
658 "if_icmple",
659 "if_acmpeq",
660 "if_acmpne",
661 "goto",
662 "jsr",
663 "ret",
664 " tableswitch",
665 " lookupswitch",
666 "ireturn",
667 "lreturn",
668 "freturn",
669 "dreturn",
670 "areturn",
671 "return",
672 "getstatic",
673 "putstatic",
674 "getfield",
675 "putfield",
676 "invokevirtual",
677 "invokenonvirtual",
678 "invokestatic",
679 "invokeinterface",
680 " xxxunusedxxx",
681 "new",
682 "newarray",
683 "anewarray",
684 "arraylength",
685 "athrow",
686 "checkcast",
687 "instanceof",
688 "monitorenter",
689 "monitorexit",
690 " wide",
691 "multianewarray",
692 "ifnull",
693 "ifnonnull",
694 "goto_w",
695 "jsr_w",};
696
697 }