diff options
| author | jeffhao <jeffhao@google.com> | 2011-01-04 14:18:54 -0800 |
|---|---|---|
| committer | jeffhao <jeffhao@google.com> | 2011-01-07 10:45:59 -0800 |
| commit | 71eee1f0c2eb514585fdbee16730c9c2209e8f68 (patch) | |
| tree | b9b63713a5b89aaf923c04b73358b29b1b584251 /libdex | |
| parent | b4d9186dbb1b1ac4a497f33e8427333816ca2263 (diff) | |
| download | android_dalvik-71eee1f0c2eb514585fdbee16730c9c2209e8f68.tar.gz android_dalvik-71eee1f0c2eb514585fdbee16730c9c2209e8f68.tar.bz2 android_dalvik-71eee1f0c2eb514585fdbee16730c9c2209e8f68.zip | |
Added vm support for new jumbo opcodes.
This enables jumbo opcodes by default, and they will get used by the
current build without modification. Support has been added for arm, x86,
and the portable interpreter. x86-atom support is on the TODO list. This
commit also includes a test for the new jumbo opcodes.
Change-Id: Ic3f1b41b51645861c5196f76aaf0e96e727ea537
Diffstat (limited to 'libdex')
| -rw-r--r-- | libdex/DexOpcodes.c | 256 | ||||
| -rw-r--r-- | libdex/DexOpcodes.h | 516 | ||||
| -rw-r--r-- | libdex/InstrUtils.c | 399 | ||||
| -rw-r--r-- | libdex/InstrUtils.h | 1 |
4 files changed, 1168 insertions, 4 deletions
diff --git a/libdex/DexOpcodes.c b/libdex/DexOpcodes.c index 0cbc51812..869e63e31 100644 --- a/libdex/DexOpcodes.c +++ b/libdex/DexOpcodes.c @@ -286,6 +286,262 @@ static const char* gOpNames[kNumPackedOpcodes] = { "+sget-object-volatile", "+sput-object-volatile", "dispatch-ff", + "const-class/jumbo", + "check-cast/jumbo", + "instance-of/jumbo", + "new-instance/jumbo", + "new-array/jumbo", + "filled-new-array/jumbo", + "iget/jumbo", + "iget-wide/jumbo", + "iget-object/jumbo", + "iget-boolean/jumbo", + "iget-byte/jumbo", + "iget-char/jumbo", + "iget-short/jumbo", + "iput/jumbo", + "iput-wide/jumbo", + "iput-object/jumbo", + "iput-boolean/jumbo", + "iput-byte/jumbo", + "iput-char/jumbo", + "iput-short/jumbo", + "sget/jumbo", + "sget-wide/jumbo", + "sget-object/jumbo", + "sget-boolean/jumbo", + "sget-byte/jumbo", + "sget-char/jumbo", + "sget-short/jumbo", + "sput/jumbo", + "sput-wide/jumbo", + "sput-object/jumbo", + "sput-boolean/jumbo", + "sput-byte/jumbo", + "sput-char/jumbo", + "sput-short/jumbo", + "invoke-virtual/jumbo", + "invoke-super/jumbo", + "invoke-direct/jumbo", + "invoke-static/jumbo", + "invoke-interface/jumbo", + "unused-27ff", + "unused-28ff", + "unused-29ff", + "unused-2aff", + "unused-2bff", + "unused-2cff", + "unused-2dff", + "unused-2eff", + "unused-2fff", + "unused-30ff", + "unused-31ff", + "unused-32ff", + "unused-33ff", + "unused-34ff", + "unused-35ff", + "unused-36ff", + "unused-37ff", + "unused-38ff", + "unused-39ff", + "unused-3aff", + "unused-3bff", + "unused-3cff", + "unused-3dff", + "unused-3eff", + "unused-3fff", + "unused-40ff", + "unused-41ff", + "unused-42ff", + "unused-43ff", + "unused-44ff", + "unused-45ff", + "unused-46ff", + "unused-47ff", + "unused-48ff", + "unused-49ff", + "unused-4aff", + "unused-4bff", + "unused-4cff", + "unused-4dff", + "unused-4eff", + "unused-4fff", + "unused-50ff", + "unused-51ff", + "unused-52ff", + "unused-53ff", + "unused-54ff", + "unused-55ff", + "unused-56ff", + "unused-57ff", + "unused-58ff", + "unused-59ff", + "unused-5aff", + "unused-5bff", + "unused-5cff", + "unused-5dff", + "unused-5eff", + "unused-5fff", + "unused-60ff", + "unused-61ff", + "unused-62ff", + "unused-63ff", + "unused-64ff", + "unused-65ff", + "unused-66ff", + "unused-67ff", + "unused-68ff", + "unused-69ff", + "unused-6aff", + "unused-6bff", + "unused-6cff", + "unused-6dff", + "unused-6eff", + "unused-6fff", + "unused-70ff", + "unused-71ff", + "unused-72ff", + "unused-73ff", + "unused-74ff", + "unused-75ff", + "unused-76ff", + "unused-77ff", + "unused-78ff", + "unused-79ff", + "unused-7aff", + "unused-7bff", + "unused-7cff", + "unused-7dff", + "unused-7eff", + "unused-7fff", + "unused-80ff", + "unused-81ff", + "unused-82ff", + "unused-83ff", + "unused-84ff", + "unused-85ff", + "unused-86ff", + "unused-87ff", + "unused-88ff", + "unused-89ff", + "unused-8aff", + "unused-8bff", + "unused-8cff", + "unused-8dff", + "unused-8eff", + "unused-8fff", + "unused-90ff", + "unused-91ff", + "unused-92ff", + "unused-93ff", + "unused-94ff", + "unused-95ff", + "unused-96ff", + "unused-97ff", + "unused-98ff", + "unused-99ff", + "unused-9aff", + "unused-9bff", + "unused-9cff", + "unused-9dff", + "unused-9eff", + "unused-9fff", + "unused-a0ff", + "unused-a1ff", + "unused-a2ff", + "unused-a3ff", + "unused-a4ff", + "unused-a5ff", + "unused-a6ff", + "unused-a7ff", + "unused-a8ff", + "unused-a9ff", + "unused-aaff", + "unused-abff", + "unused-acff", + "unused-adff", + "unused-aeff", + "unused-afff", + "unused-b0ff", + "unused-b1ff", + "unused-b2ff", + "unused-b3ff", + "unused-b4ff", + "unused-b5ff", + "unused-b6ff", + "unused-b7ff", + "unused-b8ff", + "unused-b9ff", + "unused-baff", + "unused-bbff", + "unused-bcff", + "unused-bdff", + "unused-beff", + "unused-bfff", + "unused-c0ff", + "unused-c1ff", + "unused-c2ff", + "unused-c3ff", + "unused-c4ff", + "unused-c5ff", + "unused-c6ff", + "unused-c7ff", + "unused-c8ff", + "unused-c9ff", + "unused-caff", + "unused-cbff", + "unused-ccff", + "unused-cdff", + "unused-ceff", + "unused-cfff", + "unused-d0ff", + "unused-d1ff", + "unused-d2ff", + "unused-d3ff", + "unused-d4ff", + "unused-d5ff", + "unused-d6ff", + "unused-d7ff", + "unused-d8ff", + "unused-d9ff", + "unused-daff", + "unused-dbff", + "unused-dcff", + "unused-ddff", + "unused-deff", + "unused-dfff", + "unused-e0ff", + "unused-e1ff", + "unused-e2ff", + "unused-e3ff", + "unused-e4ff", + "unused-e5ff", + "unused-e6ff", + "unused-e7ff", + "unused-e8ff", + "unused-e9ff", + "unused-eaff", + "unused-ebff", + "unused-ecff", + "unused-edff", + "unused-eeff", + "unused-efff", + "unused-f0ff", + "unused-f1ff", + "unused-f2ff", + "unused-f3ff", + "unused-f4ff", + "unused-f5ff", + "unused-f6ff", + "unused-f7ff", + "unused-f8ff", + "unused-f9ff", + "unused-faff", + "unused-fbff", + "unused-fcff", + "unused-fdff", + "unused-feff", + "^throw-verification-error/jumbo", // END(libdex-opcode-names) }; diff --git a/libdex/DexOpcodes.h b/libdex/DexOpcodes.h index fe9e9d1e1..b8d4cb0de 100644 --- a/libdex/DexOpcodes.h +++ b/libdex/DexOpcodes.h @@ -40,8 +40,8 @@ * extended opcodes. */ // BEGIN(libdex-maximum-values); GENERATED AUTOMATICALLY BY opcode-gen -#define kMaxOpcodeValue 0xff -#define kNumPackedOpcodes 0x100 +#define kMaxOpcodeValue 0xffff +#define kNumPackedOpcodes 0x200 // END(libdex-maximum-values); GENERATED AUTOMATICALLY BY opcode-gen /* @@ -324,6 +324,262 @@ typedef enum Opcode { OP_SGET_OBJECT_VOLATILE = 0xfd, OP_SPUT_OBJECT_VOLATILE = 0xfe, OP_DISPATCH_FF = 0xff, + OP_CONST_CLASS_JUMBO = 0x100, + OP_CHECK_CAST_JUMBO = 0x101, + OP_INSTANCE_OF_JUMBO = 0x102, + OP_NEW_INSTANCE_JUMBO = 0x103, + OP_NEW_ARRAY_JUMBO = 0x104, + OP_FILLED_NEW_ARRAY_JUMBO = 0x105, + OP_IGET_JUMBO = 0x106, + OP_IGET_WIDE_JUMBO = 0x107, + OP_IGET_OBJECT_JUMBO = 0x108, + OP_IGET_BOOLEAN_JUMBO = 0x109, + OP_IGET_BYTE_JUMBO = 0x10a, + OP_IGET_CHAR_JUMBO = 0x10b, + OP_IGET_SHORT_JUMBO = 0x10c, + OP_IPUT_JUMBO = 0x10d, + OP_IPUT_WIDE_JUMBO = 0x10e, + OP_IPUT_OBJECT_JUMBO = 0x10f, + OP_IPUT_BOOLEAN_JUMBO = 0x110, + OP_IPUT_BYTE_JUMBO = 0x111, + OP_IPUT_CHAR_JUMBO = 0x112, + OP_IPUT_SHORT_JUMBO = 0x113, + OP_SGET_JUMBO = 0x114, + OP_SGET_WIDE_JUMBO = 0x115, + OP_SGET_OBJECT_JUMBO = 0x116, + OP_SGET_BOOLEAN_JUMBO = 0x117, + OP_SGET_BYTE_JUMBO = 0x118, + OP_SGET_CHAR_JUMBO = 0x119, + OP_SGET_SHORT_JUMBO = 0x11a, + OP_SPUT_JUMBO = 0x11b, + OP_SPUT_WIDE_JUMBO = 0x11c, + OP_SPUT_OBJECT_JUMBO = 0x11d, + OP_SPUT_BOOLEAN_JUMBO = 0x11e, + OP_SPUT_BYTE_JUMBO = 0x11f, + OP_SPUT_CHAR_JUMBO = 0x120, + OP_SPUT_SHORT_JUMBO = 0x121, + OP_INVOKE_VIRTUAL_JUMBO = 0x122, + OP_INVOKE_SUPER_JUMBO = 0x123, + OP_INVOKE_DIRECT_JUMBO = 0x124, + OP_INVOKE_STATIC_JUMBO = 0x125, + OP_INVOKE_INTERFACE_JUMBO = 0x126, + OP_UNUSED_27FF = 0x127, + OP_UNUSED_28FF = 0x128, + OP_UNUSED_29FF = 0x129, + OP_UNUSED_2AFF = 0x12a, + OP_UNUSED_2BFF = 0x12b, + OP_UNUSED_2CFF = 0x12c, + OP_UNUSED_2DFF = 0x12d, + OP_UNUSED_2EFF = 0x12e, + OP_UNUSED_2FFF = 0x12f, + OP_UNUSED_30FF = 0x130, + OP_UNUSED_31FF = 0x131, + OP_UNUSED_32FF = 0x132, + OP_UNUSED_33FF = 0x133, + OP_UNUSED_34FF = 0x134, + OP_UNUSED_35FF = 0x135, + OP_UNUSED_36FF = 0x136, + OP_UNUSED_37FF = 0x137, + OP_UNUSED_38FF = 0x138, + OP_UNUSED_39FF = 0x139, + OP_UNUSED_3AFF = 0x13a, + OP_UNUSED_3BFF = 0x13b, + OP_UNUSED_3CFF = 0x13c, + OP_UNUSED_3DFF = 0x13d, + OP_UNUSED_3EFF = 0x13e, + OP_UNUSED_3FFF = 0x13f, + OP_UNUSED_40FF = 0x140, + OP_UNUSED_41FF = 0x141, + OP_UNUSED_42FF = 0x142, + OP_UNUSED_43FF = 0x143, + OP_UNUSED_44FF = 0x144, + OP_UNUSED_45FF = 0x145, + OP_UNUSED_46FF = 0x146, + OP_UNUSED_47FF = 0x147, + OP_UNUSED_48FF = 0x148, + OP_UNUSED_49FF = 0x149, + OP_UNUSED_4AFF = 0x14a, + OP_UNUSED_4BFF = 0x14b, + OP_UNUSED_4CFF = 0x14c, + OP_UNUSED_4DFF = 0x14d, + OP_UNUSED_4EFF = 0x14e, + OP_UNUSED_4FFF = 0x14f, + OP_UNUSED_50FF = 0x150, + OP_UNUSED_51FF = 0x151, + OP_UNUSED_52FF = 0x152, + OP_UNUSED_53FF = 0x153, + OP_UNUSED_54FF = 0x154, + OP_UNUSED_55FF = 0x155, + OP_UNUSED_56FF = 0x156, + OP_UNUSED_57FF = 0x157, + OP_UNUSED_58FF = 0x158, + OP_UNUSED_59FF = 0x159, + OP_UNUSED_5AFF = 0x15a, + OP_UNUSED_5BFF = 0x15b, + OP_UNUSED_5CFF = 0x15c, + OP_UNUSED_5DFF = 0x15d, + OP_UNUSED_5EFF = 0x15e, + OP_UNUSED_5FFF = 0x15f, + OP_UNUSED_60FF = 0x160, + OP_UNUSED_61FF = 0x161, + OP_UNUSED_62FF = 0x162, + OP_UNUSED_63FF = 0x163, + OP_UNUSED_64FF = 0x164, + OP_UNUSED_65FF = 0x165, + OP_UNUSED_66FF = 0x166, + OP_UNUSED_67FF = 0x167, + OP_UNUSED_68FF = 0x168, + OP_UNUSED_69FF = 0x169, + OP_UNUSED_6AFF = 0x16a, + OP_UNUSED_6BFF = 0x16b, + OP_UNUSED_6CFF = 0x16c, + OP_UNUSED_6DFF = 0x16d, + OP_UNUSED_6EFF = 0x16e, + OP_UNUSED_6FFF = 0x16f, + OP_UNUSED_70FF = 0x170, + OP_UNUSED_71FF = 0x171, + OP_UNUSED_72FF = 0x172, + OP_UNUSED_73FF = 0x173, + OP_UNUSED_74FF = 0x174, + OP_UNUSED_75FF = 0x175, + OP_UNUSED_76FF = 0x176, + OP_UNUSED_77FF = 0x177, + OP_UNUSED_78FF = 0x178, + OP_UNUSED_79FF = 0x179, + OP_UNUSED_7AFF = 0x17a, + OP_UNUSED_7BFF = 0x17b, + OP_UNUSED_7CFF = 0x17c, + OP_UNUSED_7DFF = 0x17d, + OP_UNUSED_7EFF = 0x17e, + OP_UNUSED_7FFF = 0x17f, + OP_UNUSED_80FF = 0x180, + OP_UNUSED_81FF = 0x181, + OP_UNUSED_82FF = 0x182, + OP_UNUSED_83FF = 0x183, + OP_UNUSED_84FF = 0x184, + OP_UNUSED_85FF = 0x185, + OP_UNUSED_86FF = 0x186, + OP_UNUSED_87FF = 0x187, + OP_UNUSED_88FF = 0x188, + OP_UNUSED_89FF = 0x189, + OP_UNUSED_8AFF = 0x18a, + OP_UNUSED_8BFF = 0x18b, + OP_UNUSED_8CFF = 0x18c, + OP_UNUSED_8DFF = 0x18d, + OP_UNUSED_8EFF = 0x18e, + OP_UNUSED_8FFF = 0x18f, + OP_UNUSED_90FF = 0x190, + OP_UNUSED_91FF = 0x191, + OP_UNUSED_92FF = 0x192, + OP_UNUSED_93FF = 0x193, + OP_UNUSED_94FF = 0x194, + OP_UNUSED_95FF = 0x195, + OP_UNUSED_96FF = 0x196, + OP_UNUSED_97FF = 0x197, + OP_UNUSED_98FF = 0x198, + OP_UNUSED_99FF = 0x199, + OP_UNUSED_9AFF = 0x19a, + OP_UNUSED_9BFF = 0x19b, + OP_UNUSED_9CFF = 0x19c, + OP_UNUSED_9DFF = 0x19d, + OP_UNUSED_9EFF = 0x19e, + OP_UNUSED_9FFF = 0x19f, + OP_UNUSED_A0FF = 0x1a0, + OP_UNUSED_A1FF = 0x1a1, + OP_UNUSED_A2FF = 0x1a2, + OP_UNUSED_A3FF = 0x1a3, + OP_UNUSED_A4FF = 0x1a4, + OP_UNUSED_A5FF = 0x1a5, + OP_UNUSED_A6FF = 0x1a6, + OP_UNUSED_A7FF = 0x1a7, + OP_UNUSED_A8FF = 0x1a8, + OP_UNUSED_A9FF = 0x1a9, + OP_UNUSED_AAFF = 0x1aa, + OP_UNUSED_ABFF = 0x1ab, + OP_UNUSED_ACFF = 0x1ac, + OP_UNUSED_ADFF = 0x1ad, + OP_UNUSED_AEFF = 0x1ae, + OP_UNUSED_AFFF = 0x1af, + OP_UNUSED_B0FF = 0x1b0, + OP_UNUSED_B1FF = 0x1b1, + OP_UNUSED_B2FF = 0x1b2, + OP_UNUSED_B3FF = 0x1b3, + OP_UNUSED_B4FF = 0x1b4, + OP_UNUSED_B5FF = 0x1b5, + OP_UNUSED_B6FF = 0x1b6, + OP_UNUSED_B7FF = 0x1b7, + OP_UNUSED_B8FF = 0x1b8, + OP_UNUSED_B9FF = 0x1b9, + OP_UNUSED_BAFF = 0x1ba, + OP_UNUSED_BBFF = 0x1bb, + OP_UNUSED_BCFF = 0x1bc, + OP_UNUSED_BDFF = 0x1bd, + OP_UNUSED_BEFF = 0x1be, + OP_UNUSED_BFFF = 0x1bf, + OP_UNUSED_C0FF = 0x1c0, + OP_UNUSED_C1FF = 0x1c1, + OP_UNUSED_C2FF = 0x1c2, + OP_UNUSED_C3FF = 0x1c3, + OP_UNUSED_C4FF = 0x1c4, + OP_UNUSED_C5FF = 0x1c5, + OP_UNUSED_C6FF = 0x1c6, + OP_UNUSED_C7FF = 0x1c7, + OP_UNUSED_C8FF = 0x1c8, + OP_UNUSED_C9FF = 0x1c9, + OP_UNUSED_CAFF = 0x1ca, + OP_UNUSED_CBFF = 0x1cb, + OP_UNUSED_CCFF = 0x1cc, + OP_UNUSED_CDFF = 0x1cd, + OP_UNUSED_CEFF = 0x1ce, + OP_UNUSED_CFFF = 0x1cf, + OP_UNUSED_D0FF = 0x1d0, + OP_UNUSED_D1FF = 0x1d1, + OP_UNUSED_D2FF = 0x1d2, + OP_UNUSED_D3FF = 0x1d3, + OP_UNUSED_D4FF = 0x1d4, + OP_UNUSED_D5FF = 0x1d5, + OP_UNUSED_D6FF = 0x1d6, + OP_UNUSED_D7FF = 0x1d7, + OP_UNUSED_D8FF = 0x1d8, + OP_UNUSED_D9FF = 0x1d9, + OP_UNUSED_DAFF = 0x1da, + OP_UNUSED_DBFF = 0x1db, + OP_UNUSED_DCFF = 0x1dc, + OP_UNUSED_DDFF = 0x1dd, + OP_UNUSED_DEFF = 0x1de, + OP_UNUSED_DFFF = 0x1df, + OP_UNUSED_E0FF = 0x1e0, + OP_UNUSED_E1FF = 0x1e1, + OP_UNUSED_E2FF = 0x1e2, + OP_UNUSED_E3FF = 0x1e3, + OP_UNUSED_E4FF = 0x1e4, + OP_UNUSED_E5FF = 0x1e5, + OP_UNUSED_E6FF = 0x1e6, + OP_UNUSED_E7FF = 0x1e7, + OP_UNUSED_E8FF = 0x1e8, + OP_UNUSED_E9FF = 0x1e9, + OP_UNUSED_EAFF = 0x1ea, + OP_UNUSED_EBFF = 0x1eb, + OP_UNUSED_ECFF = 0x1ec, + OP_UNUSED_EDFF = 0x1ed, + OP_UNUSED_EEFF = 0x1ee, + OP_UNUSED_EFFF = 0x1ef, + OP_UNUSED_F0FF = 0x1f0, + OP_UNUSED_F1FF = 0x1f1, + OP_UNUSED_F2FF = 0x1f2, + OP_UNUSED_F3FF = 0x1f3, + OP_UNUSED_F4FF = 0x1f4, + OP_UNUSED_F5FF = 0x1f5, + OP_UNUSED_F6FF = 0x1f6, + OP_UNUSED_F7FF = 0x1f7, + OP_UNUSED_F8FF = 0x1f8, + OP_UNUSED_F9FF = 0x1f9, + OP_UNUSED_FAFF = 0x1fa, + OP_UNUSED_FBFF = 0x1fb, + OP_UNUSED_FCFF = 0x1fc, + OP_UNUSED_FDFF = 0x1fd, + OP_UNUSED_FEFF = 0x1fe, + OP_THROW_VERIFICATION_ERROR_JUMBO = 0x1ff, // END(libdex-opcode-enum) } Opcode; @@ -590,6 +846,262 @@ typedef enum Opcode { H(OP_SGET_OBJECT_VOLATILE), \ H(OP_SPUT_OBJECT_VOLATILE), \ H(OP_DISPATCH_FF), \ + H(OP_CONST_CLASS_JUMBO), \ + H(OP_CHECK_CAST_JUMBO), \ + H(OP_INSTANCE_OF_JUMBO), \ + H(OP_NEW_INSTANCE_JUMBO), \ + H(OP_NEW_ARRAY_JUMBO), \ + H(OP_FILLED_NEW_ARRAY_JUMBO), \ + H(OP_IGET_JUMBO), \ + H(OP_IGET_WIDE_JUMBO), \ + H(OP_IGET_OBJECT_JUMBO), \ + H(OP_IGET_BOOLEAN_JUMBO), \ + H(OP_IGET_BYTE_JUMBO), \ + H(OP_IGET_CHAR_JUMBO), \ + H(OP_IGET_SHORT_JUMBO), \ + H(OP_IPUT_JUMBO), \ + H(OP_IPUT_WIDE_JUMBO), \ + H(OP_IPUT_OBJECT_JUMBO), \ + H(OP_IPUT_BOOLEAN_JUMBO), \ + H(OP_IPUT_BYTE_JUMBO), \ + H(OP_IPUT_CHAR_JUMBO), \ + H(OP_IPUT_SHORT_JUMBO), \ + H(OP_SGET_JUMBO), \ + H(OP_SGET_WIDE_JUMBO), \ + H(OP_SGET_OBJECT_JUMBO), \ + H(OP_SGET_BOOLEAN_JUMBO), \ + H(OP_SGET_BYTE_JUMBO), \ + H(OP_SGET_CHAR_JUMBO), \ + H(OP_SGET_SHORT_JUMBO), \ + H(OP_SPUT_JUMBO), \ + H(OP_SPUT_WIDE_JUMBO), \ + H(OP_SPUT_OBJECT_JUMBO), \ + H(OP_SPUT_BOOLEAN_JUMBO), \ + H(OP_SPUT_BYTE_JUMBO), \ + H(OP_SPUT_CHAR_JUMBO), \ + H(OP_SPUT_SHORT_JUMBO), \ + H(OP_INVOKE_VIRTUAL_JUMBO), \ + H(OP_INVOKE_SUPER_JUMBO), \ + H(OP_INVOKE_DIRECT_JUMBO), \ + H(OP_INVOKE_STATIC_JUMBO), \ + H(OP_INVOKE_INTERFACE_JUMBO), \ + H(OP_UNUSED_27FF), \ + H(OP_UNUSED_28FF), \ + H(OP_UNUSED_29FF), \ + H(OP_UNUSED_2AFF), \ + H(OP_UNUSED_2BFF), \ + H(OP_UNUSED_2CFF), \ + H(OP_UNUSED_2DFF), \ + H(OP_UNUSED_2EFF), \ + H(OP_UNUSED_2FFF), \ + H(OP_UNUSED_30FF), \ + H(OP_UNUSED_31FF), \ + H(OP_UNUSED_32FF), \ + H(OP_UNUSED_33FF), \ + H(OP_UNUSED_34FF), \ + H(OP_UNUSED_35FF), \ + H(OP_UNUSED_36FF), \ + H(OP_UNUSED_37FF), \ + H(OP_UNUSED_38FF), \ + H(OP_UNUSED_39FF), \ + H(OP_UNUSED_3AFF), \ + H(OP_UNUSED_3BFF), \ + H(OP_UNUSED_3CFF), \ + H(OP_UNUSED_3DFF), \ + H(OP_UNUSED_3EFF), \ + H(OP_UNUSED_3FFF), \ + H(OP_UNUSED_40FF), \ + H(OP_UNUSED_41FF), \ + H(OP_UNUSED_42FF), \ + H(OP_UNUSED_43FF), \ + H(OP_UNUSED_44FF), \ + H(OP_UNUSED_45FF), \ + H(OP_UNUSED_46FF), \ + H(OP_UNUSED_47FF), \ + H(OP_UNUSED_48FF), \ + H(OP_UNUSED_49FF), \ + H(OP_UNUSED_4AFF), \ + H(OP_UNUSED_4BFF), \ + H(OP_UNUSED_4CFF), \ + H(OP_UNUSED_4DFF), \ + H(OP_UNUSED_4EFF), \ + H(OP_UNUSED_4FFF), \ + H(OP_UNUSED_50FF), \ + H(OP_UNUSED_51FF), \ + H(OP_UNUSED_52FF), \ + H(OP_UNUSED_53FF), \ + H(OP_UNUSED_54FF), \ + H(OP_UNUSED_55FF), \ + H(OP_UNUSED_56FF), \ + H(OP_UNUSED_57FF), \ + H(OP_UNUSED_58FF), \ + H(OP_UNUSED_59FF), \ + H(OP_UNUSED_5AFF), \ + H(OP_UNUSED_5BFF), \ + H(OP_UNUSED_5CFF), \ + H(OP_UNUSED_5DFF), \ + H(OP_UNUSED_5EFF), \ + H(OP_UNUSED_5FFF), \ + H(OP_UNUSED_60FF), \ + H(OP_UNUSED_61FF), \ + H(OP_UNUSED_62FF), \ + H(OP_UNUSED_63FF), \ + H(OP_UNUSED_64FF), \ + H(OP_UNUSED_65FF), \ + H(OP_UNUSED_66FF), \ + H(OP_UNUSED_67FF), \ + H(OP_UNUSED_68FF), \ + H(OP_UNUSED_69FF), \ + H(OP_UNUSED_6AFF), \ + H(OP_UNUSED_6BFF), \ + H(OP_UNUSED_6CFF), \ + H(OP_UNUSED_6DFF), \ + H(OP_UNUSED_6EFF), \ + H(OP_UNUSED_6FFF), \ + H(OP_UNUSED_70FF), \ + H(OP_UNUSED_71FF), \ + H(OP_UNUSED_72FF), \ + H(OP_UNUSED_73FF), \ + H(OP_UNUSED_74FF), \ + H(OP_UNUSED_75FF), \ + H(OP_UNUSED_76FF), \ + H(OP_UNUSED_77FF), \ + H(OP_UNUSED_78FF), \ + H(OP_UNUSED_79FF), \ + H(OP_UNUSED_7AFF), \ + H(OP_UNUSED_7BFF), \ + H(OP_UNUSED_7CFF), \ + H(OP_UNUSED_7DFF), \ + H(OP_UNUSED_7EFF), \ + H(OP_UNUSED_7FFF), \ + H(OP_UNUSED_80FF), \ + H(OP_UNUSED_81FF), \ + H(OP_UNUSED_82FF), \ + H(OP_UNUSED_83FF), \ + H(OP_UNUSED_84FF), \ + H(OP_UNUSED_85FF), \ + H(OP_UNUSED_86FF), \ + H(OP_UNUSED_87FF), \ + H(OP_UNUSED_88FF), \ + H(OP_UNUSED_89FF), \ + H(OP_UNUSED_8AFF), \ + H(OP_UNUSED_8BFF), \ + H(OP_UNUSED_8CFF), \ + H(OP_UNUSED_8DFF), \ + H(OP_UNUSED_8EFF), \ + H(OP_UNUSED_8FFF), \ + H(OP_UNUSED_90FF), \ + H(OP_UNUSED_91FF), \ + H(OP_UNUSED_92FF), \ + H(OP_UNUSED_93FF), \ + H(OP_UNUSED_94FF), \ + H(OP_UNUSED_95FF), \ + H(OP_UNUSED_96FF), \ + H(OP_UNUSED_97FF), \ + H(OP_UNUSED_98FF), \ + H(OP_UNUSED_99FF), \ + H(OP_UNUSED_9AFF), \ + H(OP_UNUSED_9BFF), \ + H(OP_UNUSED_9CFF), \ + H(OP_UNUSED_9DFF), \ + H(OP_UNUSED_9EFF), \ + H(OP_UNUSED_9FFF), \ + H(OP_UNUSED_A0FF), \ + H(OP_UNUSED_A1FF), \ + H(OP_UNUSED_A2FF), \ + H(OP_UNUSED_A3FF), \ + H(OP_UNUSED_A4FF), \ + H(OP_UNUSED_A5FF), \ + H(OP_UNUSED_A6FF), \ + H(OP_UNUSED_A7FF), \ + H(OP_UNUSED_A8FF), \ + H(OP_UNUSED_A9FF), \ + H(OP_UNUSED_AAFF), \ + H(OP_UNUSED_ABFF), \ + H(OP_UNUSED_ACFF), \ + H(OP_UNUSED_ADFF), \ + H(OP_UNUSED_AEFF), \ + H(OP_UNUSED_AFFF), \ + H(OP_UNUSED_B0FF), \ + H(OP_UNUSED_B1FF), \ + H(OP_UNUSED_B2FF), \ + H(OP_UNUSED_B3FF), \ + H(OP_UNUSED_B4FF), \ + H(OP_UNUSED_B5FF), \ + H(OP_UNUSED_B6FF), \ + H(OP_UNUSED_B7FF), \ + H(OP_UNUSED_B8FF), \ + H(OP_UNUSED_B9FF), \ + H(OP_UNUSED_BAFF), \ + H(OP_UNUSED_BBFF), \ + H(OP_UNUSED_BCFF), \ + H(OP_UNUSED_BDFF), \ + H(OP_UNUSED_BEFF), \ + H(OP_UNUSED_BFFF), \ + H(OP_UNUSED_C0FF), \ + H(OP_UNUSED_C1FF), \ + H(OP_UNUSED_C2FF), \ + H(OP_UNUSED_C3FF), \ + H(OP_UNUSED_C4FF), \ + H(OP_UNUSED_C5FF), \ + H(OP_UNUSED_C6FF), \ + H(OP_UNUSED_C7FF), \ + H(OP_UNUSED_C8FF), \ + H(OP_UNUSED_C9FF), \ + H(OP_UNUSED_CAFF), \ + H(OP_UNUSED_CBFF), \ + H(OP_UNUSED_CCFF), \ + H(OP_UNUSED_CDFF), \ + H(OP_UNUSED_CEFF), \ + H(OP_UNUSED_CFFF), \ + H(OP_UNUSED_D0FF), \ + H(OP_UNUSED_D1FF), \ + H(OP_UNUSED_D2FF), \ + H(OP_UNUSED_D3FF), \ + H(OP_UNUSED_D4FF), \ + H(OP_UNUSED_D5FF), \ + H(OP_UNUSED_D6FF), \ + H(OP_UNUSED_D7FF), \ + H(OP_UNUSED_D8FF), \ + H(OP_UNUSED_D9FF), \ + H(OP_UNUSED_DAFF), \ + H(OP_UNUSED_DBFF), \ + H(OP_UNUSED_DCFF), \ + H(OP_UNUSED_DDFF), \ + H(OP_UNUSED_DEFF), \ + H(OP_UNUSED_DFFF), \ + H(OP_UNUSED_E0FF), \ + H(OP_UNUSED_E1FF), \ + H(OP_UNUSED_E2FF), \ + H(OP_UNUSED_E3FF), \ + H(OP_UNUSED_E4FF), \ + H(OP_UNUSED_E5FF), \ + H(OP_UNUSED_E6FF), \ + H(OP_UNUSED_E7FF), \ + H(OP_UNUSED_E8FF), \ + H(OP_UNUSED_E9FF), \ + H(OP_UNUSED_EAFF), \ + H(OP_UNUSED_EBFF), \ + H(OP_UNUSED_ECFF), \ + H(OP_UNUSED_EDFF), \ + H(OP_UNUSED_EEFF), \ + H(OP_UNUSED_EFFF), \ + H(OP_UNUSED_F0FF), \ + H(OP_UNUSED_F1FF), \ + H(OP_UNUSED_F2FF), \ + H(OP_UNUSED_F3FF), \ + H(OP_UNUSED_F4FF), \ + H(OP_UNUSED_F5FF), \ + H(OP_UNUSED_F6FF), \ + H(OP_UNUSED_F7FF), \ + H(OP_UNUSED_F8FF), \ + H(OP_UNUSED_F9FF), \ + H(OP_UNUSED_FAFF), \ + H(OP_UNUSED_FBFF), \ + H(OP_UNUSED_FCFF), \ + H(OP_UNUSED_FDFF), \ + H(OP_UNUSED_FEFF), \ + H(OP_THROW_VERIFICATION_ERROR_JUMBO), \ /* END(libdex-goto-table) */ \ }; diff --git a/libdex/InstrUtils.c b/libdex/InstrUtils.c index 9d21a041d..7355301f8 100644 --- a/libdex/InstrUtils.c +++ b/libdex/InstrUtils.c @@ -48,6 +48,22 @@ static InstructionWidth gInstructionWidthTable[kNumPackedOpcodes] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 3, 3, 3, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 0, + 4, 4, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, // END(libdex-widths) }; @@ -313,6 +329,262 @@ static u1 gOpcodeFlagsTable[kNumPackedOpcodes] = { kInstrCanContinue|kInstrCanThrow, kInstrCanContinue|kInstrCanThrow, 0, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + kInstrCanContinue|kInstrCanThrow|kInstrInvoke, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + kInstrCanThrow, // END(libdex-flags) }; @@ -358,7 +630,44 @@ static u1 gInstructionFormatTable[kNumPackedOpcodes] = { kFmt22c, kFmt22c, kFmt22c, kFmt21c, kFmt21c, kFmt00x, kFmt20bc, kFmt35mi, kFmt3rmi, kFmt35c, kFmt10x, kFmt22cs, kFmt22cs, kFmt22cs, kFmt22cs, kFmt22cs, kFmt22cs, kFmt35ms, kFmt3rms, kFmt35ms, kFmt3rms, - kFmt22c, kFmt21c, kFmt21c, kFmt00x, + kFmt22c, kFmt21c, kFmt21c, kFmt00x, kFmt41c, kFmt41c, kFmt52c, + kFmt41c, kFmt52c, kFmt5rc, kFmt52c, kFmt52c, kFmt52c, kFmt52c, + kFmt52c, kFmt52c, kFmt52c, kFmt52c, kFmt52c, kFmt52c, kFmt52c, + kFmt52c, kFmt52c, kFmt52c, kFmt41c, kFmt41c, kFmt41c, kFmt41c, + kFmt41c, kFmt41c, kFmt41c, kFmt41c, kFmt41c, kFmt41c, kFmt41c, + kFmt41c, kFmt41c, kFmt41c, kFmt5rc, kFmt5rc, kFmt5rc, kFmt5rc, + kFmt5rc, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, kFmt00x, + kFmt40sc, // END(libdex-formats) }; @@ -453,7 +762,92 @@ static u1 gInstructionIndexTypeTable[kNumPackedOpcodes] = { kIndexFieldOffset, kIndexFieldOffset, kIndexVtableOffset, kIndexVtableOffset, kIndexVtableOffset, kIndexVtableOffset, kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, - kIndexUnknown, + kIndexUnknown, kIndexTypeRef, kIndexTypeRef, + kIndexTypeRef, kIndexTypeRef, kIndexTypeRef, + kIndexTypeRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexFieldRef, + kIndexFieldRef, kIndexFieldRef, kIndexMethodRef, + kIndexMethodRef, kIndexMethodRef, kIndexMethodRef, + kIndexMethodRef, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexUnknown, kIndexUnknown, + kIndexUnknown, kIndexVaries, // END(libdex-index-types) }; @@ -652,6 +1046,7 @@ void dexDecodeInstruction(const u2* insns, DecodedInstruction* pDec) pDec->vB = FETCH(1) >> 8; pDec->vC = (s2) FETCH(2); // sign-extend 16-bit value break; + case kFmt40sc: // [opt] exop AAAA, thing@BBBBBBBB case kFmt41c: // exop vAAAA, thing@BBBBBBBB /* * The order of fields for this format in the spec is {B, A}, diff --git a/libdex/InstrUtils.h b/libdex/InstrUtils.h index 3f77411ed..f09429cf0 100644 --- a/libdex/InstrUtils.h +++ b/libdex/InstrUtils.h @@ -63,6 +63,7 @@ typedef enum { kFmt3rmi, // [opt] inline invoke/range kFmt33x, // exop vAA, vBB, vCCCC kFmt32s, // exop vAA, vBB, #+CCCC + kFmt40sc, // [opt] exop AAAA, thing@BBBBBBBB kFmt41c, // exop vAAAA, thing@BBBBBBBB kFmt52c, // exop vAAAA, vBBBB, thing@CCCCCCCC kFmt5rc, // exop {vCCCC .. v(CCCC+AAAA-1)}, thing@BBBBBBBB |
