Updating the compiler to use the new-world model

New compiler is integrated and passes first test (Fibonacci).

Change-Id: Ic5448ab89ebd22baa30fafc3d1300324687d1fc2
diff --git a/src/compiler/Dalvik.h b/src/compiler/Dalvik.h
index 4e93c9c..a9ddcd8 100644
--- a/src/compiler/Dalvik.h
+++ b/src/compiler/Dalvik.h
@@ -24,12 +24,14 @@
 #include <stdint.h>
 #include <stdio.h>
 #include <assert.h>
-#include "../logging.h"
+#include "logging.h"
+#include "object.h"
+#include "thread.h"
+#include "class_linker.h"
+#include "dex_cache.h"
+#include "utils.h"
 
 // From Common.h
-#define MIN(x,y) (((x) < (y)) ? (x) : (y))
-#define MAX(x,y) (((x) > (y)) ? (x) : (y))
-
 typedef uint8_t             u1;
 typedef uint16_t            u2;
 typedef uint32_t            u4;
@@ -40,667 +42,27 @@
 typedef int64_t             s8;
 typedef unsigned long long  u8;
 
-struct Object;
+//Skip old DexFile.h
+#define LIBDEX_DEXFILE_H_
+//Skip old vm/Common.h
+#define DALVIK_COMMON_H_
+//Make inlines inline
+#define DEX_INLINE inline
+#include "DexOpcodes.h"
+#include "InstrUtils.h"
 
