1c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver/*
2c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * Copyright 2012, Google Inc.
3c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * All rights reserved.
4c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver *
5c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * Redistribution and use in source and binary forms, with or without
6c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * modification, are permitted provided that the following conditions are
7c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * met:
8c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver *
9c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver *     * Redistributions of source code must retain the above copyright
10c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * notice, this list of conditions and the following disclaimer.
11c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver *     * Redistributions in binary form must reproduce the above
12c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * copyright notice, this list of conditions and the following disclaimer
13c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * in the documentation and/or other materials provided with the
14c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * distribution.
15c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver *     * Neither the name of Google Inc. nor the names of its
16c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * contributors may be used to endorse or promote products derived from
17c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * this software without specific prior written permission.
18c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver *
19c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver */
31c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
32c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruverpackage org.jf.dexlib2;
33c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
34c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruverpublic enum Opcode
35c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver{
3670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    NOP((short)0x00, "nop", ReferenceType.NONE, Format.Format10x, Opcode.CAN_CONTINUE),
3770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE((short)0x01, "move", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
3870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_FROM16((short)0x02, "move/from16", ReferenceType.NONE, Format.Format22x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
3970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_16((short)0x03, "move/16", ReferenceType.NONE, Format.Format32x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
4070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_WIDE((short)0x04, "move-wide", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
4170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_WIDE_FROM16((short)0x05, "move-wide/from16", ReferenceType.NONE, Format.Format22x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
4270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_WIDE_16((short)0x06, "move-wide/16", ReferenceType.NONE, Format.Format32x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
4370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_OBJECT((short)0x07, "move-object", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
4470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_OBJECT_FROM16((short)0x08, "move-object/from16", ReferenceType.NONE, Format.Format22x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
4570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_OBJECT_16((short)0x09, "move-object/16", ReferenceType.NONE, Format.Format32x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
4670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_RESULT((short)0x0a, "move-result", ReferenceType.NONE, Format.Format11x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
4770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_RESULT_WIDE((short)0x0b, "move-result-wide", ReferenceType.NONE, Format.Format11x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
4870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_RESULT_OBJECT((short)0x0c, "move-result-object", ReferenceType.NONE, Format.Format11x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
4970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MOVE_EXCEPTION((short)0x0d, "move-exception", ReferenceType.NONE, Format.Format11x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
5070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    RETURN_VOID((short)0x0e, "return-void", ReferenceType.NONE, Format.Format10x),
5170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    RETURN((short)0x0f, "return", ReferenceType.NONE, Format.Format11x),
5270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    RETURN_WIDE((short)0x10, "return-wide", ReferenceType.NONE, Format.Format11x),
5370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    RETURN_OBJECT((short)0x11, "return-object", ReferenceType.NONE, Format.Format11x),
5470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CONST_4((short)0x12, "const/4", ReferenceType.NONE, Format.Format11n, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
5570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CONST_16((short)0x13, "const/16", ReferenceType.NONE, Format.Format21s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
5670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CONST((short)0x14, "const", ReferenceType.NONE, Format.Format31i, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
5770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CONST_HIGH16((short)0x15, "const/high16", ReferenceType.NONE, Format.Format21ih, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
5870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CONST_WIDE_16((short)0x16, "const-wide/16", ReferenceType.NONE, Format.Format21s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
5970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CONST_WIDE_32((short)0x17, "const-wide/32", ReferenceType.NONE, Format.Format31i, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
6070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CONST_WIDE((short)0x18, "const-wide", ReferenceType.NONE, Format.Format51l, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
6170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CONST_WIDE_HIGH16((short)0x19, "const-wide/high16", ReferenceType.NONE, Format.Format21lh, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
6270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CONST_STRING((short)0x1a, "const-string", ReferenceType.STRING, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER, (short)0x1b),
6370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CONST_STRING_JUMBO((short)0x1b, "const-string/jumbo", ReferenceType.STRING, Format.Format31c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
6470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CONST_CLASS((short)0x1c, "const-class", ReferenceType.TYPE, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
6570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MONITOR_ENTER((short)0x1d, "monitor-enter", ReferenceType.NONE, Format.Format11x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
6670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MONITOR_EXIT((short)0x1e, "monitor-exit", ReferenceType.NONE, Format.Format11x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
6770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CHECK_CAST((short)0x1f, "check-cast", ReferenceType.TYPE, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
6870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INSTANCE_OF((short)0x20, "instance-of", ReferenceType.TYPE, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
6970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    ARRAY_LENGTH((short)0x21, "array-length", ReferenceType.NONE, Format.Format12x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
7070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    NEW_INSTANCE((short)0x22, "new-instance", ReferenceType.TYPE, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
7170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    NEW_ARRAY((short)0x23, "new-array", ReferenceType.TYPE, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
7270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    FILLED_NEW_ARRAY((short)0x24, "filled-new-array", ReferenceType.TYPE, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
7370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    FILLED_NEW_ARRAY_RANGE((short)0x25, "filled-new-array/range", ReferenceType.TYPE, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
7470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    FILL_ARRAY_DATA((short)0x26, "fill-array-data", ReferenceType.NONE, Format.Format31t, Opcode.CAN_CONTINUE),
7570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    THROW((short)0x27, "throw", ReferenceType.NONE, Format.Format11x, Opcode.CAN_THROW),
7670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    GOTO((short)0x28, "goto", ReferenceType.NONE, Format.Format10t),
7770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    GOTO_16((short)0x29, "goto/16", ReferenceType.NONE, Format.Format20t),
7870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    GOTO_32((short)0x2a, "goto/32", ReferenceType.NONE, Format.Format30t),
7970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    PACKED_SWITCH((short)0x2b, "packed-switch", ReferenceType.NONE, Format.Format31t, Opcode.CAN_CONTINUE),
8070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SPARSE_SWITCH((short)0x2c, "sparse-switch", ReferenceType.NONE, Format.Format31t, Opcode.CAN_CONTINUE),
8170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CMPL_FLOAT((short)0x2d, "cmpl-float", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
8270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CMPG_FLOAT((short)0x2e, "cmpg-float", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
8370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CMPL_DOUBLE((short)0x2f, "cmpl-double", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
8470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CMPG_DOUBLE((short)0x30, "cmpg-double", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
8570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    CMP_LONG((short)0x31, "cmp-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
8670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_EQ((short)0x32, "if-eq", ReferenceType.NONE, Format.Format22t, Opcode.CAN_CONTINUE),
8770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_NE((short)0x33, "if-ne", ReferenceType.NONE, Format.Format22t, Opcode.CAN_CONTINUE),
8870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_LT((short)0x34, "if-lt", ReferenceType.NONE, Format.Format22t, Opcode.CAN_CONTINUE),
8970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_GE((short)0x35, "if-ge", ReferenceType.NONE, Format.Format22t, Opcode.CAN_CONTINUE),
9070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_GT((short)0x36, "if-gt", ReferenceType.NONE, Format.Format22t, Opcode.CAN_CONTINUE),
9170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_LE((short)0x37, "if-le", ReferenceType.NONE, Format.Format22t, Opcode.CAN_CONTINUE),
9270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_EQZ((short)0x38, "if-eqz", ReferenceType.NONE, Format.Format21t, Opcode.CAN_CONTINUE),
9370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_NEZ((short)0x39, "if-nez", ReferenceType.NONE, Format.Format21t, Opcode.CAN_CONTINUE),
9470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_LTZ((short)0x3a, "if-ltz", ReferenceType.NONE, Format.Format21t, Opcode.CAN_CONTINUE),
9570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_GEZ((short)0x3b, "if-gez", ReferenceType.NONE, Format.Format21t, Opcode.CAN_CONTINUE),
9670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_GTZ((short)0x3c, "if-gtz", ReferenceType.NONE, Format.Format21t, Opcode.CAN_CONTINUE),
9770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IF_LEZ((short)0x3d, "if-lez", ReferenceType.NONE, Format.Format21t, Opcode.CAN_CONTINUE),
9870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AGET((short)0x44, "aget", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
9970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AGET_WIDE((short)0x45, "aget-wide", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
10070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AGET_OBJECT((short)0x46, "aget-object", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
10170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AGET_BOOLEAN((short)0x47, "aget-boolean", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
10270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AGET_BYTE((short)0x48, "aget-byte", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
10370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AGET_CHAR((short)0x49, "aget-char", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
10470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AGET_SHORT((short)0x4a, "aget-short", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
10570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    APUT((short)0x4b, "aput", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
10670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    APUT_WIDE((short)0x4c, "aput-wide", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
10770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    APUT_OBJECT((short)0x4d, "aput-object", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
10870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    APUT_BOOLEAN((short)0x4e, "aput-boolean", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
10970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    APUT_BYTE((short)0x4f, "aput-byte", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
11070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    APUT_CHAR((short)0x50, "aput-char", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
11170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    APUT_SHORT((short)0x51, "aput-short", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
11270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IGET((short)0x52, "iget", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
11370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IGET_WIDE((short)0x53, "iget-wide", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
11470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IGET_OBJECT((short)0x54, "iget-object", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
11570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IGET_BOOLEAN((short)0x55, "iget-boolean", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
11670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IGET_BYTE((short)0x56, "iget-byte", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
11770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IGET_CHAR((short)0x57, "iget-char", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
11870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IGET_SHORT((short)0x58, "iget-short", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
11970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IPUT((short)0x59, "iput", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
12070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IPUT_WIDE((short)0x5a, "iput-wide", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
12170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IPUT_OBJECT((short)0x5b, "iput-object", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
12270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IPUT_BOOLEAN((short)0x5c, "iput-boolean", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
12370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IPUT_BYTE((short)0x5d, "iput-byte", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
12470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IPUT_CHAR((short)0x5e, "iput-char", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
12570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IPUT_SHORT((short)0x5f, "iput-short", ReferenceType.FIELD, Format.Format22c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
12670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SGET((short)0x60, "sget", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
12770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SGET_WIDE((short)0x61, "sget-wide", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
12870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SGET_OBJECT((short)0x62, "sget-object", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
12970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SGET_BOOLEAN((short)0x63, "sget-boolean", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
13070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SGET_BYTE((short)0x64, "sget-byte", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
13170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SGET_CHAR((short)0x65, "sget-char", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
13270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SGET_SHORT((short)0x66, "sget-short", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
13370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SPUT((short)0x67, "sput", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
13470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SPUT_WIDE((short)0x68, "sput-wide", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
13570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SPUT_OBJECT((short)0x69, "sput-object", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
13670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SPUT_BOOLEAN((short)0x6a, "sput-boolean", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
13770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SPUT_BYTE((short)0x6b, "sput-byte", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
13870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SPUT_CHAR((short)0x6c, "sput-char", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
13970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SPUT_SHORT((short)0x6d, "sput-short", ReferenceType.FIELD, Format.Format21c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
14070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_VIRTUAL((short)0x6e, "invoke-virtual", ReferenceType.METHOD, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
14170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_SUPER((short)0x6f, "invoke-super", ReferenceType.METHOD, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
14270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_DIRECT((short)0x70, "invoke-direct", ReferenceType.METHOD, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT | Opcode.CAN_INITIALIZE_REFERENCE),
14370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_STATIC((short)0x71, "invoke-static", ReferenceType.METHOD, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
14470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_INTERFACE((short)0x72, "invoke-interface", ReferenceType.METHOD, Format.Format35c, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
14570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_VIRTUAL_RANGE((short)0x74, "invoke-virtual/range", ReferenceType.METHOD, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
14670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_SUPER_RANGE((short)0x75, "invoke-super/range", ReferenceType.METHOD, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
14770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_DIRECT_RANGE((short)0x76, "invoke-direct/range", ReferenceType.METHOD, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT | Opcode.CAN_INITIALIZE_REFERENCE),
14870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_STATIC_RANGE((short)0x77, "invoke-static/range", ReferenceType.METHOD, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
14970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_INTERFACE_RANGE((short)0x78, "invoke-interface/range", ReferenceType.METHOD, Format.Format3rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
15070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    NEG_INT((short)0x7b, "neg-int", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
15170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    NOT_INT((short)0x7c, "not-int", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
15270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    NEG_LONG((short)0x7d, "neg-long", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
15370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    NOT_LONG((short)0x7e, "not-long", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
15470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    NEG_FLOAT((short)0x7f, "neg-float", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
15570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    NEG_DOUBLE((short)0x80, "neg-double", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
15670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INT_TO_LONG((short)0x81, "int-to-long", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
15770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INT_TO_FLOAT((short)0x82, "int-to-float", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
15870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INT_TO_DOUBLE((short)0x83, "int-to-double", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
15970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    LONG_TO_INT((short)0x84, "long-to-int", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
16070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    LONG_TO_FLOAT((short)0x85, "long-to-float", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
16170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    LONG_TO_DOUBLE((short)0x86, "long-to-double", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
16270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    FLOAT_TO_INT((short)0x87, "float-to-int", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
16370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    FLOAT_TO_LONG((short)0x88, "float-to-long", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
16470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    FLOAT_TO_DOUBLE((short)0x89, "float-to-double", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
16570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DOUBLE_TO_INT((short)0x8a, "double-to-int", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
16670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DOUBLE_TO_LONG((short)0x8b, "double-to-long", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
16770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DOUBLE_TO_FLOAT((short)0x8c, "double-to-float", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
16870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INT_TO_BYTE((short)0x8d, "int-to-byte", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
16970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INT_TO_CHAR((short)0x8e, "int-to-char", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
17070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INT_TO_SHORT((short)0x8f, "int-to-short", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
17170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    ADD_INT((short)0x90, "add-int", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
17270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SUB_INT((short)0x91, "sub-int", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
17370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MUL_INT((short)0x92, "mul-int", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
17470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DIV_INT((short)0x93, "div-int", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
17570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    REM_INT((short)0x94, "rem-int", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
17670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AND_INT((short)0x95, "and-int", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
17770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    OR_INT((short)0x96, "or-int", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
17870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    XOR_INT((short)0x97, "xor-int", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
17970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SHL_INT((short)0x98, "shl-int", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
18070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SHR_INT((short)0x99, "shr-int", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
18170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    USHR_INT((short)0x9a, "ushr-int", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
18270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    ADD_LONG((short)0x9b, "add-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
18370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SUB_LONG((short)0x9c, "sub-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
18470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MUL_LONG((short)0x9d, "mul-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
18570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DIV_LONG((short)0x9e, "div-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
18670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    REM_LONG((short)0x9f, "rem-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
18770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AND_LONG((short)0xa0, "and-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
18870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    OR_LONG((short)0xa1, "or-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
18970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    XOR_LONG((short)0xa2, "xor-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
19070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SHL_LONG((short)0xa3, "shl-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
19170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SHR_LONG((short)0xa4, "shr-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
19270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    USHR_LONG((short)0xa5, "ushr-long", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
19370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    ADD_FLOAT((short)0xa6, "add-float", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
19470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SUB_FLOAT((short)0xa7, "sub-float", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
19570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MUL_FLOAT((short)0xa8, "mul-float", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
19670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DIV_FLOAT((short)0xa9, "div-float", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
19770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    REM_FLOAT((short)0xaa, "rem-float", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
19870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    ADD_DOUBLE((short)0xab, "add-double", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
19970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SUB_DOUBLE((short)0xac, "sub-double", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
20070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MUL_DOUBLE((short)0xad, "mul-double", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
20170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DIV_DOUBLE((short)0xae, "div-double", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
20270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    REM_DOUBLE((short)0xaf, "rem-double", ReferenceType.NONE, Format.Format23x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
20370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    ADD_INT_2ADDR((short)0xb0, "add-int/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
20470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SUB_INT_2ADDR((short)0xb1, "sub-int/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
20570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MUL_INT_2ADDR((short)0xb2, "mul-int/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
20670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DIV_INT_2ADDR((short)0xb3, "div-int/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
20770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    REM_INT_2ADDR((short)0xb4, "rem-int/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
20870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AND_INT_2ADDR((short)0xb5, "and-int/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
20970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    OR_INT_2ADDR((short)0xb6, "or-int/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
21070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    XOR_INT_2ADDR((short)0xb7, "xor-int/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
21170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SHL_INT_2ADDR((short)0xb8, "shl-int/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
21270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SHR_INT_2ADDR((short)0xb9, "shr-int/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
21370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    USHR_INT_2ADDR((short)0xba, "ushr-int/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
21470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    ADD_LONG_2ADDR((short)0xbb, "add-long/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
21570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SUB_LONG_2ADDR((short)0xbc, "sub-long/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
21670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MUL_LONG_2ADDR((short)0xbd, "mul-long/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
21770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DIV_LONG_2ADDR((short)0xbe, "div-long/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
21870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    REM_LONG_2ADDR((short)0xbf, "rem-long/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
21970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AND_LONG_2ADDR((short)0xc0, "and-long/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
22070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    OR_LONG_2ADDR((short)0xc1, "or-long/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
22170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    XOR_LONG_2ADDR((short)0xc2, "xor-long/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
22270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SHL_LONG_2ADDR((short)0xc3, "shl-long/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
22370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SHR_LONG_2ADDR((short)0xc4, "shr-long/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
22470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    USHR_LONG_2ADDR((short)0xc5, "ushr-long/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
22570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    ADD_FLOAT_2ADDR((short)0xc6, "add-float/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
22670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SUB_FLOAT_2ADDR((short)0xc7, "sub-float/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
22770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MUL_FLOAT_2ADDR((short)0xc8, "mul-float/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
22870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DIV_FLOAT_2ADDR((short)0xc9, "div-float/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
22970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    REM_FLOAT_2ADDR((short)0xca, "rem-float/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
23070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    ADD_DOUBLE_2ADDR((short)0xcb, "add-double/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
23170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SUB_DOUBLE_2ADDR((short)0xcc, "sub-double/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
23270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MUL_DOUBLE_2ADDR((short)0xcd, "mul-double/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
23370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DIV_DOUBLE_2ADDR((short)0xce, "div-double/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
23470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    REM_DOUBLE_2ADDR((short)0xcf, "rem-double/2addr", ReferenceType.NONE, Format.Format12x, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
23570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    ADD_INT_LIT16((short)0xd0, "add-int/lit16", ReferenceType.NONE, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
23670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    RSUB_INT((short)0xd1, "rsub-int", ReferenceType.NONE, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
23770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MUL_INT_LIT16((short)0xd2, "mul-int/lit16", ReferenceType.NONE, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
23870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DIV_INT_LIT16((short)0xd3, "div-int/lit16", ReferenceType.NONE, Format.Format22s, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
23970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    REM_INT_LIT16((short)0xd4, "rem-int/lit16", ReferenceType.NONE, Format.Format22s, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
24070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AND_INT_LIT16((short)0xd5, "and-int/lit16", ReferenceType.NONE, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
24170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    OR_INT_LIT16((short)0xd6, "or-int/lit16", ReferenceType.NONE, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
24270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    XOR_INT_LIT16((short)0xd7, "xor-int/lit16", ReferenceType.NONE, Format.Format22s, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
24370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    ADD_INT_LIT8((short)0xd8, "add-int/lit8", ReferenceType.NONE, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
24470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    RSUB_INT_LIT8((short)0xd9, "rsub-int/lit8", ReferenceType.NONE, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
24570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    MUL_INT_LIT8((short)0xda, "mul-int/lit8", ReferenceType.NONE, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
24670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    DIV_INT_LIT8((short)0xdb, "div-int/lit8", ReferenceType.NONE, Format.Format22b, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
24770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    REM_INT_LIT8((short)0xdc, "rem-int/lit8", ReferenceType.NONE, Format.Format22b, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
24870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    AND_INT_LIT8((short)0xdd, "and-int/lit8", ReferenceType.NONE, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
24970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    OR_INT_LIT8((short)0xde, "or-int/lit8", ReferenceType.NONE, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
25070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    XOR_INT_LIT8((short)0xdf, "xor-int/lit8", ReferenceType.NONE, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
25170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SHL_INT_LIT8((short)0xe0, "shl-int/lit8", ReferenceType.NONE, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
25270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    SHR_INT_LIT8((short)0xe1, "shr-int/lit8", ReferenceType.NONE, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
25370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    USHR_INT_LIT8((short)0xe2, "ushr-int/lit8", ReferenceType.NONE, Format.Format22b, Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
254c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
25583f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    IGET_VOLATILE((short)0xe3, "iget-volatile", minApi(9), ReferenceType.FIELD, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
25683f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    IPUT_VOLATILE((short)0xe4, "iput-volatile", minApi(9), ReferenceType.FIELD, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
25783f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    SGET_VOLATILE((short)0xe5, "sget-volatile", minApi(9), ReferenceType.FIELD, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
25883f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    SPUT_VOLATILE((short)0xe6, "sput-volatile", minApi(9), ReferenceType.FIELD, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
25983f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    IGET_OBJECT_VOLATILE((short)0xe7, "iget-object-volatile", minApi(9), ReferenceType.FIELD, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
26083f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    IGET_WIDE_VOLATILE((short)0xe8, "iget-wide-volatile", minApi(9), ReferenceType.FIELD, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
26183f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    IPUT_WIDE_VOLATILE((short)0xe9, "iput-wide-volatile", minApi(9), ReferenceType.FIELD, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
26283f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    SGET_WIDE_VOLATILE((short)0xea, "sget-wide-volatile", minApi(9), ReferenceType.FIELD, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER),
26383f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    SPUT_WIDE_VOLATILE((short)0xeb, "sput-wide-volatile", minApi(9), ReferenceType.FIELD, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
26483f77f51aa888998486c0c9ad693047480b060b0Ben Gruver
26583f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    THROW_VERIFICATION_ERROR((short)0xed, "throw-verification-error", minApi(5), ReferenceType.NONE, Format.Format20bc, Opcode.ODEX_ONLY | Opcode.CAN_THROW),
26670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    EXECUTE_INLINE((short)0xee, "execute-inline", ReferenceType.NONE,  Format.Format35mi, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
26783f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    EXECUTE_INLINE_RANGE((short)0xef, "execute-inline/range", minApi(8), ReferenceType.NONE,  Format.Format3rmi,  Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
26883f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    INVOKE_DIRECT_EMPTY((short)0xf0, "invoke-direct-empty", maxApi(13), ReferenceType.METHOD,  Format.Format35c, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT | Opcode.CAN_INITIALIZE_REFERENCE),
26983f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    INVOKE_OBJECT_INIT_RANGE((short)0xf0, "invoke-object-init/range", minApi(14), ReferenceType.METHOD,  Format.Format3rc, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT | Opcode.CAN_INITIALIZE_REFERENCE),
27083f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    RETURN_VOID_BARRIER((short)0xf1, "return-void-barrier", minApi(11), ReferenceType.NONE, Format.Format10x, Opcode.ODEX_ONLY),
27170aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IGET_QUICK((short)0xf2, "iget-quick", ReferenceType.NONE,  Format.Format22cs, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_QUICK | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
27270aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IGET_WIDE_QUICK((short)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),
27370aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IGET_OBJECT_QUICK((short)0xf4, "iget-object-quick", ReferenceType.NONE,  Format.Format22cs, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_QUICK | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
27470aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IPUT_QUICK((short)0xf5, "iput-quick", ReferenceType.NONE,  Format.Format22cs, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_QUICK | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
27570aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IPUT_WIDE_QUICK((short)0xf6, "iput-wide-quick", ReferenceType.NONE,  Format.Format22cs, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_QUICK | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
27670aa787967e18fd782f47a0b5508271637577c30Ben Gruver    IPUT_OBJECT_QUICK((short)0xf7, "iput-object-quick", ReferenceType.NONE,  Format.Format22cs, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_QUICK | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
27770aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_VIRTUAL_QUICK((short)0xf8, "invoke-virtual-quick", ReferenceType.NONE,  Format.Format35ms, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
27870aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_VIRTUAL_QUICK_RANGE((short)0xf9, "invoke-virtual-quick/range", ReferenceType.NONE,  Format.Format3rms, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
27970aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_SUPER_QUICK((short)0xfa, "invoke-super-quick", ReferenceType.NONE,  Format.Format35ms, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
28070aa787967e18fd782f47a0b5508271637577c30Ben Gruver    INVOKE_SUPER_QUICK_RANGE((short)0xfb, "invoke-super-quick/range", ReferenceType.NONE,  Format.Format3rms, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT),
281c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
28283f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    IPUT_OBJECT_VOLATILE((short)0xfc, "iput-object-volatile", minApi(9), ReferenceType.FIELD, Format.Format22c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
28383f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    SGET_OBJECT_VOLATILE((short)0xfd, "sget-object-volatile", minApi(9), ReferenceType.FIELD, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER),
28483f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    SPUT_OBJECT_VOLATILE((short)0xfe, "sput-object-volatile", minApi(9), ReferenceType.FIELD, Format.Format21c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE),
285c307c1887d0c57e2213d5146cedec2307251e9faBen Gruver
286c307c1887d0c57e2213d5146cedec2307251e9faBen Gruver    PACKED_SWITCH_PAYLOAD((short)0x100, "packed-switch-payload", ReferenceType.NONE, Format.PackedSwitchPayload, 0),
287c307c1887d0c57e2213d5146cedec2307251e9faBen Gruver    SPARSE_SWITCH_PAYLOAD((short)0x200, "sparse-switch-payload", ReferenceType.NONE, Format.SparseSwitchPayload, 0),
288c307c1887d0c57e2213d5146cedec2307251e9faBen Gruver    ARRAY_PAYLOAD((short)0x300, "array-payload", ReferenceType.NONE, Format.ArrayPayload, 0);
289c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
290c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    //if the instruction can throw an exception
291c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public static final int CAN_THROW = 0x1;
292c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    //if the instruction is an odex only instruction
293c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public static final int ODEX_ONLY = 0x2;
294c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    //if execution can continue to the next instruction
295c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public static final int CAN_CONTINUE = 0x4;
296c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    //if the instruction sets the "hidden" result register
297c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public static final int SETS_RESULT = 0x8;
298c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    //if the instruction sets the value of it's first register
299c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public static final int SETS_REGISTER = 0x10;
300c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    //if the instruction sets the value of it's first register to a wide type
301c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public static final int SETS_WIDE_REGISTER = 0x20;
302c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    //if the instruction is an odexed iget-quick/iput-quick instruction
303c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public static final int ODEXED_INSTANCE_QUICK = 0x40;
304c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    //if the instruction is an odexed iget-volatile/iput-volatile instruction
305c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public static final int ODEXED_INSTANCE_VOLATILE = 0x80;
306c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    //if the instruction is an odexed sget-volatile/sput-volatile instruction
307c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public static final int ODEXED_STATIC_VOLATILE = 0x100;
308c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    //if the instruction is a jumbo instruction
309c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public static final int JUMBO_OPCODE = 0x200;
310c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    //if the instruction can initialize an uninitialized object reference
311c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public static final int CAN_INITIALIZE_REFERENCE = 0x400;
312c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
31383f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    private static final int ALL_APIS = 0xFFFF0000;
314c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
31583f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    private static int minApi(int api) {
31683f77f51aa888998486c0c9ad693047480b060b0Ben Gruver        return 0xFFFF0000 | (api & 0xFFFF);
317c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
318c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
31983f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    private static int maxApi(int api) {
32001cfa02bfefe2383ef0585433610990b3c0b1f75Ben Gruver        return api << 16;
321c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
322c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
323c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final short value;
324c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final String name;
32583f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    // high 16-bits is the max api, low 16-bits is the min api
32683f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    public final int apiConstraints;
327c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final int referenceType;
328c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final Format format;
329c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final int flags;
330c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
331c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    Opcode(short opcodeValue, String opcodeName, int referenceType, Format format) {
33283f77f51aa888998486c0c9ad693047480b060b0Ben Gruver        this(opcodeValue, opcodeName, ALL_APIS, referenceType, format, 0, (short)-1);
333c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
334c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
335c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    Opcode(short opcodeValue, String opcodeName, int referenceType, Format format, int flags) {
33683f77f51aa888998486c0c9ad693047480b060b0Ben Gruver        this(opcodeValue, opcodeName, ALL_APIS, referenceType, format, flags, (short)-1);
337c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
338c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
339c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    Opcode(short opcodeValue, String opcodeName, int referenceType, Format format, int flags, short jumboOpcodeValue) {
34083f77f51aa888998486c0c9ad693047480b060b0Ben Gruver        this(opcodeValue, opcodeName, ALL_APIS, referenceType, format, flags, jumboOpcodeValue);
34183f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    }
34283f77f51aa888998486c0c9ad693047480b060b0Ben Gruver
34383f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    Opcode(short opcodeValue, String opcodeName, int apiConstraints, int referenceType, Format format) {
34483f77f51aa888998486c0c9ad693047480b060b0Ben Gruver        this(opcodeValue, opcodeName, apiConstraints, referenceType, format, 0, (short)-1);
34583f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    }
34683f77f51aa888998486c0c9ad693047480b060b0Ben Gruver
34783f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    Opcode(short opcodeValue, String opcodeName, int apiConstraints, int referenceType, Format format, int flags) {
34883f77f51aa888998486c0c9ad693047480b060b0Ben Gruver        this(opcodeValue, opcodeName, apiConstraints, referenceType, format, flags, (short)-1);
34983f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    }
35083f77f51aa888998486c0c9ad693047480b060b0Ben Gruver
35183f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    Opcode(short opcodeValue, String opcodeName, int apiConstraints, int referenceType, Format format, int flags,
35283f77f51aa888998486c0c9ad693047480b060b0Ben Gruver           short jumboOpcodeValue) {
353c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        this.value = opcodeValue;
354c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        this.name = opcodeName;
35583f77f51aa888998486c0c9ad693047480b060b0Ben Gruver        this.apiConstraints = apiConstraints;
356c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        this.referenceType = referenceType;
357c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        this.format = format;
358c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        this.flags = flags;
35983f77f51aa888998486c0c9ad693047480b060b0Ben Gruver        // TODO: implement jumbo opcodes for dexlib2 and uncomment
36083f77f51aa888998486c0c9ad693047480b060b0Ben Gruver        // this.jumboOpcode = jumboOpcodeValue;
36183f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    }
36283f77f51aa888998486c0c9ad693047480b060b0Ben Gruver
36383f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    /**
36483f77f51aa888998486c0c9ad693047480b060b0Ben Gruver     * @return the minimum api level that can use this opcode (inclusive)
36583f77f51aa888998486c0c9ad693047480b060b0Ben Gruver     */
36683f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    public int getMinApi() {
36783f77f51aa888998486c0c9ad693047480b060b0Ben Gruver        return apiConstraints & 0xFFFF;
36883f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    }
36983f77f51aa888998486c0c9ad693047480b060b0Ben Gruver
37083f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    /**
37183f77f51aa888998486c0c9ad693047480b060b0Ben Gruver     * @return the maximum api level that can to use this opcode (inclusive)
37283f77f51aa888998486c0c9ad693047480b060b0Ben Gruver     */
37383f77f51aa888998486c0c9ad693047480b060b0Ben Gruver    public int getMaxApi() {
37483f77f51aa888998486c0c9ad693047480b060b0Ben Gruver        return apiConstraints >>> 16;
375c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
376c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
377c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final boolean canThrow() {
378c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        return (flags & CAN_THROW) != 0;
379c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
380c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
381c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final boolean odexOnly() {
382c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        return (flags & ODEX_ONLY) != 0;
383c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
384c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
385c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final boolean canContinue() {
386c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        return (flags & CAN_CONTINUE) != 0;
387c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
388c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
389c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final boolean setsResult() {
390c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        return (flags & SETS_RESULT) != 0;
391c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
392c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
393c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final boolean setsRegister() {
394c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        return (flags & SETS_REGISTER) != 0;
395c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
396c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
397c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final boolean setsWideRegister() {
398c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        return (flags & SETS_WIDE_REGISTER) != 0;
399c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
400c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
401c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final boolean isOdexedInstanceQuick() {
402c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        return (flags & ODEXED_INSTANCE_QUICK) != 0;
403c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
404c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
405c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final boolean isOdexedInstanceVolatile() {
406c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        return (flags & ODEXED_INSTANCE_VOLATILE) != 0;
407c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
408c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
409c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final boolean isOdexedStaticVolatile() {
410c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        return (flags & ODEXED_STATIC_VOLATILE) != 0;
411c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
412c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
413c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final boolean isJumboOpcode() {
414c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        return (flags & JUMBO_OPCODE) != 0;
415c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
416c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver
417c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    public final boolean canInitializeReference() {
418c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver        return (flags & CAN_INITIALIZE_REFERENCE) != 0;
419c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver    }
420c05d8d40e0160037cd2294dbcd82ba3101d9a834Ben Gruver}
421