pclass_parser/classfile/
opcode.rs

1#![allow(non_camel_case_types)]
2
3#[repr(u8)]
4#[derive(Debug, PartialEq, Eq, Copy, Clone)]
5pub enum OpCode {
6    //Constants
7    nop = 0,
8    aconst_null,
9    iconst_m1,
10    iconst_0,
11    iconst_1,
12    iconst_2,
13    iconst_3,
14    iconst_4,
15    iconst_5,
16    lconst_0,
17    lconst_1,
18    fconst_0,
19    fconst_1,
20    fconst_2,
21    dconst_0,
22    dconst_1,
23    bipush,
24    sipush,
25    ldc,
26    ldc_w,
27    ldc2_w,
28    //Loads
29    iload,
30    lload,
31    fload,
32    dload,
33    aload,
34    iload_0,
35    iload_1,
36    iload_2,
37    iload_3,
38    lload_0,
39    lload_1,
40    lload_2,
41    lload_3,
42    fload_0,
43    fload_1,
44    fload_2,
45    fload_3,
46    dload_0,
47    dload_1,
48    dload_2,
49    dload_3,
50    aload_0,
51    aload_1,
52    aload_2,
53    aload_3,
54    iaload,
55    laload,
56    faload,
57    daload,
58    aaload,
59    baload,
60    caload,
61    saload,
62    //Stores
63    istore,
64    lstore,
65    fstore,
66    dstore,
67    astore,
68    istore_0,
69    istore_1,
70    istore_2,
71    istore_3,
72    lstore_0,
73    lstore_1,
74    lstore_2,
75    lstore_3,
76    fstore_0,
77    fstore_1,
78    fstore_2,
79    fstore_3,
80    dstore_0,
81    dstore_1,
82    dstore_2,
83    dstore_3,
84    astore_0,
85    astore_1,
86    astore_2,
87    astore_3,
88    iastore,
89    lastore,
90    fastore,
91    dastore,
92    aastore,
93    bastore,
94    castore,
95    sastore,
96    //Stack
97    pop,
98    pop2,
99    dup,
100    dup_x1,
101    dup_x2,
102    dup2,
103    dup2_x1,
104    dup2_x2,
105    swap,
106    //Math
107    iadd,
108    ladd,
109    fadd,
110    dadd,
111    isub,
112    lsub,
113    fsub,
114    dsub,
115    imul,
116    lmul,
117    fmul,
118    dmul,
119    idiv,
120    ldiv,
121    fdiv,
122    ddiv,
123    irem,
124    lrem,
125    frem, //deprecated
126    drem, //deprecated
127    ineg,
128    lneg,
129    fneg, //deprecated
130    dneg, //deprecated
131    ishl,
132    lshl,
133    ishr,
134    lshr,
135    iushr,
136    lushr,
137    iand,
138    land,
139    ior,
140    lor,
141    ixor,
142    lxor,
143    iinc,
144    //Conversions
145    i2l,
146    i2f,
147    i2d,
148    l2i,
149    l2f,
150    l2d,
151    f2i,
152    f2l,
153    f2d,
154    d2i,
155    d2l,
156    d2f,
157    i2b,
158    i2c,
159    i2s,
160    //Comparisons
161    lcmp,
162    fcmpl,
163    fcmpg,
164    dcmpl,
165    dcmpg,
166    ifeq,
167    ifne,
168    iflt,
169    ifge,
170    ifgt,
171    ifle,
172    if_icmpeq,
173    if_icmpne,
174    if_icmplt,
175    if_icmpge,
176    if_icmpgt,
177    if_icmple,
178    if_acmpeq,
179    if_acmpne,
180    //Control
181    goto,
182    jsr, //deprecated
183    ret, //deprecated
184    tableswitch,
185    lookupswitch,
186    ireturn,
187    lreturn,
188    freturn,
189    dreturn,
190    areturn,
191    return_void,
192    //References
193    getstatic,
194    putstatic,
195    getfield,
196    putfield,
197    invokevirtual,
198    invokespecial,
199    invokestatic,
200    invokeinterface,
201    invokedynamic,
202    new,
203    newarray,
204    anewarray,
205    arraylength,
206    athrow,
207    checkcast,
208    instanceof,
209    monitorenter,
210    monitorexit,
211    //Extended
212    wide, //deprecated
213    multianewarray,
214    ifnull,
215    ifnonnull,
216    goto_w, //deprecated
217    jsr_w,  //deprecated
218    //Reserved
219    breakpoint,
220    impdep1 = 0xfe,
221    impdep2 = 0xff,
222}
223
224lazy_static! {
225    static ref CODES: Vec<OpCode> = vec![
226            OpCode::nop,
227            OpCode::aconst_null,
228            OpCode::iconst_m1,
229            OpCode::iconst_0,
230            OpCode::iconst_1,
231            OpCode::iconst_2,
232            OpCode::iconst_3,
233            OpCode::iconst_4,
234            OpCode::iconst_5,
235            OpCode::lconst_0,
236            OpCode::lconst_1,
237            OpCode::fconst_0,
238            OpCode::fconst_1,
239            OpCode::fconst_2,
240            OpCode::dconst_0,
241            OpCode::dconst_1,
242            OpCode::bipush,
243            OpCode::sipush,
244            OpCode::ldc,
245            OpCode::ldc_w,
246            OpCode::ldc2_w,
247            OpCode::iload,
248            OpCode::lload,
249            OpCode::fload,
250            OpCode::dload,
251            OpCode::aload,
252            OpCode::iload_0,
253            OpCode::iload_1,
254            OpCode::iload_2,
255            OpCode::iload_3,
256            OpCode::lload_0,
257            OpCode::lload_1,
258            OpCode::lload_2,
259            OpCode::lload_3,
260            OpCode::fload_0,
261            OpCode::fload_1,
262            OpCode::fload_2,
263            OpCode::fload_3,
264            OpCode::dload_0,
265            OpCode::dload_1,
266            OpCode::dload_2,
267            OpCode::dload_3,
268            OpCode::aload_0,
269            OpCode::aload_1,
270            OpCode::aload_2,
271            OpCode::aload_3,
272            OpCode::iaload,
273            OpCode::laload,
274            OpCode::faload,
275            OpCode::daload,
276            OpCode::aaload,
277            OpCode::baload,
278            OpCode::caload,
279            OpCode::saload,
280            OpCode::istore,
281            OpCode::lstore,
282            OpCode::fstore,
283            OpCode::dstore,
284            OpCode::astore,
285            OpCode::istore_0,
286            OpCode::istore_1,
287            OpCode::istore_2,
288            OpCode::istore_3,
289            OpCode::lstore_0,
290            OpCode::lstore_1,
291            OpCode::lstore_2,
292            OpCode::lstore_3,
293            OpCode::fstore_0,
294            OpCode::fstore_1,
295            OpCode::fstore_2,
296            OpCode::fstore_3,
297            OpCode::dstore_0,
298            OpCode::dstore_1,
299            OpCode::dstore_2,
300            OpCode::dstore_3,
301            OpCode::astore_0,
302            OpCode::astore_1,
303            OpCode::astore_2,
304            OpCode::astore_3,
305            OpCode::iastore,
306            OpCode::lastore,
307            OpCode::fastore,
308            OpCode::dastore,
309            OpCode::aastore,
310            OpCode::bastore,
311            OpCode::castore,
312            OpCode::sastore,
313            OpCode::pop,
314            OpCode::pop2,
315            OpCode::dup,
316            OpCode::dup_x1,
317            OpCode::dup_x2,
318            OpCode::dup2,
319            OpCode::dup2_x1,
320            OpCode::dup2_x2,
321            OpCode::swap,
322            OpCode::iadd,
323            OpCode::ladd,
324            OpCode::fadd,
325            OpCode::dadd,
326            OpCode::isub,
327            OpCode::lsub,
328            OpCode::fsub,
329            OpCode::dsub,
330            OpCode::imul,
331            OpCode::lmul,
332            OpCode::fmul,
333            OpCode::dmul,
334            OpCode::idiv,
335            OpCode::ldiv,
336            OpCode::fdiv,
337            OpCode::ddiv,
338            OpCode::irem,
339            OpCode::lrem,
340            OpCode::frem,
341            OpCode::drem,
342            OpCode::ineg,
343            OpCode::lneg,
344            OpCode::fneg,
345            OpCode::dneg,
346            OpCode::ishl,
347            OpCode::lshl,
348            OpCode::ishr,
349            OpCode::lshr,
350            OpCode::iushr,
351            OpCode::lushr,
352            OpCode::iand,
353            OpCode::land,
354            OpCode::ior,
355            OpCode::lor,
356            OpCode::ixor,
357            OpCode::lxor,
358            OpCode::iinc,
359            OpCode::i2l,
360            OpCode::i2f,
361            OpCode::i2d,
362            OpCode::l2i,
363            OpCode::l2f,
364            OpCode::l2d,
365            OpCode::f2i,
366            OpCode::f2l,
367            OpCode::f2d,
368            OpCode::d2i,
369            OpCode::d2l,
370            OpCode::d2f,
371            OpCode::i2b,
372            OpCode::i2c,
373            OpCode::i2s,
374            OpCode::lcmp,
375            OpCode::fcmpl,
376            OpCode::fcmpg,
377            OpCode::dcmpl,
378            OpCode::dcmpg,
379            OpCode::ifeq,
380            OpCode::ifne,
381            OpCode::iflt,
382            OpCode::ifge,
383            OpCode::ifgt,
384            OpCode::ifle,
385            OpCode::if_icmpeq,
386            OpCode::if_icmpne,
387            OpCode::if_icmplt,
388            OpCode::if_icmpge,
389            OpCode::if_icmpgt,
390            OpCode::if_icmple,
391            OpCode::if_acmpeq,
392            OpCode::if_acmpne,
393            OpCode::goto,
394            OpCode::jsr,
395            OpCode::ret,
396            OpCode::tableswitch,
397            OpCode::lookupswitch,
398            OpCode::ireturn,
399            OpCode::lreturn,
400            OpCode::freturn,
401            OpCode::dreturn,
402            OpCode::areturn,
403            OpCode::return_void,
404            OpCode::getstatic,
405            OpCode::putstatic,
406            OpCode::getfield,
407            OpCode::putfield,
408            OpCode::invokevirtual,
409            OpCode::invokespecial,
410            OpCode::invokestatic,
411            OpCode::invokeinterface,
412            OpCode::invokedynamic,
413            OpCode::new,
414            OpCode::newarray,
415            OpCode::anewarray,
416            OpCode::arraylength,
417            OpCode::athrow,
418            OpCode::checkcast,
419            OpCode::instanceof,
420            OpCode::monitorenter,
421            OpCode::monitorexit,
422            OpCode::wide,
423            OpCode::multianewarray,
424            OpCode::ifnull,
425            OpCode::ifnonnull,
426            OpCode::goto_w,
427            OpCode::jsr_w,
428            OpCode::breakpoint,
429        ];
430}
431
432impl From<u8> for OpCode {
433    #[inline]
434    fn from(v: u8) -> Self {
435        match CODES.get(v as usize) {
436            Some(op) => *op,
437            None => match v {
438                254 => OpCode::impdep1,
439                255 => OpCode::impdep2,
440                _ => unreachable!(),
441            },
442        }
443    }
444}
445
446impl Into<&'static str> for OpCode {
447    fn into(self) -> &'static str {
448        match self {
449            OpCode::nop => "nop",
450            OpCode::aconst_null => "aconst_null",
451            OpCode::iconst_m1 => "iconst_m1",
452            OpCode::iconst_0 => "iconst_0",
453            OpCode::iconst_1 => "iconst_1",
454            OpCode::iconst_2 => "iconst_2",
455            OpCode::iconst_3 => "iconst_3",
456            OpCode::iconst_4 => "iconst_4",
457            OpCode::iconst_5 => "iconst_5",
458            OpCode::lconst_0 => "lconst_0",
459            OpCode::lconst_1 => "lconst_1",
460            OpCode::fconst_0 => "fconst_0",
461            OpCode::fconst_1 => "fconst_1",
462            OpCode::fconst_2 => "fconst_2",
463            OpCode::dconst_0 => "dconst_0",
464            OpCode::dconst_1 => "dconst_1",
465            OpCode::bipush => "bipush",
466            OpCode::sipush => "sipush",
467            OpCode::ldc => "ldc",
468            OpCode::ldc_w => "ldc_w",
469            OpCode::ldc2_w => "ldc2_w",
470            OpCode::iload => "iload",
471            OpCode::lload => "lload",
472            OpCode::fload => "fload",
473            OpCode::dload => "dload",
474            OpCode::aload => "aload",
475            OpCode::iload_0 => "iload_0",
476            OpCode::iload_1 => "iload_1",
477            OpCode::iload_2 => "iload_2",
478            OpCode::iload_3 => "iload_3",
479            OpCode::lload_0 => "lload_0",
480            OpCode::lload_1 => "lload_1",
481            OpCode::lload_2 => "lload_2",
482            OpCode::lload_3 => "lload_3",
483            OpCode::fload_0 => "fload_0",
484            OpCode::fload_1 => "fload_1",
485            OpCode::fload_2 => "fload_2",
486            OpCode::fload_3 => "fload_3",
487            OpCode::dload_0 => "dload_0",
488            OpCode::dload_1 => "dload_1",
489            OpCode::dload_2 => "dload_2",
490            OpCode::dload_3 => "dload_3",
491            OpCode::aload_0 => "aload_0",
492            OpCode::aload_1 => "aload_1",
493            OpCode::aload_2 => "aload_2",
494            OpCode::aload_3 => "aload_3",
495            OpCode::iaload => "iaload",
496            OpCode::laload => "laload",
497            OpCode::faload => "faload",
498            OpCode::daload => "daload",
499            OpCode::aaload => "aaload",
500            OpCode::baload => "baload",
501            OpCode::caload => "caload",
502            OpCode::saload => "saload",
503            OpCode::istore => "istore",
504            OpCode::lstore => "lstore",
505            OpCode::fstore => "fstore",
506            OpCode::dstore => "dstore",
507            OpCode::astore => "astore",
508            OpCode::istore_0 => "istore_0",
509            OpCode::istore_1 => "istore_1",
510            OpCode::istore_2 => "istore_2",
511            OpCode::istore_3 => "istore_3",
512            OpCode::lstore_0 => "lstore_0",
513            OpCode::lstore_1 => "lstore_1",
514            OpCode::lstore_2 => "lstore_2",
515            OpCode::lstore_3 => "lstore_3",
516            OpCode::fstore_0 => "fstore_0",
517            OpCode::fstore_1 => "fstore_1",
518            OpCode::fstore_2 => "fstore_2",
519            OpCode::fstore_3 => "fstore_3",
520            OpCode::dstore_0 => "dstore_0",
521            OpCode::dstore_1 => "dstore_1",
522            OpCode::dstore_2 => "dstore_2",
523            OpCode::dstore_3 => "dstore_3",
524            OpCode::astore_0 => "astore_0",
525            OpCode::astore_1 => "astore_1",
526            OpCode::astore_2 => "astore_2",
527            OpCode::astore_3 => "astore_3",
528            OpCode::iastore => "iastore",
529            OpCode::lastore => "lastore",
530            OpCode::fastore => "fastore",
531            OpCode::dastore => "dastore",
532            OpCode::aastore => "aastore",
533            OpCode::bastore => "bastore",
534            OpCode::castore => "castore",
535            OpCode::sastore => "sastore",
536            OpCode::pop => "pop",
537            OpCode::pop2 => "pop2",
538            OpCode::dup => "dup",
539            OpCode::dup_x1 => "dup_x1",
540            OpCode::dup_x2 => "dup_x2",
541            OpCode::dup2 => "dup2",
542            OpCode::dup2_x1 => "dup2_x1",
543            OpCode::dup2_x2 => "dup2_x2",
544            OpCode::swap => "swap",
545            OpCode::iadd => "iadd",
546            OpCode::ladd => "ladd",
547            OpCode::fadd => "fadd",
548            OpCode::dadd => "dadd",
549            OpCode::isub => "isub",
550            OpCode::lsub => "lsub",
551            OpCode::fsub => "fsub",
552            OpCode::dsub => "dsub",
553            OpCode::imul => "imul",
554            OpCode::lmul => "lmul",
555            OpCode::fmul => "fmul",
556            OpCode::dmul => "dmul",
557            OpCode::idiv => "idiv",
558            OpCode::ldiv => "ldiv",
559            OpCode::fdiv => "fdiv",
560            OpCode::ddiv => "ddiv",
561            OpCode::irem => "irem",
562            OpCode::lrem => "lrem",
563            OpCode::frem => "frem",
564            OpCode::drem => "drem",
565            OpCode::ineg => "ineg",
566            OpCode::lneg => "lneg",
567            OpCode::fneg => "fneg",
568            OpCode::dneg => "dneg",
569            OpCode::ishl => "ishl",
570            OpCode::lshl => "lshl",
571            OpCode::ishr => "ishr",
572            OpCode::lshr => "lshr",
573            OpCode::iushr => "iushr",
574            OpCode::lushr => "lushr",
575            OpCode::iand => "iand",
576            OpCode::land => "land",
577            OpCode::ior => "ior",
578            OpCode::lor => "lor",
579            OpCode::ixor => "ixor",
580            OpCode::lxor => "lxor",
581            OpCode::iinc => "iinc",
582            OpCode::i2l => "i2l",
583            OpCode::i2f => "i2f",
584            OpCode::i2d => "i2d",
585            OpCode::l2i => "l2i",
586            OpCode::l2f => "l2f",
587            OpCode::l2d => "l2d",
588            OpCode::f2i => "f2i",
589            OpCode::f2l => "f2l",
590            OpCode::f2d => "f2d",
591            OpCode::d2i => "d2i",
592            OpCode::d2l => "d2l",
593            OpCode::d2f => "d2f",
594            OpCode::i2b => "i2b",
595            OpCode::i2c => "i2c",
596            OpCode::i2s => "i2s",
597            OpCode::lcmp => "lcmp",
598            OpCode::fcmpl => "fcmpl",
599            OpCode::fcmpg => "fcmpg",
600            OpCode::dcmpl => "dcmpl",
601            OpCode::dcmpg => "dcmpg",
602            OpCode::ifeq => "ifeq",
603            OpCode::ifne => "ifne",
604            OpCode::iflt => "iflt",
605            OpCode::ifge => "ifge",
606            OpCode::ifgt => "ifgt",
607            OpCode::ifle => "ifle",
608            OpCode::if_icmpeq => "if_icmpeq",
609            OpCode::if_icmpne => "if_icmpne",
610            OpCode::if_icmplt => "if_icmplt",
611            OpCode::if_icmpge => "if_icmpge",
612            OpCode::if_icmpgt => "if_icmpgt",
613            OpCode::if_icmple => "if_icmple",
614            OpCode::if_acmpeq => "if_acmpeq",
615            OpCode::if_acmpne => "if_acmpne",
616            OpCode::goto => "goto",
617            OpCode::jsr => "jsr",
618            OpCode::ret => "ret",
619            OpCode::tableswitch => "tableswitch",
620            OpCode::lookupswitch => "lookupswitch",
621            OpCode::ireturn => "ireturn",
622            OpCode::lreturn => "lreturn",
623            OpCode::freturn => "freturn",
624            OpCode::dreturn => "dreturn",
625            OpCode::areturn => "areturn",
626            OpCode::return_void => "return",
627            OpCode::getstatic => "getstatic",
628            OpCode::putstatic => "putstatic",
629            OpCode::getfield => "getfield",
630            OpCode::putfield => "putfield",
631            OpCode::invokevirtual => "invokevirtual",
632            OpCode::invokespecial => "invokespecial",
633            OpCode::invokestatic => "invokestatic",
634            OpCode::invokeinterface => "invokeinterface",
635            OpCode::invokedynamic => "invokedynamic",
636            OpCode::new => "new",
637            OpCode::newarray => "newarray",
638            OpCode::anewarray => "anewarray",
639            OpCode::arraylength => "arraylength",
640            OpCode::athrow => "athrow",
641            OpCode::checkcast => "checkcast",
642            OpCode::instanceof => "instanceof",
643            OpCode::monitorenter => "monitorenter",
644            OpCode::monitorexit => "monitorexit",
645            OpCode::wide => "wide",
646            OpCode::multianewarray => "multianewarray",
647            OpCode::ifnull => "ifnull",
648            OpCode::ifnonnull => "ifnonnull",
649            OpCode::goto_w => "goto_w",
650            OpCode::jsr_w => "jsr_w",
651            OpCode::breakpoint => unreachable!(),
652            OpCode::impdep1 => unreachable!(),
653            OpCode::impdep2 => unreachable!(),
654        }
655    }
656}
657
658#[cfg(test)]
659mod tests {
660    use super::OpCode;
661
662    #[test]
663    fn t_opcode() {
664        assert_eq!(OpCode::nop, OpCode::from(0));
665        assert_eq!(OpCode::aconst_null, OpCode::from(1));
666        assert_eq!(OpCode::iconst_m1, OpCode::from(2));
667        assert_eq!(OpCode::iconst_0, OpCode::from(3));
668        assert_eq!(OpCode::iconst_1, OpCode::from(4));
669        assert_eq!(OpCode::iconst_2, OpCode::from(5));
670        assert_eq!(OpCode::iconst_3, OpCode::from(6));
671        assert_eq!(OpCode::iconst_4, OpCode::from(7));
672        assert_eq!(OpCode::iconst_5, OpCode::from(8));
673        assert_eq!(OpCode::lconst_0, OpCode::from(9));
674        assert_eq!(OpCode::lconst_1, OpCode::from(10));
675        assert_eq!(OpCode::fconst_0, OpCode::from(11));
676        assert_eq!(OpCode::fconst_1, OpCode::from(12));
677        assert_eq!(OpCode::fconst_2, OpCode::from(13));
678        assert_eq!(OpCode::dconst_0, OpCode::from(14));
679        assert_eq!(OpCode::dconst_1, OpCode::from(15));
680        assert_eq!(OpCode::bipush, OpCode::from(16));
681        assert_eq!(OpCode::sipush, OpCode::from(17));
682        assert_eq!(OpCode::ldc, OpCode::from(18));
683        assert_eq!(OpCode::ldc_w, OpCode::from(19));
684        assert_eq!(OpCode::ldc2_w, OpCode::from(20));
685        assert_eq!(OpCode::iload, OpCode::from(21));
686        assert_eq!(OpCode::lload, OpCode::from(22));
687        assert_eq!(OpCode::fload, OpCode::from(23));
688        assert_eq!(OpCode::dload, OpCode::from(24));
689        assert_eq!(OpCode::aload, OpCode::from(25));
690        assert_eq!(OpCode::iload_0, OpCode::from(26));
691        assert_eq!(OpCode::iload_1, OpCode::from(27));
692        assert_eq!(OpCode::iload_2, OpCode::from(28));
693        assert_eq!(OpCode::iload_3, OpCode::from(29));
694        assert_eq!(OpCode::lload_0, OpCode::from(30));
695        assert_eq!(OpCode::lload_1, OpCode::from(31));
696        assert_eq!(OpCode::lload_2, OpCode::from(32));
697        assert_eq!(OpCode::lload_3, OpCode::from(33));
698        assert_eq!(OpCode::fload_0, OpCode::from(34));
699        assert_eq!(OpCode::fload_1, OpCode::from(35));
700        assert_eq!(OpCode::fload_2, OpCode::from(36));
701        assert_eq!(OpCode::fload_3, OpCode::from(37));
702        assert_eq!(OpCode::dload_0, OpCode::from(38));
703        assert_eq!(OpCode::dload_1, OpCode::from(39));
704        assert_eq!(OpCode::dload_2, OpCode::from(40));
705        assert_eq!(OpCode::dload_3, OpCode::from(41));
706        assert_eq!(OpCode::aload_0, OpCode::from(42));
707        assert_eq!(OpCode::aload_1, OpCode::from(43));
708        assert_eq!(OpCode::aload_2, OpCode::from(44));
709        assert_eq!(OpCode::aload_3, OpCode::from(45));
710        assert_eq!(OpCode::iaload, OpCode::from(46));
711        assert_eq!(OpCode::laload, OpCode::from(47));
712        assert_eq!(OpCode::faload, OpCode::from(48));
713        assert_eq!(OpCode::daload, OpCode::from(49));
714        assert_eq!(OpCode::aaload, OpCode::from(50));
715        assert_eq!(OpCode::baload, OpCode::from(51));
716        assert_eq!(OpCode::caload, OpCode::from(52));
717        assert_eq!(OpCode::saload, OpCode::from(53));
718        assert_eq!(OpCode::istore, OpCode::from(54));
719        assert_eq!(OpCode::lstore, OpCode::from(55));
720        assert_eq!(OpCode::fstore, OpCode::from(56));
721        assert_eq!(OpCode::dstore, OpCode::from(57));
722        assert_eq!(OpCode::astore, OpCode::from(58));
723        assert_eq!(OpCode::istore_0, OpCode::from(59));
724        assert_eq!(OpCode::istore_1, OpCode::from(60));
725        assert_eq!(OpCode::istore_2, OpCode::from(61));
726        assert_eq!(OpCode::istore_3, OpCode::from(62));
727        assert_eq!(OpCode::lstore_0, OpCode::from(63));
728        assert_eq!(OpCode::lstore_1, OpCode::from(64));
729        assert_eq!(OpCode::lstore_2, OpCode::from(65));
730        assert_eq!(OpCode::lstore_3, OpCode::from(66));
731        assert_eq!(OpCode::fstore_0, OpCode::from(67));
732        assert_eq!(OpCode::fstore_1, OpCode::from(68));
733        assert_eq!(OpCode::fstore_2, OpCode::from(69));
734        assert_eq!(OpCode::fstore_3, OpCode::from(70));
735        assert_eq!(OpCode::dstore_0, OpCode::from(71));
736        assert_eq!(OpCode::dstore_1, OpCode::from(72));
737        assert_eq!(OpCode::dstore_2, OpCode::from(73));
738        assert_eq!(OpCode::dstore_3, OpCode::from(74));
739        assert_eq!(OpCode::astore_0, OpCode::from(75));
740        assert_eq!(OpCode::astore_1, OpCode::from(76));
741        assert_eq!(OpCode::astore_2, OpCode::from(77));
742        assert_eq!(OpCode::astore_3, OpCode::from(78));
743        assert_eq!(OpCode::iastore, OpCode::from(79));
744        assert_eq!(OpCode::lastore, OpCode::from(80));
745        assert_eq!(OpCode::fastore, OpCode::from(81));
746        assert_eq!(OpCode::dastore, OpCode::from(82));
747        assert_eq!(OpCode::aastore, OpCode::from(83));
748        assert_eq!(OpCode::bastore, OpCode::from(84));
749        assert_eq!(OpCode::castore, OpCode::from(85));
750        assert_eq!(OpCode::sastore, OpCode::from(86));
751        assert_eq!(OpCode::pop, OpCode::from(87));
752        assert_eq!(OpCode::pop2, OpCode::from(88));
753        assert_eq!(OpCode::dup, OpCode::from(89));
754        assert_eq!(OpCode::dup_x1, OpCode::from(90));
755        assert_eq!(OpCode::dup_x2, OpCode::from(91));
756        assert_eq!(OpCode::dup2, OpCode::from(92));
757        assert_eq!(OpCode::dup2_x1, OpCode::from(93));
758        assert_eq!(OpCode::dup2_x2, OpCode::from(94));
759        assert_eq!(OpCode::swap, OpCode::from(95));
760        assert_eq!(OpCode::iadd, OpCode::from(96));
761        assert_eq!(OpCode::ladd, OpCode::from(97));
762        assert_eq!(OpCode::fadd, OpCode::from(98));
763        assert_eq!(OpCode::dadd, OpCode::from(99));
764        assert_eq!(OpCode::isub, OpCode::from(100));
765        assert_eq!(OpCode::lsub, OpCode::from(101));
766        assert_eq!(OpCode::fsub, OpCode::from(102));
767        assert_eq!(OpCode::dsub, OpCode::from(103));
768        assert_eq!(OpCode::imul, OpCode::from(104));
769        assert_eq!(OpCode::lmul, OpCode::from(105));
770        assert_eq!(OpCode::fmul, OpCode::from(106));
771        assert_eq!(OpCode::dmul, OpCode::from(107));
772        assert_eq!(OpCode::idiv, OpCode::from(108));
773        assert_eq!(OpCode::ldiv, OpCode::from(109));
774        assert_eq!(OpCode::fdiv, OpCode::from(110));
775        assert_eq!(OpCode::ddiv, OpCode::from(111));
776        assert_eq!(OpCode::irem, OpCode::from(112));
777        assert_eq!(OpCode::lrem, OpCode::from(113));
778        assert_eq!(OpCode::frem, OpCode::from(114));
779        assert_eq!(OpCode::drem, OpCode::from(115));
780        assert_eq!(OpCode::ineg, OpCode::from(116));
781        assert_eq!(OpCode::lneg, OpCode::from(117));
782        assert_eq!(OpCode::fneg, OpCode::from(118));
783        assert_eq!(OpCode::dneg, OpCode::from(119));
784        assert_eq!(OpCode::ishl, OpCode::from(120));
785        assert_eq!(OpCode::lshl, OpCode::from(121));
786        assert_eq!(OpCode::ishr, OpCode::from(122));
787        assert_eq!(OpCode::lshr, OpCode::from(123));
788        assert_eq!(OpCode::iushr, OpCode::from(124));
789        assert_eq!(OpCode::lushr, OpCode::from(125));
790        assert_eq!(OpCode::iand, OpCode::from(126));
791        assert_eq!(OpCode::land, OpCode::from(127));
792        assert_eq!(OpCode::ior, OpCode::from(128));
793        assert_eq!(OpCode::lor, OpCode::from(129));
794        assert_eq!(OpCode::ixor, OpCode::from(130));
795        assert_eq!(OpCode::lxor, OpCode::from(131));
796        assert_eq!(OpCode::iinc, OpCode::from(132));
797        assert_eq!(OpCode::i2l, OpCode::from(133));
798        assert_eq!(OpCode::i2f, OpCode::from(134));
799        assert_eq!(OpCode::i2d, OpCode::from(135));
800        assert_eq!(OpCode::l2i, OpCode::from(136));
801        assert_eq!(OpCode::l2f, OpCode::from(137));
802        assert_eq!(OpCode::l2d, OpCode::from(138));
803        assert_eq!(OpCode::f2i, OpCode::from(139));
804        assert_eq!(OpCode::f2l, OpCode::from(140));
805        assert_eq!(OpCode::f2d, OpCode::from(141));
806        assert_eq!(OpCode::d2i, OpCode::from(142));
807        assert_eq!(OpCode::d2l, OpCode::from(143));
808        assert_eq!(OpCode::d2f, OpCode::from(144));
809        assert_eq!(OpCode::i2b, OpCode::from(145));
810        assert_eq!(OpCode::i2c, OpCode::from(146));
811        assert_eq!(OpCode::i2s, OpCode::from(147));
812        assert_eq!(OpCode::lcmp, OpCode::from(148));
813        assert_eq!(OpCode::fcmpl, OpCode::from(149));
814        assert_eq!(OpCode::fcmpg, OpCode::from(150));
815        assert_eq!(OpCode::dcmpl, OpCode::from(151));
816        assert_eq!(OpCode::dcmpg, OpCode::from(152));
817        assert_eq!(OpCode::ifeq, OpCode::from(153));
818        assert_eq!(OpCode::ifne, OpCode::from(154));
819        assert_eq!(OpCode::iflt, OpCode::from(155));
820        assert_eq!(OpCode::ifge, OpCode::from(156));
821        assert_eq!(OpCode::ifgt, OpCode::from(157));
822        assert_eq!(OpCode::ifle, OpCode::from(158));
823        assert_eq!(OpCode::if_icmpeq, OpCode::from(159));
824        assert_eq!(OpCode::if_icmpne, OpCode::from(160));
825        assert_eq!(OpCode::if_icmplt, OpCode::from(161));
826        assert_eq!(OpCode::if_icmpge, OpCode::from(162));
827        assert_eq!(OpCode::if_icmpgt, OpCode::from(163));
828        assert_eq!(OpCode::if_icmple, OpCode::from(164));
829        assert_eq!(OpCode::if_acmpeq, OpCode::from(165));
830        assert_eq!(OpCode::if_acmpne, OpCode::from(166));
831        assert_eq!(OpCode::goto, OpCode::from(167));
832        assert_eq!(OpCode::jsr, OpCode::from(168));
833        assert_eq!(OpCode::ret, OpCode::from(169));
834        assert_eq!(OpCode::tableswitch, OpCode::from(170));
835        assert_eq!(OpCode::lookupswitch, OpCode::from(171));
836        assert_eq!(OpCode::ireturn, OpCode::from(172));
837        assert_eq!(OpCode::lreturn, OpCode::from(173));
838        assert_eq!(OpCode::freturn, OpCode::from(174));
839        assert_eq!(OpCode::dreturn, OpCode::from(175));
840        assert_eq!(OpCode::areturn, OpCode::from(176));
841        assert_eq!(OpCode::return_void, OpCode::from(177));
842        assert_eq!(OpCode::getstatic, OpCode::from(178));
843        assert_eq!(OpCode::putstatic, OpCode::from(179));
844        assert_eq!(OpCode::getfield, OpCode::from(180));
845        assert_eq!(OpCode::putfield, OpCode::from(181));
846        assert_eq!(OpCode::invokevirtual, OpCode::from(182));
847        assert_eq!(OpCode::invokespecial, OpCode::from(183));
848        assert_eq!(OpCode::invokestatic, OpCode::from(184));
849        assert_eq!(OpCode::invokeinterface, OpCode::from(185));
850        assert_eq!(OpCode::invokedynamic, OpCode::from(186));
851        assert_eq!(OpCode::new, OpCode::from(187));
852        assert_eq!(OpCode::newarray, OpCode::from(188));
853        assert_eq!(OpCode::anewarray, OpCode::from(189));
854        assert_eq!(OpCode::arraylength, OpCode::from(190));
855        assert_eq!(OpCode::athrow, OpCode::from(191));
856        assert_eq!(OpCode::checkcast, OpCode::from(192));
857        assert_eq!(OpCode::instanceof, OpCode::from(193));
858        assert_eq!(OpCode::monitorenter, OpCode::from(194));
859        assert_eq!(OpCode::monitorexit, OpCode::from(195));
860        assert_eq!(OpCode::wide, OpCode::from(196));
861        assert_eq!(OpCode::multianewarray, OpCode::from(197));
862        assert_eq!(OpCode::ifnull, OpCode::from(198));
863        assert_eq!(OpCode::ifnonnull, OpCode::from(199));
864        assert_eq!(OpCode::goto_w, OpCode::from(200));
865        assert_eq!(OpCode::jsr_w, OpCode::from(201));
866        assert_eq!(OpCode::breakpoint, OpCode::from(202));
867        //        assert_eq!(OpCode::, OpCode::from(203));
868        //        assert_eq!(OpCode::, OpCode::from(204));
869        //        assert_eq!(OpCode::, OpCode::from(205));
870        //        assert_eq!(OpCode::, OpCode::from(206));
871        //        assert_eq!(OpCode::, OpCode::from(207));
872        //        assert_eq!(OpCode::, OpCode::from(208));
873        //        assert_eq!(OpCode::, OpCode::from(209));
874        //        assert_eq!(OpCode::, OpCode::from(210));
875        //        assert_eq!(OpCode::, OpCode::from(211));
876        //        assert_eq!(OpCode::, OpCode::from(212));
877        //        assert_eq!(OpCode::, OpCode::from(213));
878        //        assert_eq!(OpCode::, OpCode::from(214));
879        //        assert_eq!(OpCode::, OpCode::from(215));
880        //        assert_eq!(OpCode::, OpCode::from(216));
881        //        assert_eq!(OpCode::, OpCode::from(217));
882        //        assert_eq!(OpCode::, OpCode::from(218));
883        //        assert_eq!(OpCode::, OpCode::from(219));
884        //        assert_eq!(OpCode::, OpCode::from(220));
885        //        assert_eq!(OpCode::, OpCode::from(221));
886        //        assert_eq!(OpCode::, OpCode::from(222));
887        //        assert_eq!(OpCode::, OpCode::from(223));
888        //        assert_eq!(OpCode::, OpCode::from(224));
889        //        assert_eq!(OpCode::, OpCode::from(225));
890        //        assert_eq!(OpCode::, OpCode::from(226));
891        //        assert_eq!(OpCode::, OpCode::from(227));
892        //        assert_eq!(OpCode::, OpCode::from(228));
893        //        assert_eq!(OpCode::, OpCode::from(229));
894        //        assert_eq!(OpCode::, OpCode::from(230));
895        //        assert_eq!(OpCode::, OpCode::from(231));
896        //        assert_eq!(OpCode::, OpCode::from(232));
897        //        assert_eq!(OpCode::, OpCode::from(233));
898        //        assert_eq!(OpCode::, OpCode::from(234));
899        //        assert_eq!(OpCode::, OpCode::from(235));
900        //        assert_eq!(OpCode::, OpCode::from(236));
901        //        assert_eq!(OpCode::, OpCode::from(237));
902        //        assert_eq!(OpCode::, OpCode::from(238));
903        //        assert_eq!(OpCode::, OpCode::from(239));
904        //        assert_eq!(OpCode::, OpCode::from(240));
905        //        assert_eq!(OpCode::, OpCode::from(241));
906        //        assert_eq!(OpCode::, OpCode::from(242));
907        //        assert_eq!(OpCode::, OpCode::from(243));
908        //        assert_eq!(OpCode::, OpCode::from(244));
909        //        assert_eq!(OpCode::, OpCode::from(245));
910        //        assert_eq!(OpCode::, OpCode::from(246));
911        //        assert_eq!(OpCode::, OpCode::from(247));
912        //        assert_eq!(OpCode::, OpCode::from(248));
913        //        assert_eq!(OpCode::, OpCode::from(249));
914        //        assert_eq!(OpCode::, OpCode::from(250));
915        //        assert_eq!(OpCode::, OpCode::from(251));
916        //        assert_eq!(OpCode::, OpCode::from(252));
917        //        assert_eq!(OpCode::, OpCode::from(253));
918        assert_eq!(OpCode::impdep1, OpCode::from(254));
919        assert_eq!(OpCode::impdep2, OpCode::from(255));
920        //        assert_eq!(OpCode::, OpCode::from(256));
921    }
922}