-union JValue {
-    u1      z;
-    s1      b;
-    u2      c;
-    s2      s;
-    s4      i;
-    s8      j;
-    float   f;
-    double  d;
-    Object* l;
-};
-
-
-// From libdex/DexOpcodes.h
-#define kNumPackedOpcodes 0x200
-#define kPackedSwitchSignature 0x0100
-#define kSparseSwitchSignature 0x0200
-#define kArrayDataSignature 0x0300
-enum Opcode {
-    // BEGIN(libdex-opcode-enum); GENERATED AUTOMATICALLY BY opcode-gen
-    OP_NOP                          = 0x00,
-    OP_MOVE                         = 0x01,
-    OP_MOVE_FROM16                  = 0x02,
-    OP_MOVE_16                      = 0x03,
-    OP_MOVE_WIDE                    = 0x04,
-    OP_MOVE_WIDE_FROM16             = 0x05,
-    OP_MOVE_WIDE_16                 = 0x06,
-    OP_MOVE_OBJECT                  = 0x07,
-    OP_MOVE_OBJECT_FROM16           = 0x08,
-    OP_MOVE_OBJECT_16               = 0x09,
-    OP_MOVE_RESULT                  = 0x0a,
-    OP_MOVE_RESULT_WIDE             = 0x0b,
-    OP_MOVE_RESULT_OBJECT           = 0x0c,
-    OP_MOVE_EXCEPTION               = 0x0d,
-    OP_RETURN_VOID                  = 0x0e,
-    OP_RETURN                       = 0x0f,
-    OP_RETURN_WIDE                  = 0x10,
-    OP_RETURN_OBJECT                = 0x11,
-    OP_CONST_4                      = 0x12,
-    OP_CONST_16                     = 0x13,
-    OP_CONST                        = 0x14,
-    OP_CONST_HIGH16                 = 0x15,
-    OP_CONST_WIDE_16                = 0x16,
-    OP_CONST_WIDE_32                = 0x17,
-    OP_CONST_WIDE                   = 0x18,
-    OP_CONST_WIDE_HIGH16            = 0x19,
-    OP_CONST_STRING                 = 0x1a,
-    OP_CONST_STRING_JUMBO           = 0x1b,
-    OP_CONST_CLASS                  = 0x1c,
-    OP_MONITOR_ENTER                = 0x1d,
-    OP_MONITOR_EXIT                 = 0x1e,
-    OP_CHECK_CAST                   = 0x1f,
-    OP_INSTANCE_OF                  = 0x20,
-    OP_ARRAY_LENGTH                 = 0x21,
-    OP_NEW_INSTANCE                 = 0x22,
-    OP_NEW_ARRAY                    = 0x23,
-    OP_FILLED_NEW_ARRAY             = 0x24,
-    OP_FILLED_NEW_ARRAY_RANGE       = 0x25,
-    OP_FILL_ARRAY_DATA              = 0x26,
-    OP_THROW                        = 0x27,
-    OP_GOTO                         = 0x28,
-    OP_GOTO_16                      = 0x29,
-    OP_GOTO_32                      = 0x2a,
-    OP_PACKED_SWITCH                = 0x2b,
-    OP_SPARSE_SWITCH                = 0x2c,
-    OP_CMPL_FLOAT                   = 0x2d,
-    OP_CMPG_FLOAT                   = 0x2e,
-    OP_CMPL_DOUBLE                  = 0x2f,
-    OP_CMPG_DOUBLE                  = 0x30,
-    OP_CMP_LONG                     = 0x31,
-    OP_IF_EQ                        = 0x32,
-    OP_IF_NE                        = 0x33,
-    OP_IF_LT                        = 0x34,
-    OP_IF_GE                        = 0x35,
-    OP_IF_GT                        = 0x36,
-    OP_IF_LE                        = 0x37,
-    OP_IF_EQZ                       = 0x38,
-    OP_IF_NEZ                       = 0x39,
-    OP_IF_LTZ                       = 0x3a,
-    OP_IF_GEZ                       = 0x3b,
-    OP_IF_GTZ                       = 0x3c,
-    OP_IF_LEZ                       = 0x3d,
-    OP_UNUSED_3E                    = 0x3e,
-    OP_UNUSED_3F                    = 0x3f,
-    OP_UNUSED_40                    = 0x40,
-    OP_UNUSED_41                    = 0x41,
-    OP_UNUSED_42                    = 0x42,
-    OP_UNUSED_43                    = 0x43,
-    OP_AGET                         = 0x44,
-    OP_AGET_WIDE                    = 0x45,
-    OP_AGET_OBJECT                  = 0x46,
-    OP_AGET_BOOLEAN                 = 0x47,
-    OP_AGET_BYTE                    = 0x48,
-    OP_AGET_CHAR                    = 0x49,
-    OP_AGET_SHORT                   = 0x4a,
-    OP_APUT                         = 0x4b,
-    OP_APUT_WIDE                    = 0x4c,
-    OP_APUT_OBJECT                  = 0x4d,
-    OP_APUT_BOOLEAN                 = 0x4e,
-    OP_APUT_BYTE                    = 0x4f,
-    OP_APUT_CHAR                    = 0x50,
-    OP_APUT_SHORT                   = 0x51,
-    OP_IGET                         = 0x52,
-    OP_IGET_WIDE                    = 0x53,
-    OP_IGET_OBJECT                  = 0x54,
-    OP_IGET_BOOLEAN                 = 0x55,
-    OP_IGET_BYTE                    = 0x56,
-    OP_IGET_CHAR                    = 0x57,
-    OP_IGET_SHORT                   = 0x58,
-    OP_IPUT                         = 0x59,
-    OP_IPUT_WIDE                    = 0x5a,
-    OP_IPUT_OBJECT                  = 0x5b,
-    OP_IPUT_BOOLEAN                 = 0x5c,
-    OP_IPUT_BYTE                    = 0x5d,
-    OP_IPUT_CHAR                    = 0x5e,
-    OP_IPUT_SHORT                   = 0x5f,
-    OP_SGET                         = 0x60,
-    OP_SGET_WIDE                    = 0x61,
-    OP_SGET_OBJECT                  = 0x62,
-    OP_SGET_BOOLEAN                 = 0x63,
-    OP_SGET_BYTE                    = 0x64,
-    OP_SGET_CHAR                    = 0x65,
-    OP_SGET_SHORT                   = 0x66,
-    OP_SPUT                         = 0x67,
-    OP_SPUT_WIDE                    = 0x68,
-    OP_SPUT_OBJECT                  = 0x69,
-    OP_SPUT_BOOLEAN                 = 0x6a,
-    OP_SPUT_BYTE                    = 0x6b,
-    OP_SPUT_CHAR                    = 0x6c,
-    OP_SPUT_SHORT                   = 0x6d,
-    OP_INVOKE_VIRTUAL               = 0x6e,
-    OP_INVOKE_SUPER                 = 0x6f,
-    OP_INVOKE_DIRECT                = 0x70,
-    OP_INVOKE_STATIC                = 0x71,
-    OP_INVOKE_INTERFACE             = 0x72,
-    OP_UNUSED_73                    = 0x73,
-    OP_INVOKE_VIRTUAL_RANGE         = 0x74,
-    OP_INVOKE_SUPER_RANGE           = 0x75,
-    OP_INVOKE_DIRECT_RANGE          = 0x76,
-    OP_INVOKE_STATIC_RANGE          = 0x77,
-    OP_INVOKE_INTERFACE_RANGE       = 0x78,
-    OP_UNUSED_79                    = 0x79,
-    OP_UNUSED_7A                    = 0x7a,
-    OP_NEG_INT                      = 0x7b,
-    OP_NOT_INT                      = 0x7c,
-    OP_NEG_LONG                     = 0x7d,
-    OP_NOT_LONG                     = 0x7e,
-    OP_NEG_FLOAT                    = 0x7f,
-    OP_NEG_DOUBLE                   = 0x80,
-    OP_INT_TO_LONG                  = 0x81,
-    OP_INT_TO_FLOAT                 = 0x82,
-    OP_INT_TO_DOUBLE                = 0x83,
-    OP_LONG_TO_INT                  = 0x84,
-    OP_LONG_TO_FLOAT                = 0x85,
-    OP_LONG_TO_DOUBLE               = 0x86,
-    OP_FLOAT_TO_INT                 = 0x87,
-    OP_FLOAT_TO_LONG                = 0x88,
-    OP_FLOAT_TO_DOUBLE              = 0x89,
-    OP_DOUBLE_TO_INT                = 0x8a,
-    OP_DOUBLE_TO_LONG               = 0x8b,
-    OP_DOUBLE_TO_FLOAT              = 0x8c,
-    OP_INT_TO_BYTE                  = 0x8d,
-    OP_INT_TO_CHAR                  = 0x8e,
-    OP_INT_TO_SHORT                 = 0x8f,
-    OP_ADD_INT                      = 0x90,
-    OP_SUB_INT                      = 0x91,
-    OP_MUL_INT                      = 0x92,
-    OP_DIV_INT                      = 0x93,
-    OP_REM_INT                      = 0x94,
-    OP_AND_INT                      = 0x95,
-    OP_OR_INT                       = 0x96,
-    OP_XOR_INT                      = 0x97,
-    OP_SHL_INT                      = 0x98,
-    OP_SHR_INT                      = 0x99,
-    OP_USHR_INT                     = 0x9a,
-    OP_ADD_LONG                     = 0x9b,
-    OP_SUB_LONG                     = 0x9c,
-    OP_MUL_LONG                     = 0x9d,
-    OP_DIV_LONG                     = 0x9e,
-    OP_REM_LONG                     = 0x9f,
-    OP_AND_LONG                     = 0xa0,
-    OP_OR_LONG                      = 0xa1,
-    OP_XOR_LONG                     = 0xa2,
-    OP_SHL_LONG                     = 0xa3,
-    OP_SHR_LONG                     = 0xa4,
-    OP_USHR_LONG                    = 0xa5,
-    OP_ADD_FLOAT                    = 0xa6,
-    OP_SUB_FLOAT                    = 0xa7,
-    OP_MUL_FLOAT                    = 0xa8,
-    OP_DIV_FLOAT                    = 0xa9,
-    OP_REM_FLOAT                    = 0xaa,
-    OP_ADD_DOUBLE                   = 0xab,
-    OP_SUB_DOUBLE                   = 0xac,
-    OP_MUL_DOUBLE                   = 0xad,
-    OP_DIV_DOUBLE                   = 0xae,
-    OP_REM_DOUBLE                   = 0xaf,
-    OP_ADD_INT_2ADDR                = 0xb0,
-    OP_SUB_INT_2ADDR                = 0xb1,
-    OP_MUL_INT_2ADDR                = 0xb2,
-    OP_DIV_INT_2ADDR                = 0xb3,
-    OP_REM_INT_2ADDR                = 0xb4,
-    OP_AND_INT_2ADDR                = 0xb5,
-    OP_OR_INT_2ADDR                 = 0xb6,
-    OP_XOR_INT_2ADDR                = 0xb7,
-    OP_SHL_INT_2ADDR                = 0xb8,
-    OP_SHR_INT_2ADDR                = 0xb9,
-    OP_USHR_INT_2ADDR               = 0xba,
-    OP_ADD_LONG_2ADDR               = 0xbb,
-    OP_SUB_LONG_2ADDR               = 0xbc,
-    OP_MUL_LONG_2ADDR               = 0xbd,
-    OP_DIV_LONG_2ADDR               = 0xbe,
-    OP_REM_LONG_2ADDR               = 0xbf,
-    OP_AND_LONG_2ADDR               = 0xc0,
-    OP_OR_LONG_2ADDR                = 0xc1,
-    OP_XOR_LONG_2ADDR               = 0xc2,
-    OP_SHL_LONG_2ADDR               = 0xc3,
-    OP_SHR_LONG_2ADDR               = 0xc4,
-    OP_USHR_LONG_2ADDR              = 0xc5,
-    OP_ADD_FLOAT_2ADDR              = 0xc6,
-    OP_SUB_FLOAT_2ADDR              = 0xc7,
-    OP_MUL_FLOAT_2ADDR              = 0xc8,
-    OP_DIV_FLOAT_2ADDR              = 0xc9,
-    OP_REM_FLOAT_2ADDR              = 0xca,
-    OP_ADD_DOUBLE_2ADDR             = 0xcb,
-    OP_SUB_DOUBLE_2ADDR             = 0xcc,
-    OP_MUL_DOUBLE_2ADDR             = 0xcd,
-    OP_DIV_DOUBLE_2ADDR             = 0xce,
-    OP_REM_DOUBLE_2ADDR             = 0xcf,
-    OP_ADD_INT_LIT16                = 0xd0,
-    OP_RSUB_INT                     = 0xd1,
-    OP_MUL_INT_LIT16                = 0xd2,
-    OP_DIV_INT_LIT16                = 0xd3,
-    OP_REM_INT_LIT16                = 0xd4,
-    OP_AND_INT_LIT16                = 0xd5,
-    OP_OR_INT_LIT16                 = 0xd6,
-    OP_XOR_INT_LIT16                = 0xd7,
-    OP_ADD_INT_LIT8                 = 0xd8,
-    OP_RSUB_INT_LIT8                = 0xd9,
-    OP_MUL_INT_LIT8                 = 0xda,
-    OP_DIV_INT_LIT8                 = 0xdb,
-    OP_REM_INT_LIT8                 = 0xdc,
-    OP_AND_INT_LIT8                 = 0xdd,
-    OP_OR_INT_LIT8                  = 0xde,
-    OP_XOR_INT_LIT8                 = 0xdf,
-    OP_SHL_INT_LIT8                 = 0xe0,
-    OP_SHR_INT_LIT8                 = 0xe1,
-    OP_USHR_INT_LIT8                = 0xe2,
-    OP_IGET_VOLATILE                = 0xe3,
-    OP_IPUT_VOLATILE                = 0xe4,
-    OP_SGET_VOLATILE                = 0xe5,
-    OP_SPUT_VOLATILE                = 0xe6,
-    OP_IGET_OBJECT_VOLATILE         = 0xe7,
-    OP_IGET_WIDE_VOLATILE           = 0xe8,
-    OP_IPUT_WIDE_VOLATILE           = 0xe9,
-    OP_SGET_WIDE_VOLATILE           = 0xea,
-    OP_SPUT_WIDE_VOLATILE           = 0xeb,
-    OP_BREAKPOINT                   = 0xec,
-    OP_THROW_VERIFICATION_ERROR     = 0xed,
-    OP_EXECUTE_INLINE               = 0xee,
-    OP_EXECUTE_INLINE_RANGE         = 0xef,
-    OP_INVOKE_OBJECT_INIT_RANGE     = 0xf0,
-    OP_RETURN_VOID_BARRIER          = 0xf1,
-    OP_IGET_QUICK                   = 0xf2,
-    OP_IGET_WIDE_QUICK              = 0xf3,
-    OP_IGET_OBJECT_QUICK            = 0xf4,
-    OP_IPUT_QUICK                   = 0xf5,
-    OP_IPUT_WIDE_QUICK              = 0xf6,
-    OP_IPUT_OBJECT_QUICK            = 0xf7,
-    OP_INVOKE_VIRTUAL_QUICK         = 0xf8,
-    OP_INVOKE_VIRTUAL_QUICK_RANGE   = 0xf9,
-    OP_INVOKE_SUPER_QUICK           = 0xfa,
-    OP_INVOKE_SUPER_QUICK_RANGE     = 0xfb,
-    OP_IPUT_OBJECT_VOLATILE         = 0xfc,
-    OP_SGET_OBJECT_VOLATILE         = 0xfd,
-    OP_SPUT_OBJECT_VOLATILE         = 0xfe,
-};
+typedef art::JValue JValue;
+typedef art::Thread Thread;
+typedef art::Class Class;
+typedef art::Array Array;
+typedef art::Method Method;
+typedef art::Object Object;
+typedef art::Field Field;
+typedef art::String String;
 
 // From alloc/CardTable.h
 #define GC_CARD_SHIFT 7
 
