Oat compiler integration snapshot.
Cleanly compiles, but not integrated. Old-world dependencies captured
in hacked-up temporary files "Dalvik.h" and "HackStubs.cc".
Dalvik.h is a placeholder that captures all of the constants, struct
definitions and inline functions the compiler needs. It largely consists
of declaration fragments of libdex, Object.h, DvmDex.h and Thread.h.
HackStubs.cc contains empty shells for some required libdex routines.
Change-Id: Ia479dda41da4e3162ff6df383252fdc7dbf38d71
diff --git a/src/compiler/CompilerUtility.h b/src/compiler/CompilerUtility.h
new file mode 100644
index 0000000..eaf712d
--- /dev/null
+++ b/src/compiler/CompilerUtility.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ART_SRC_COMPILER_COMPILER_UTILITY_H_
+#define ART_SRC_COMPILER_COMPILER_UTILITY_H_
+
+#include "Dalvik.h"
+
+/* Each arena page has some overhead, so take a few bytes off 8k */
+#define ARENA_DEFAULT_SIZE 8100
+
+/* Allocate the initial memory block for arena-based allocation */
+bool oatHeapInit(void);
+
+typedef struct ArenaMemBlock {
+ size_t blockSize;
+ size_t bytesAllocated;
+ struct ArenaMemBlock *next;
+ char ptr[0];
+} ArenaMemBlock;
+
+void* oatNew(size_t size, bool zero);
+
+void oatArenaReset(void);
+
+typedef struct GrowableList {
+ size_t numAllocated;
+ size_t numUsed;
+ intptr_t *elemList;
+} GrowableList;
+
+typedef struct GrowableListIterator {
+ GrowableList* list;
+ size_t idx;
+ size_t size;
+} GrowableListIterator;
+
+/*
+ * Expanding bitmap, used for tracking resources. Bits are numbered starting
+ * from zero.
+ *
+ * All operations on a BitVector are unsynchronized.
+ */
+struct ArenaBitVector {
+ bool expandable; /* expand bitmap if we run out? */
+ u4 storageSize; /* current size, in 32-bit words */
+ u4* storage;
+};
+
+/* Handy iterator to walk through the bit positions set to 1 */
+struct ArenaBitVectorIterator {
+ ArenaBitVector* pBits;
+ u4 idx;
+ u4 bitSize;
+};
+
+#define GET_ELEM_N(LIST, TYPE, N) (((TYPE*) LIST->elemList)[N])
+
+#define BLOCK_NAME_LEN 80
+
+/* Forward declarations */
+struct LIR;
+struct BasicBlock;
+struct CompilationUnit;
+
+void oatInitGrowableList(GrowableList* gList, size_t initLength);
+void oatInsertGrowableList(GrowableList* gList, intptr_t elem);
+void oatGrowableListIteratorInit(GrowableList* gList,
+ GrowableListIterator* iterator);
+intptr_t oatGrowableListIteratorNext(GrowableListIterator* iterator);
+intptr_t oatGrowableListGetElement(const GrowableList* gList, size_t idx);
+
+ArenaBitVector* oatAllocBitVector(unsigned int startBits, bool expandable);
+void oatBitVectorIteratorInit(ArenaBitVector* pBits,
+ ArenaBitVectorIterator* iterator);
+int oatBitVectorIteratorNext(ArenaBitVectorIterator* iterator);
+bool oatSetBit(ArenaBitVector* pBits, unsigned int num);
+bool oatClearBit(ArenaBitVector* pBits, unsigned int num);
+void oatMarkAllBits(ArenaBitVector* pBits, bool set);
+void oatDebugBitVector(char* msg, const ArenaBitVector* bv, int length);
+bool oatIsBitSet(const ArenaBitVector* pBits, unsigned int num);
+void oatClearAllBits(ArenaBitVector* pBits);
+void oatSetInitialBits(ArenaBitVector* pBits, unsigned int numBits);
+void oatCopyBitVector(ArenaBitVector* dest, const ArenaBitVector* src);
+bool oatIntersectBitVectors(ArenaBitVector* dest, const ArenaBitVector* src1,
+ const ArenaBitVector* src2);
+bool oatUnifyBitVectors(ArenaBitVector* dest, const ArenaBitVector* src1,
+ const ArenaBitVector* src2);
+bool oatCompareBitVectors(const ArenaBitVector* src1,
+ const ArenaBitVector* src2);
+int oatCountSetBits(const ArenaBitVector* pBits);
+
+void oatDumpLIRInsn(CompilationUnit* cUnit, struct LIR* lir,
+ unsigned char* baseAddr);
+void oatDumpResourceMask(struct LIR* lir, u8 mask, const char* prefix);
+void oatDumpBlockBitVector(const GrowableList* blocks, char* msg,
+ const ArenaBitVector* bv, int length);
+void oatGetBlockName(struct BasicBlock* bb, char* name);
+
+
+#endif // ART_SRC_COMPILER_COMPILER_UTILITY_H_