diff options
Diffstat (limited to 'src/compiler/CompilerUtility.h')
| -rw-r--r-- | src/compiler/CompilerUtility.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/compiler/CompilerUtility.h b/src/compiler/CompilerUtility.h new file mode 100644 index 0000000000..eaf712df7d --- /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_ |