-// From all/Alloc.h
-/* flags for dvmMalloc */
-enum {
-    ALLOC_DEFAULT = 0x00,
-    ALLOC_DONT_TRACK = 0x01,  /* don't add to internal tracking list */
-    ALLOC_NON_MOVING = 0x02,
-};
-
-
-// From oo/Object.h
-struct ClassObject;
-struct ArrayObject;
-struct DvmDex;
-struct Method;
-
-struct Object {
-    ClassObject* clazz;
-    u4 lock;
-    Method** vtable;
-    int vtableCount;
-    u4 accessFlags;
-};
-
-struct ArrayObject : Object {
-    u4              length;
-    u8              contents[1];
-};
-
-struct ClassObject : Object {
-    const char* descriptor;
-    DvmDex* pDvmDex;
-    ClassObject* super;
-};
-
-// From InstrUtils.h
-enum InstructionFormat {
-    kFmt00x = 0,    // unknown format (also used for "breakpoint" opcode)
-    kFmt10x,        // op
-    kFmt12x,        // op vA, vB
-    kFmt11n,        // op vA, #+B
-    kFmt11x,        // op vAA
-    kFmt10t,        // op +AA
-    kFmt20bc,       // [opt] op AA, thing@BBBB
-    kFmt20t,        // op +AAAA
-    kFmt22x,        // op vAA, vBBBB
-    kFmt21t,        // op vAA, +BBBB
-    kFmt21s,        // op vAA, #+BBBB
-    kFmt21h,        // op vAA, #+BBBB00000[00000000]
-    kFmt21c,        // op vAA, thing@BBBB
-    kFmt23x,        // op vAA, vBB, vCC
-    kFmt22b,        // op vAA, vBB, #+CC
-    kFmt22t,        // op vA, vB, +CCCC
-    kFmt22s,        // op vA, vB, #+CCCC
-    kFmt22c,        // op vA, vB, thing@CCCC
-    kFmt22cs,       // [opt] op vA, vB, field offset CCCC
-    kFmt30t,        // op +AAAAAAAA
-    kFmt32x,        // op vAAAA, vBBBB
-    kFmt31i,        // op vAA, #+BBBBBBBB
-    kFmt31t,        // op vAA, +BBBBBBBB
-    kFmt31c,        // op vAA, string@BBBBBBBB
-    kFmt35c,        // op {vC,vD,vE,vF,vG}, thing@BBBB
-    kFmt35ms,       // [opt] invoke-virtual+super
-    kFmt3rc,        // op {vCCCC .. v(CCCC+AA-1)}, thing@BBBB
-    kFmt3rms,       // [opt] invoke-virtual+super/range
-    kFmt51l,        // op vAA, #+BBBBBBBBBBBBBBBB
-    kFmt35mi,       // [opt] inline invoke
-    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
-};
-
-enum InstructionIndexType {
-    kIndexUnknown = 0,
-    kIndexNone,         // has no index
-    kIndexVaries,       // "It depends." Used for throw-verification-error
-    kIndexTypeRef,      // type reference index
-    kIndexStringRef,    // string reference index
-    kIndexMethodRef,    // method reference index
-    kIndexFieldRef,     // field reference index
-    kIndexInlineMethod, // inline method index (for inline linked methods)
-    kIndexVtableOffset, // vtable offset (for static linked methods)
-    kIndexFieldOffset   // field offset (for static linked fields)
-};
-
-typedef u1 InstructionWidth;
-
-typedef u1 OpcodeFlags;
-enum OpcodeFlagsBits {
-    kInstrCanBranch     = 1,        // conditional or unconditional branch
-    kInstrCanContinue   = 1 << 1,   // flow can continue to next statement
-    kInstrCanSwitch     = 1 << 2,   // switch statement
-    kInstrCanThrow      = 1 << 3,   // could cause an exception to be thrown
-    kInstrCanReturn     = 1 << 4,   // returns, no additional statements
-    kInstrInvoke        = 1 << 5,   // a flavor of invoke
-};
-
-struct InstructionInfoTables {
-    u1*                formats;    /* InstructionFormat elements */
-    u1*                indexTypes; /* InstructionIndexType elements */
-    OpcodeFlags*       flags;
-    InstructionWidth*  widths;
-};
-
-extern InstructionInfoTables gDexOpcodeInfo;
-
-struct DecodedInstruction {
-    u4      vA;
-    u4      vB;
-    u8      vB_wide;        /* for kFmt51l */
-    u4      vC;
-    u4      arg[5];         /* vC/D/E/F/G in invoke or filled-new-array */
-    Opcode  opcode;
-    InstructionIndexType indexType;
-};
-
-#define DEX_INLINE inline
-#define INLINE inline
-
-DEX_INLINE size_t dexGetWidthFromOpcode(Opcode opcode)
-{
-    assert((u4) opcode < kNumPackedOpcodes);
-    return gDexOpcodeInfo.widths[opcode];
-}
-
-size_t dexGetWidthFromInstruction(const u2* insns);
-
-DEX_INLINE OpcodeFlags dexGetFlagsFromOpcode(Opcode opcode)
-{
-    assert((u4) opcode < kNumPackedOpcodes);
-    return gDexOpcodeInfo.flags[opcode];
-}
-
-DEX_INLINE bool dexIsGoto(OpcodeFlags flags)
-{
-    return (flags & (kInstrCanBranch | kInstrCanContinue)) == kInstrCanBranch;
-}
-
-DEX_INLINE InstructionFormat dexGetFormatFromOpcode(Opcode opcode)
-{
-    assert((u4) opcode < kNumPackedOpcodes);
-    return (InstructionFormat) gDexOpcodeInfo.formats[opcode];
-}
-
-DEX_INLINE InstructionIndexType dexGetIndexTypeFromOpcode(Opcode opcode)
-{
-    assert((u4) opcode < kNumPackedOpcodes);
-    return (InstructionIndexType) gDexOpcodeInfo.indexTypes[opcode];
-}
-
-void dexDecodeInstruction(const u2* insns, DecodedInstruction* pDec);
-
-// From DexOpcodes
-const char* dexGetOpcodeName(Opcode op);
-
-DEX_INLINE Opcode dexOpcodeFromCodeUnit(u2 codeUnit) {
-    int lowByte = codeUnit & 0xff;
-    if (lowByte != 0xff) {
-        return (Opcode) lowByte;
-    } else {
-        return (Opcode) ((codeUnit >> 8) | 0x100);
-    }
-}
-
-// From DexFile
-struct DexFile;
-struct DexTry {
-    u4  startAddr;          /* start address, in 16-bit code units */
-    u2  insnCount;          /* instruction count, in 16-bit code units */
-    u2  handlerOff;         /* offset in encoded handler data to handlers */
-};
-struct DexCode {
-    u2  registersSize;
-    u2  insSize;
-    u2  outsSize;
-    u2  triesSize;
-    u4  debugInfoOff;       /* file offset to debug info stream */
-    u4  insnsSize;          /* size of the insns array, in u2 units */
-    u2  insns[1];
-};
-
-DEX_INLINE const DexTry* dexGetTries(const DexCode* pCode) {
-    const u2* insnsEnd = &pCode->insns[pCode->insnsSize];
-
-    // Round to four bytes.
-    if ((((u4) insnsEnd) & 3) != 0) {
-        insnsEnd++;
-    }
-
-    return (const DexTry*) insnsEnd;
-}
-
-enum {
-    ACC_PUBLIC       = 0x00000001,       // class, field, method, ic
-    ACC_PRIVATE      = 0x00000002,       // field, method, ic
-    ACC_PROTECTED    = 0x00000004,       // field, method, ic
-    ACC_STATIC       = 0x00000008,       // field, method, ic
-    ACC_FINAL        = 0x00000010,       // class, field, method, ic
-    ACC_SYNCHRONIZED = 0x00000020,       // method (only allowed on natives)
-    ACC_SUPER        = 0x00000020,       // class (not used in Dalvik)
-    ACC_VOLATILE     = 0x00000040,       // field
-    ACC_BRIDGE       = 0x00000040,       // method (1.5)
-    ACC_TRANSIENT    = 0x00000080,       // field
-    ACC_VARARGS      = 0x00000080,       // method (1.5)
-    ACC_NATIVE       = 0x00000100,       // method
-    ACC_INTERFACE    = 0x00000200,       // class, ic
-    ACC_ABSTRACT     = 0x00000400,       // class, method, ic
-    ACC_STRICT       = 0x00000800,       // method
-    ACC_SYNTHETIC    = 0x00001000,       // field, method, ic
-    ACC_ANNOTATION   = 0x00002000,       // class, ic (1.5)
-    ACC_ENUM         = 0x00004000,       // class, field, ic (1.5)
-    ACC_CONSTRUCTOR  = 0x00010000,       // method (Dalvik only)
-    ACC_DECLARED_SYNCHRONIZED =
-                       0x00020000,       // method (Dalvik only)
-    ACC_CLASS_MASK =
-        (ACC_PUBLIC | ACC_FINAL | ACC_INTERFACE | ACC_ABSTRACT
-                | ACC_SYNTHETIC | ACC_ANNOTATION | ACC_ENUM),
-    ACC_INNER_CLASS_MASK =
-        (ACC_CLASS_MASK | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC),
-    ACC_FIELD_MASK =
-        (ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL
-                | ACC_VOLATILE | ACC_TRANSIENT | ACC_SYNTHETIC | ACC_ENUM),
-    ACC_METHOD_MASK =
-        (ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED | ACC_STATIC | ACC_FINAL
-                | ACC_SYNCHRONIZED | ACC_BRIDGE | ACC_VARARGS | ACC_NATIVE
-                | ACC_ABSTRACT | ACC_STRICT | ACC_SYNTHETIC | ACC_CONSTRUCTOR
-                | ACC_DECLARED_SYNCHRONIZED),
-};
-
-// From DexProto
-struct DexProto {
-    const DexFile* dexFile;     /* file the idx refers to */
-    u4 protoIdx;                /* index into proto_ids table of dexFile */
-};
-char* dexProtoCopyMethodDescriptor(const DexProto* pProto);
-
-// From DexCatch.h
-struct DexCatchHandler {
-    u4          typeIdx;    /* type index of the caught exception type */
-    u4          address;    /* handler address */
-};
-struct DexCatchIterator {
-    const u1* pEncodedData;
-    bool catchesAll;
-    u4 countRemaining;
-    DexCatchHandler handler;
-};
-bool dexFindCatchHandler(DexCatchIterator *pIterator,
-                         const DexCode* pCode, u4 address);
-DexCatchHandler* dexCatchIteratorNext(DexCatchIterator* pIterator);
-u4 dexGetFirstHandlerOffset(const DexCode* pCode);
-u4 dexGetHandlersSize(const DexCode* pCode);
-u4 dexCatchIteratorGetEndOffset(DexCatchIterator* pIterator,
-                                const DexCode* pCode);
-void dexCatchIteratorInit(DexCatchIterator* pIterator,
-    const DexCode* pCode, u4 offset);
-
-
-
-// From DvmDex.h
-struct Field;
-struct StringObject;
-struct DvmDex {
-    struct Method** pResMethods;
-    struct ClassObject** pResClasses;
-    struct Field** pResFields;
-    struct StringObject** pResStrings;
-};
-
-// from oo/Object.h
-struct Method {
-    ClassObject* clazz;
-    u2 methodIndex;
-    u2 registersSize;
-    u2 outsSize;
-    u2 insSize;
-    u4 accessFlags;
-    const char* name;
-    const char* shorty;
-    DexProto prototype;
-    void* compiledInsns;
-    DvmDex* pDvmDex;
-    u2* insns;
-    struct Method** pResMethods;
-};
-
-struct Field {
-    ClassObject*    clazz;          /* class in which the field is declared */
-    const char*     name;
-    const char*     signature;      /* e.g. "I", "[C", "Landroid/os/Debug;" */
-    u4              accessFlags;
-};
-
-struct InstField : Field {
-    int             byteOffset;
-};
-/*
- * Static field.
- */
-struct StaticField : Field {
-    JValue          value;          /* initially set from DEX for primitives */
-};
-
-INLINE bool dvmIsVolatileField(const Field* field) {
-    return (field->accessFlags & ACC_VOLATILE) != 0;
-}
-
-INLINE bool dvmIsBytecodeMethod(const Method* method) {
-    return (method->accessFlags & (ACC_NATIVE | ACC_ABSTRACT)) == 0;
-}
-
-INLINE const DexCode* dvmGetMethodCode(const Method* meth) {
-    if (dvmIsBytecodeMethod(meth)) {
-        return (const DexCode*)
-            (((const u1*) meth->insns) - offsetof(DexCode, insns));
-    } else {
-        return NULL;
-    }
-}
-
-// From Thread.h
-struct Thread {
-
-    u4 threadId;
-    u1* cardTable;
-    Object* exception;
-
-    /* Runtime support function pointers */
-    void* (*pMemcpy)(void*, const void*, size_t);
-    float (*pI2f)(int);
-    int (*pF2iz)(float);
-    float (*pD2f)(double);
-    double (*pF2d)(float);
-    double (*pI2d)(int);
-    int (*pD2iz)(double);
-    float (*pL2f)(long);
-    double (*pL2d)(long);
-    s8 (*pArtF2l)(float);
-    s8 (*pArtD2l)(double);
-    float (*pFadd)(float, float);
-    float (*pFsub)(float, float);
-    float (*pFdiv)(float, float);
-    float (*pFmul)(float, float);
-    float (*pFmodf)(float, float);
-    double (*pDadd)(double, double);
-    double (*pDsub)(double, double);
-    double (*pDdiv)(double, double);
-    double (*pDmul)(double, double);
-    double (*pFmod)(double, double);
-    int (*pIdivmod)(int, int);
-    int (*pIdiv)(int, int);
-    long long (*pLdivmod)(long long, long long);
-    bool (*pArtUnlockObject)(struct Thread*, struct Object*);
-    bool (*pArtCanPutArrayElementNoThrow)(const ClassObject*,
-          const ClassObject*);
-    int (*pArtInstanceofNonTrivialNoThrow)
-      (const ClassObject*, const ClassObject*);
-    int (*pArtInstanceofNonTrivial) (const ClassObject*, const ClassObject*);
-    ArrayObject* (*pArtAllocArrayByClass)(ClassObject*, size_t, int);
-    Method* (*pArtFindInterfaceMethodInCache)(ClassObject*, u4, const Method*,
-             DvmDex*);
-    bool (*pArtUnlockObjectNoThrow)(Thread*, Object*);
-    void (*pArtLockObjectNoThrow)(Thread*, Object*);
-    Object* (*pArtAllocObjectNoThrow)(ClassObject*, int);
-    void (*pArtThrowException)(Thread*, Object*);
-    bool (*pArtHandleFillArrayDataNoThrow)(ArrayObject*, const u2*);
-
-};
-
-// From Sync.h
-#define LW_LOCK_OWNER_SHIFT 3
-#define LW_HASH_STATE_SHIFT 1
-#define LW_HASH_STATE_MASK 0x3
-#define LW_SHAPE_THIN 0
-
-
 #include "Compiler.h"
 
 #endif