diff options
author | Colin Cross <ccross@android.com> | 2010-03-09 13:23:40 -0800 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2010-03-09 13:23:40 -0800 |
commit | fd7e221cce6d3c63fd26599d58e0a35db7f5d1fa (patch) | |
tree | 95a3f3fc0f8df6b038831b3e17b4a50ae21d3a48 /vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c | |
parent | 631bbbff684e9fe41a5a08ffa3e13fa3bed01212 (diff) | |
download | android_dalvik-fd7e221cce6d3c63fd26599d58e0a35db7f5d1fa.tar.gz android_dalvik-fd7e221cce6d3c63fd26599d58e0a35db7f5d1fa.tar.bz2 android_dalvik-fd7e221cce6d3c63fd26599d58e0a35db7f5d1fa.zip |
Add armv7-a-neon build target
Change-Id: I981d55b53f6b3c185fe93384924bdbe18057132c
Diffstat (limited to 'vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c')
-rw-r--r-- | vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c b/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c new file mode 100644 index 000000000..fe2b1d485 --- /dev/null +++ b/vm/compiler/codegen/arm/armv7-a-neon/ArchVariant.c @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2009 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. + */ + +/* + * Determine the initial instruction set to be used for this trace. + * Later components may decide to change this. + */ +JitInstructionSetType dvmCompilerInstructionSet(void) +{ + return DALVIK_JIT_THUMB2; +} + +/* Architecture-specific initializations and checks go here */ +bool dvmCompilerArchVariantInit(void) +{ + /* First, declare dvmCompiler_TEMPLATE_XXX for each template */ +#define JIT_TEMPLATE(X) extern void dvmCompiler_TEMPLATE_##X(); +#include "../../../template/armv5te-vfp/TemplateOpList.h" +#undef JIT_TEMPLATE + + int i = 0; + extern void dvmCompilerTemplateStart(void); + + /* + * Then, populate the templateEntryOffsets array with the offsets from the + * the dvmCompilerTemplateStart symbol for each template. + */ +#define JIT_TEMPLATE(X) templateEntryOffsets[i++] = \ + (intptr_t) dvmCompiler_TEMPLATE_##X - (intptr_t) dvmCompilerTemplateStart; +#include "../../../template/armv5te-vfp/TemplateOpList.h" +#undef JIT_TEMPLATE + + /* Target-specific configuration */ + gDvmJit.jitTableSize = 1 << 12; // 4096 + gDvmJit.jitTableMask = gDvmJit.jitTableSize - 1; + gDvmJit.threshold = 40; + gDvmJit.codeCacheSize = 1024*1024; + +#if defined(WITH_SELF_VERIFICATION) + /* Force into blocking */ + gDvmJit.blockingMode = true; +#endif + + /* Codegen-specific assumptions */ + assert(offsetof(ClassObject, vtable) < 128 && + (offsetof(ClassObject, vtable) & 0x3) == 0); + assert(offsetof(ArrayObject, length) < 128 && + (offsetof(ArrayObject, length) & 0x3) == 0); + assert(offsetof(ArrayObject, contents) < 256); + + /* Up to 5 args are pushed on top of FP - sizeofStackSaveArea */ + assert(sizeof(StackSaveArea) < 236); + + /* + * EA is calculated by doing "Rn + imm5 << 2", and there are 5 entry points + * that codegen may access, make sure that the offset from the top of the + * struct is less than 108. + */ + assert(offsetof(InterpState, jitToInterpEntries) < 108); + return true; +} + +int dvmCompilerTargetOptHint(int key) +{ + int res; + switch (key) { + case kMaxHoistDistance: + res = 7; + break; + default: + LOGE("Unknown target optimization hint key: %d",key); + res = 0; + } + return res; +} |