15867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com/*
25867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * [The "BSD licence"]
300fc68adf2e39aeb9fed35293f2576bbe729ec4bJesusFreke@JesusFreke.com * Copyright (c) 2010 Ben Gruver (JesusFreke)
45867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * All rights reserved.
55867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com *
65867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * Redistribution and use in source and binary forms, with or without
75867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * modification, are permitted provided that the following conditions
85867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * are met:
95867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * 1. Redistributions of source code must retain the above copyright
105867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com *    notice, this list of conditions and the following disclaimer.
115867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * 2. Redistributions in binary form must reproduce the above copyright
125867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com *    notice, this list of conditions and the following disclaimer in the
135867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com *    documentation and/or other materials provided with the distribution.
145867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * 3. The name of the author may not be used to endorse or promote products
155867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com *    derived from this software without specific prior written permission.
165867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com *
175867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
185867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
195867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
205867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
215867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
225867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
235867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
245867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
265867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
275867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com */
285867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
295867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.compackage org.jf.dexlib.Code;
305867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
315867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.comimport org.jf.dexlib.Code.Format.Format;
325867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
335867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.comimport java.util.HashMap;
345867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
355867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.compublic enum Opcode
365867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com{
378fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    NOP((byte)0x00, "nop", ReferenceType.none, Format.Format10x, Opcode.CAN_CONTINUE),
38baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE((byte)0x01, "move", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
39baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_FROM16((byte)0x02, "move/from16", ReferenceType.none, Format.Format22x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
40baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_16((byte)0x03, "move/16", ReferenceType.none, Format.Format32x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
41baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_WIDE((byte)0x04, "move-wide", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
42baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_WIDE_FROM16((byte)0x05, "move-wide/from16", ReferenceType.none, Format.Format22x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
43baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_WIDE_16((byte)0x06, "move-wide/16", ReferenceType.none, Format.Format32x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
44baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_OBJECT((byte)0x07, "move-object", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
45baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_OBJECT_FROM16((byte)0x08, "move-object/from16", ReferenceType.none, Format.Format22x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
46baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_OBJECT_16((byte)0x09, "move-object/16", ReferenceType.none, Format.Format32x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
47baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_RESULT((byte)0x0a, "move-result", ReferenceType.none, Format.Format11x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
48baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_RESULT_WIDE((byte)0x0b, "move-result-wide", ReferenceType.none, Format.Format11x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
49baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_RESULT_OBJECT((byte)0x0c, "move-result-object", ReferenceType.none, Format.Format11x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
50baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MOVE_EXCEPTION((byte)0x0d, "move-exception", ReferenceType.none, Format.Format11x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
515867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    RETURN_VOID((byte)0x0e, "return-void", ReferenceType.none, Format.Format10x),
525867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    RETURN((byte)0x0f, "return", ReferenceType.none, Format.Format11x),
535867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    RETURN_WIDE((byte)0x10, "return-wide", ReferenceType.none, Format.Format11x),
545867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    RETURN_OBJECT((byte)0x11, "return-object", ReferenceType.none, Format.Format11x),
55baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CONST_4((byte)0x12, "const/4", ReferenceType.none, Format.Format11n, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
56baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CONST_16((byte)0x13, "const/16", ReferenceType.none, Format.Format21s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
57baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CONST((byte)0x14, "const", ReferenceType.none, Format.Format31i, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
58baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CONST_HIGH16((byte)0x15, "const/high16", ReferenceType.none, Format.Format21h, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
59baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CONST_WIDE_16((byte)0x16, "const-wide/16", ReferenceType.none, Format.Format21s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
60baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CONST_WIDE_32((byte)0x17, "const-wide/32", ReferenceType.none, Format.Format31i, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
61baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CONST_WIDE((byte)0x18, "const-wide", ReferenceType.none, Format.Format51l, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
62baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CONST_WIDE_HIGH16((byte)0x19, "const-wide/high16", ReferenceType.none, Format.Format21h, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
63baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CONST_STRING((byte)0x1a, "const-string", ReferenceType.string, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
64baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CONST_STRING_JUMBO((byte)0x1b, "const-string/jumbo", ReferenceType.string, Format.Format31c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
65baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CONST_CLASS((byte)0x1c, "const-class", ReferenceType.type, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
668fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    MONITOR_ENTER((byte)0x1d, "monitor-enter", ReferenceType.none, Format.Format11x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
678fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    MONITOR_EXIT((byte)0x1e, "monitor-exit", ReferenceType.none, Format.Format11x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
68baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CHECK_CAST((byte)0x1f, "check-cast", ReferenceType.type, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
69baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INSTANCE_OF((byte)0x20, "instance-of", ReferenceType.type, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
70baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    ARRAY_LENGTH((byte)0x21, "array-length", ReferenceType.none, Format.Format12x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
71baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    NEW_INSTANCE((byte)0x22, "new-instance", ReferenceType.type, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
72baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    NEW_ARRAY((byte)0x23, "new-array", ReferenceType.type, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
73baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    FILLED_NEW_ARRAY((byte)0x24, "filled-new-array", ReferenceType.type, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
74baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    FILLED_NEW_ARRAY_RANGE((byte)0x25, "filled-new-array/range", ReferenceType.type, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
758fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    FILL_ARRAY_DATA((byte)0x26, "fill-array-data", ReferenceType.none, Format.Format31t, Opcode.CAN_CONTINUE),
76c9be5e13034da9827b5598a6257376164745b827JesusFreke@JesusFreke.com    THROW((byte)0x27, "throw", ReferenceType.none, Format.Format11x, Opcode.CAN_THROW),
775867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    GOTO((byte)0x28, "goto", ReferenceType.none, Format.Format10t),
785867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    GOTO_16((byte)0x29, "goto/16", ReferenceType.none, Format.Format20t),
795867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    GOTO_32((byte)0x2a, "goto/32", ReferenceType.none, Format.Format30t),
808fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    PACKED_SWITCH((byte)0x2b, "packed-switch", ReferenceType.none, Format.Format31t, Opcode.CAN_CONTINUE),
818fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    SPARSE_SWITCH((byte)0x2c, "sparse-switch", ReferenceType.none, Format.Format31t, Opcode.CAN_CONTINUE),
82baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CMPL_FLOAT((byte)0x2d, "cmpl-float", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
83baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CMPG_FLOAT((byte)0x2e, "cmpg-float", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
84baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CMPL_DOUBLE((byte)0x2f, "cmpl-double", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
85baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CMPG_DOUBLE((byte)0x30, "cmpg-double", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
86baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    CMP_LONG((byte)0x31, "cmp-long", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
878fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_EQ((byte)0x32, "if-eq", ReferenceType.none, Format.Format22t, Opcode.CAN_CONTINUE),
888fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_NE((byte)0x33, "if-ne", ReferenceType.none, Format.Format22t, Opcode.CAN_CONTINUE),
898fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_LT((byte)0x34, "if-lt", ReferenceType.none, Format.Format22t, Opcode.CAN_CONTINUE),
908fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_GE((byte)0x35, "if-ge", ReferenceType.none, Format.Format22t, Opcode.CAN_CONTINUE),
918fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_GT((byte)0x36, "if-gt", ReferenceType.none, Format.Format22t, Opcode.CAN_CONTINUE),
928fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_LE((byte)0x37, "if-le", ReferenceType.none, Format.Format22t, Opcode.CAN_CONTINUE),
938fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_EQZ((byte)0x38, "if-eqz", ReferenceType.none, Format.Format21t, Opcode.CAN_CONTINUE),
948fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_NEZ((byte)0x39, "if-nez", ReferenceType.none, Format.Format21t, Opcode.CAN_CONTINUE),
958fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_LTZ((byte)0x3a, "if-ltz", ReferenceType.none, Format.Format21t, Opcode.CAN_CONTINUE),
968fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_GEZ((byte)0x3b, "if-gez", ReferenceType.none, Format.Format21t, Opcode.CAN_CONTINUE),
978fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_GTZ((byte)0x3c, "if-gtz", ReferenceType.none, Format.Format21t, Opcode.CAN_CONTINUE),
988fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IF_LEZ((byte)0x3d, "if-lez", ReferenceType.none, Format.Format21t, Opcode.CAN_CONTINUE),
99baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AGET((byte)0x44, "aget", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
100baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AGET_WIDE((byte)0x45, "aget-wide", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
101baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AGET_OBJECT((byte)0x46, "aget-object", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
102baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AGET_BOOLEAN((byte)0x47, "aget-boolean", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
103baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AGET_BYTE((byte)0x48, "aget-byte", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
104baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AGET_CHAR((byte)0x49, "aget-char", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
105baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AGET_SHORT((byte)0x4a, "aget-short", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
1068fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    APUT((byte)0x4b, "aput", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1078fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    APUT_WIDE((byte)0x4c, "aput-wide", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1088fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    APUT_OBJECT((byte)0x4d, "aput-object", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1098fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    APUT_BOOLEAN((byte)0x4e, "aput-boolean", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1108fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    APUT_BYTE((byte)0x4f, "aput-byte", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1118fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    APUT_CHAR((byte)0x50, "aput-char", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1128fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    APUT_SHORT((byte)0x51, "aput-short", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
113baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    IGET((byte)0x52, "iget", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
114baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    IGET_WIDE((byte)0x53, "iget-wide", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
115baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    IGET_OBJECT((byte)0x54, "iget-object", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
116baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    IGET_BOOLEAN((byte)0x55, "iget-boolean", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
117baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    IGET_BYTE((byte)0x56, "iget-byte", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
118baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    IGET_CHAR((byte)0x57, "iget-char", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
119baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    IGET_SHORT((byte)0x58, "iget-short", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
1208fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IPUT((byte)0x59, "iput", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1218fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IPUT_WIDE((byte)0x5a, "iput-wide", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1228fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IPUT_OBJECT((byte)0x5b, "iput-object", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1238fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IPUT_BOOLEAN((byte)0x5c, "iput-boolean", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1248fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IPUT_BYTE((byte)0x5d, "iput-byte", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1258fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IPUT_CHAR((byte)0x5e, "iput-char", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1268fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    IPUT_SHORT((byte)0x5f, "iput-short", ReferenceType.field, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
127baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SGET((byte)0x60, "sget", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
128baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SGET_WIDE((byte)0x61, "sget-wide", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
129baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SGET_OBJECT((byte)0x62, "sget-object", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
130baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SGET_BOOLEAN((byte)0x63, "sget-boolean", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
131baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SGET_BYTE((byte)0x64, "sget-byte", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
132baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SGET_CHAR((byte)0x65, "sget-char", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
133baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SGET_SHORT((byte)0x66, "sget-short", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
1348fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    SPUT((byte)0x67, "sput", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1358fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    SPUT_WIDE((byte)0x68, "sput-wide", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1368fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    SPUT_OBJECT((byte)0x69, "sput-object", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1378fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    SPUT_BOOLEAN((byte)0x6a, "sput-boolean", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1388fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    SPUT_BYTE((byte)0x6b, "sput-byte", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1398fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    SPUT_CHAR((byte)0x6c, "sput-char", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
1408fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    SPUT_SHORT((byte)0x6d, "sput-short", ReferenceType.field, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
141baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_VIRTUAL((byte)0x6e, "invoke-virtual", ReferenceType.method, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
142baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_SUPER((byte)0x6f, "invoke-super", ReferenceType.method, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
143baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_DIRECT((byte)0x70, "invoke-direct", ReferenceType.method, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
144baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_STATIC((byte)0x71, "invoke-static", ReferenceType.method, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
145baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_INTERFACE((byte)0x72, "invoke-interface", ReferenceType.method, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
146baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_VIRTUAL_RANGE((byte)0x74, "invoke-virtual/range", ReferenceType.method, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
147baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_SUPER_RANGE((byte)0x75, "invoke-super/range", ReferenceType.method, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
148baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_DIRECT_RANGE((byte)0x76, "invoke-direct/range", ReferenceType.method, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
149baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_STATIC_RANGE((byte)0x77, "invoke-static/range", ReferenceType.method, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
150baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_INTERFACE_RANGE((byte)0x78, "invoke-interface/range", ReferenceType.method, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
151baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    NEG_INT((byte)0x7b, "neg-int", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
152baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    NOT_INT((byte)0x7c, "not-int", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
153baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    NEG_LONG((byte)0x7d, "neg-long", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
154baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    NOT_LONG((byte)0x7e, "not-long", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
155baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    NEG_FLOAT((byte)0x7f, "neg-float", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
156baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    NEG_DOUBLE((byte)0x80, "neg-double", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
157baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INT_TO_LONG((byte)0x81, "int-to-long", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
158baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INT_TO_FLOAT((byte)0x82, "int-to-float", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
159baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INT_TO_DOUBLE((byte)0x83, "int-to-double", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
160baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    LONG_TO_INT((byte)0x84, "long-to-int", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
161baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    LONG_TO_FLOAT((byte)0x85, "long-to-float", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
162baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    LONG_TO_DOUBLE((byte)0x86, "long-to-double", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
163baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    FLOAT_TO_INT((byte)0x87, "float-to-int", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
164baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    FLOAT_TO_LONG((byte)0x88, "float-to-long", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
165baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    FLOAT_TO_DOUBLE((byte)0x89, "float-to-double", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
166baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DOUBLE_TO_INT((byte)0x8a, "double-to-int", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
167baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DOUBLE_TO_LONG((byte)0x8b, "double-to-long", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
168baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DOUBLE_TO_FLOAT((byte)0x8c, "double-to-float", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
169baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INT_TO_BYTE((byte)0x8d, "int-to-byte", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
170baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INT_TO_CHAR((byte)0x8e, "int-to-char", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
171baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INT_TO_SHORT((byte)0x8f, "int-to-short", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
172baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    ADD_INT((byte)0x90, "add-int", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
173baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SUB_INT((byte)0x91, "sub-int", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
174baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MUL_INT((byte)0x92, "mul-int", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
175baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DIV_INT((byte)0x93, "div-int", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
176baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    REM_INT((byte)0x94, "rem-int", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
177baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AND_INT((byte)0x95, "and-int", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
178baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    OR_INT((byte)0x96, "or-int", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
179baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    XOR_INT((byte)0x97, "xor-int", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
180baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SHL_INT((byte)0x98, "shl-int", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
181baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SHR_INT((byte)0x99, "shr-int", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
182baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    USHR_INT((byte)0x9a, "ushr-int", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
183baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    ADD_LONG((byte)0x9b, "add-long", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
184baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SUB_LONG((byte)0x9c, "sub-long", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
185baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MUL_LONG((byte)0x9d, "mul-long", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
186baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DIV_LONG((byte)0x9e, "div-long", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
187baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    REM_LONG((byte)0x9f, "rem-long", ReferenceType.none, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
188baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AND_LONG((byte)0xa0, "and-long", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
189baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    OR_LONG((byte)0xa1, "or-long", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
190baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    XOR_LONG((byte)0xa2, "xor-long", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
191baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SHL_LONG((byte)0xa3, "shl-long", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
192baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SHR_LONG((byte)0xa4, "shr-long", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
193baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    USHR_LONG((byte)0xa5, "ushr-long", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
194baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    ADD_FLOAT((byte)0xa6, "add-float", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
195baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SUB_FLOAT((byte)0xa7, "sub-float", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
196baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MUL_FLOAT((byte)0xa8, "mul-float", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
197baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DIV_FLOAT((byte)0xa9, "div-float", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
198baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    REM_FLOAT((byte)0xaa, "rem-float", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
199baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    ADD_DOUBLE((byte)0xab, "add-double", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
200baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SUB_DOUBLE((byte)0xac, "sub-double", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
201baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MUL_DOUBLE((byte)0xad, "mul-double", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
202baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DIV_DOUBLE((byte)0xae, "div-double", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
203baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    REM_DOUBLE((byte)0xaf, "rem-double", ReferenceType.none, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
204baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    ADD_INT_2ADDR((byte)0xb0, "add-int/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
205baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SUB_INT_2ADDR((byte)0xb1, "sub-int/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
206baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MUL_INT_2ADDR((byte)0xb2, "mul-int/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
207baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DIV_INT_2ADDR((byte)0xb3, "div-int/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
208baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    REM_INT_2ADDR((byte)0xb4, "rem-int/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
209baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AND_INT_2ADDR((byte)0xb5, "and-int/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
210baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    OR_INT_2ADDR((byte)0xb6, "or-int/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
211baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    XOR_INT_2ADDR((byte)0xb7, "xor-int/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
212baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SHL_INT_2ADDR((byte)0xb8, "shl-int/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
213baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SHR_INT_2ADDR((byte)0xb9, "shr-int/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
214baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    USHR_INT_2ADDR((byte)0xba, "ushr-int/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
215baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    ADD_LONG_2ADDR((byte)0xbb, "add-long/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
216baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SUB_LONG_2ADDR((byte)0xbc, "sub-long/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
217baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MUL_LONG_2ADDR((byte)0xbd, "mul-long/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
218baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DIV_LONG_2ADDR((byte)0xbe, "div-long/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
219baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    REM_LONG_2ADDR((byte)0xbf, "rem-long/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
220baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AND_LONG_2ADDR((byte)0xc0, "and-long/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
221baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    OR_LONG_2ADDR((byte)0xc1, "or-long/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
222baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    XOR_LONG_2ADDR((byte)0xc2, "xor-long/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
223baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SHL_LONG_2ADDR((byte)0xc3, "shl-long/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
224baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SHR_LONG_2ADDR((byte)0xc4, "shr-long/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
225baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    USHR_LONG_2ADDR((byte)0xc5, "ushr-long/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
226c9be5e13034da9827b5598a6257376164745b827JesusFreke@JesusFreke.com    ADD_FLOAT_2ADDR((byte)0xc6, "add-float/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
227c9be5e13034da9827b5598a6257376164745b827JesusFreke@JesusFreke.com    SUB_FLOAT_2ADDR((byte)0xc7, "sub-float/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
228c9be5e13034da9827b5598a6257376164745b827JesusFreke@JesusFreke.com    MUL_FLOAT_2ADDR((byte)0xc8, "mul-float/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
229c9be5e13034da9827b5598a6257376164745b827JesusFreke@JesusFreke.com    DIV_FLOAT_2ADDR((byte)0xc9, "div-float/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
230c9be5e13034da9827b5598a6257376164745b827JesusFreke@JesusFreke.com    REM_FLOAT_2ADDR((byte)0xca, "rem-float/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
231baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    ADD_DOUBLE_2ADDR((byte)0xcb, "add-double/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
232baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SUB_DOUBLE_2ADDR((byte)0xcc, "sub-double/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
233baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MUL_DOUBLE_2ADDR((byte)0xcd, "mul-double/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
234baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DIV_DOUBLE_2ADDR((byte)0xce, "div-double/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
235baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    REM_DOUBLE_2ADDR((byte)0xcf, "rem-double/2addr", ReferenceType.none, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
236baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    ADD_INT_LIT16((byte)0xd0, "add-int/lit16", ReferenceType.none, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
237baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    RSUB_INT((byte)0xd1, "rsub-int", ReferenceType.none, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
238baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MUL_INT_LIT16((byte)0xd2, "mul-int/lit16", ReferenceType.none, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
239baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DIV_INT_LIT16((byte)0xd3, "div-int/lit16", ReferenceType.none, Format.Format22s, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
240baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    REM_INT_LIT16((byte)0xd4, "rem-int/lit16", ReferenceType.none, Format.Format22s, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
241baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AND_INT_LIT16((byte)0xd5, "and-int/lit16", ReferenceType.none, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
242baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    OR_INT_LIT16((byte)0xd6, "or-int/lit16", ReferenceType.none, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
243baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    XOR_INT_LIT16((byte)0xd7, "xor-int/lit16", ReferenceType.none, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
244baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    ADD_INT_LIT8((byte)0xd8, "add-int/lit8", ReferenceType.none, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
245baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    RSUB_INT_LIT8((byte)0xd9, "rsub-int/lit8", ReferenceType.none, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
246baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    MUL_INT_LIT8((byte)0xda, "mul-int/lit8", ReferenceType.none, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
247baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    DIV_INT_LIT8((byte)0xdb, "div-int/lit8", ReferenceType.none, Format.Format22b, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
248baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    REM_INT_LIT8((byte)0xdc, "rem-int/lit8", ReferenceType.none, Format.Format22b, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
249baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    AND_INT_LIT8((byte)0xdd, "and-int/lit8", ReferenceType.none, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
250baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    OR_INT_LIT8((byte)0xde, "or-int/lit8", ReferenceType.none, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
251baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    XOR_INT_LIT8((byte)0xdf, "xor-int/lit8", ReferenceType.none, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
252baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SHL_INT_LIT8((byte)0xe0, "shl-int/lit8", ReferenceType.none, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
253baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    SHR_INT_LIT8((byte)0xe1, "shr-int/lit8", ReferenceType.none, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
254baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    USHR_INT_LIT8((byte)0xe2, "ushr-int/lit8", ReferenceType.none, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
2555867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
256d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IGET_VOLATILE((byte)0xe3, "iget-volatile", ReferenceType.field, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
257d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IPUT_VOLATILE((byte)0xe4, "iput-volatile", ReferenceType.field, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
258d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    SGET_VOLATILE((byte)0xe5, "sget-volatile", ReferenceType.field, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
259d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    SPUT_VOLATILE((byte)0xe6, "sput-volatile", ReferenceType.field, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
260d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IGET_OBJECT_VOLATILE((byte)0xe7, "iget-object-volatile", ReferenceType.field, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
261d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IGET_WIDE_VOLATILE((byte)0xe8, "iget-wide-volatile", ReferenceType.field, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
262d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IPUT_WIDE_VOLATILE((byte)0xe9, "iput-wide-volatile", ReferenceType.field, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
263d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    SGET_WIDE_VOLATILE((byte)0xea, "sget-wide-volatile", ReferenceType.field, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
264d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    SPUT_WIDE_VOLATILE((byte)0xeb, "sput-wide-volatile", ReferenceType.field, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
265d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com
266bbe539f2d2cdfdd814fcdc0057dcdf454ae153d3Ben Gruver    THROW_VERIFICATION_ERROR((byte)0xed, "throw-verification-error", ReferenceType.none, Format.Format20bc, Opcode.ODEX_ONLY | Opcode.CAN_THROW),
2670c65e0f4f54ead8fd2832c954d516367b3556ae3JesusFreke@JesusFreke.com    EXECUTE_INLINE((byte)0xee, "execute-inline", ReferenceType.none,  Format.Format35ms, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
2680c65e0f4f54ead8fd2832c954d516367b3556ae3JesusFreke@JesusFreke.com    EXECUTE_INLINE_RANGE((byte)0xef, "execute-inline/range", ReferenceType.none,  Format.Format3rms,  Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
269baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_DIRECT_EMPTY((byte)0xf0, "invoke-direct-empty", ReferenceType.method,  Format.Format35s, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
270d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IGET_QUICK((byte)0xf2, "iget-quick", ReferenceType.none,  Format.Format22cs, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_QUICK | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
271d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IGET_WIDE_QUICK((byte)0xf3, "iget-wide-quick", ReferenceType.none,  Format.Format22cs, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_QUICK | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
272d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IGET_OBJECT_QUICK((byte)0xf4, "iget-object-quick", ReferenceType.none,  Format.Format22cs, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_QUICK | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
273d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IPUT_QUICK((byte)0xf5, "iput-quick", ReferenceType.none,  Format.Format22cs, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_QUICK | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
274d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IPUT_WIDE_QUICK((byte)0xf6, "iput-wide-quick", ReferenceType.none,  Format.Format22cs, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_QUICK | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
275d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IPUT_OBJECT_QUICK((byte)0xf7, "iput-object-quick", ReferenceType.none,  Format.Format22cs, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_QUICK | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
276baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_VIRTUAL_QUICK((byte)0xf8, "invoke-virtual-quick", ReferenceType.none,  Format.Format35ms, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
277baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_VIRTUAL_QUICK_RANGE((byte)0xf9, "invoke-virtual-quick/range", ReferenceType.none,  Format.Format3rms, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
278baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    INVOKE_SUPER_QUICK((byte)0xfa, "invoke-super-quick", ReferenceType.none,  Format.Format35ms, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
279d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    INVOKE_SUPER_QUICK_RANGE((byte)0xfb, "invoke-super-quick/range", ReferenceType.none,  Format.Format3rms, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
280d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com
281d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    IPUT_OBJECT_VOLATILE((byte)0xfc, "iput-object-volatile", ReferenceType.field, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
282d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    SGET_OBJECT_VOLATILE((byte)0xfd, "sget-object-volatile", ReferenceType.field, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
283d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    SPUT_OBJECT_VOLATILE((byte)0xfe, "sput-object-volatile", ReferenceType.field, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE);
2845867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
2855867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
2865867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    private static Opcode[] opcodesByValue;
2875867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    private static HashMap<Integer, Opcode> opcodesByName;
2885867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
289baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    //if the instruction can throw an exception
29042e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com    public static final int CAN_THROW = 0x1;
291baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    //if the instruction is an odex only instruction
29242e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com    public static final int ODEX_ONLY = 0x2;
293baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    //if execution can continue to the next instruction
2948fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    public static final int CAN_CONTINUE = 0x4;
295baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    //if the instruction sets the "hidden" result register
296baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    public static final int SETS_RESULT = 0x8;
297baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    //if the instruction sets the value of it's first register
2987e24a9f010eeeff54f7ca0cb589a75cc251fabddJesusFreke@JesusFreke.com    public static final int SETS_REGISTER = 0x10;
299baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    //if the instruction sets the value of it's first register to a wide type
3007e24a9f010eeeff54f7ca0cb589a75cc251fabddJesusFreke@JesusFreke.com    public static final int SETS_WIDE_REGISTER = 0x20;
301d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    //if the instruction is an odexed iget-quick/iput-quick instruction
302d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    public static final int ODEXED_INSTANCE_QUICK = 0x40;
303d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    //if the instruction is an odexed iget-volatile/iput-volatile instruction
304d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    public static final int ODEXED_INSTANCE_VOLATILE = 0x80;
305d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    //if the instruction is an odexed sget-volatile/sput-volatile instruction
306d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    public static final int ODEXED_STATIC_VOLATILE = 0x100;
30742e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com
3085867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    static {
3095867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com        opcodesByValue = new Opcode[256];
3105867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com        opcodesByName = new HashMap<Integer, Opcode>();
3115867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
3125867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com        for (Opcode opcode: Opcode.values()) {
3135867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com            opcodesByValue[opcode.value & 0xFF] = opcode;
3145867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com            opcodesByName.put(opcode.name.hashCode(), opcode);
3155867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com        }
3165867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    }
3175867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
3185867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    public static Opcode getOpcodeByName(String opcodeName) {
3195867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com        return opcodesByName.get(opcodeName.toLowerCase().hashCode());
3205867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    }
3215867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
3225867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    public static Opcode getOpcodeByValue(byte opcodeValue) {
3235867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com        return opcodesByValue[opcodeValue & 0xFF];
3245867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    }
3255867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
3265867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    public final byte value;
3275867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    public final String name;
3285867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    public final ReferenceType referenceType;
3295867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    public final Format format;
33042e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com    public final int flags;
3315867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com
3325867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    Opcode(byte opcodeValue, String opcodeName, ReferenceType referenceType, Format format) {
33342e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com        this(opcodeValue, opcodeName, referenceType, format, 0);
3345867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    }
335da3b7b1150f88b0105c38f30cd8204085c7d2acdJesusFreke@JesusFreke.com
33642e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com    Opcode(byte opcodeValue, String opcodeName, ReferenceType referenceType, Format format, int flags) {
3375867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com        this.value = opcodeValue;
3385867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com        this.name = opcodeName;
3395867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com        this.referenceType = referenceType;
3405867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com        this.format = format;
34142e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com        this.flags = flags;
34242e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com    }
34342e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com
34442e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com    public final boolean canThrow() {
34542e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com        return (flags & CAN_THROW) != 0;
34642e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com    }
34742e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com
34842e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com    public final boolean odexOnly() {
34942e4ef489241e4bd7216e235ca499ea3f201bd3bJesusFreke@JesusFreke.com        return (flags & ODEX_ONLY) != 0;
3505867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com    }
3518fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com
3528fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    public final boolean canContinue() {
3538fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com        return (flags & CAN_CONTINUE) != 0;
3548fcc31d5f2eeae785c3ac72dc66d748aa3af14f7JesusFreke@JesusFreke.com    }
355baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com
356baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    public final boolean setsResult() {
357baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com        return (flags & SETS_RESULT) != 0;
358baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    }
359baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com
360baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    public final boolean setsRegister() {
361baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com        return (flags & SETS_REGISTER) != 0;
362baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    }
363baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com
364baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    public final boolean setsWideRegister() {
365baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com        return (flags & SETS_WIDE_REGISTER) != 0;
366baabf9a11b105f6821a798dc411e497c2e92b524JesusFreke@JesusFreke.com    }
367d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com
368d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    public final boolean isOdexedInstanceQuick() {
369d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com        return (flags & ODEXED_INSTANCE_QUICK) != 0;
370d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    }
371d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com
372d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    public final boolean isOdexedInstanceVolatile() {
373d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com        return (flags & ODEXED_INSTANCE_VOLATILE) != 0;
374d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    }
375d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com
376d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    public final boolean isOdexedStaticVolatile() {
377d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com        return (flags & ODEXED_STATIC_VOLATILE) != 0;
378d4417d7269dad2c6e2f92c67c82a2ada18bb38e3JesusFreke@JesusFreke.com    }
3795867263eb588f4671400895d1e6b01c01535061bJesusFreke@JesusFreke.com}
380