diff options
Diffstat (limited to 'vm')
-rw-r--r-- | vm/Init.c | 8 | ||||
-rw-r--r-- | vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c | 12 | ||||
-rw-r--r-- | vm/compiler/codegen/arm/armv5te/ArchVariant.c | 12 | ||||
-rw-r--r-- | vm/compiler/codegen/arm/armv7-a/ArchVariant.c | 12 | ||||
-rw-r--r-- | vm/interp/Jit.c | 37 | ||||
-rw-r--r-- | vm/interp/Jit.h | 2 | ||||
-rw-r--r-- | vm/mterp/armv5te/footer.S | 8 | ||||
-rw-r--r-- | vm/mterp/out/InterpAsm-armv4t.S | 8 | ||||
-rw-r--r-- | vm/mterp/out/InterpAsm-armv5te-vfp.S | 8 | ||||
-rw-r--r-- | vm/mterp/out/InterpAsm-armv5te.S | 8 | ||||
-rw-r--r-- | vm/mterp/out/InterpAsm-armv7-a.S | 8 |
11 files changed, 72 insertions, 51 deletions
@@ -1015,14 +1015,6 @@ static void setCommandLineDefaults() */ #if defined(WITH_JIT) gDvm.executionMode = kExecutionModeJit; - /* - * TODO - check system property and insert command-line options in - * frameworks/base/core/jni/AndroidRuntime.cpp - */ - gDvmJit.blockingMode = false; - gDvmJit.jitTableSize = 512; - gDvmJit.jitTableMask = gDvmJit.jitTableSize - 1; - gDvmJit.threshold = 200; #else gDvm.executionMode = kExecutionModeInterpFast; #endif diff --git a/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c b/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c index a76372074..2a8bde100 100644 --- a/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c +++ b/vm/compiler/codegen/arm/armv5te-vfp/ArchVariant.c @@ -48,6 +48,18 @@ bool dvmCompilerArchVariantInit(void) #include "../../../template/armv5te-vfp/TemplateOpList.h" #undef JIT_TEMPLATE + /* Target-specific configuration */ + gDvmJit.blockingMode = false; + gDvmJit.jitTableSize = 1 << 9; // 512 + gDvmJit.jitTableMask = gDvmJit.jitTableSize - 1; + gDvmJit.threshold = 200; + +#if defined(WITH_SELF_VERIFICATION) + /* Force into blocking, translate everything mode */ + gDvmJit.blockingMode = true; + gDvmJit.threshold = 1; +#endif + /* Codegen-specific assumptions */ assert(offsetof(ClassObject, vtable) < 128 && (offsetof(ClassObject, vtable) & 0x3) == 0); diff --git a/vm/compiler/codegen/arm/armv5te/ArchVariant.c b/vm/compiler/codegen/arm/armv5te/ArchVariant.c index 106703721..6dff45aa9 100644 --- a/vm/compiler/codegen/arm/armv5te/ArchVariant.c +++ b/vm/compiler/codegen/arm/armv5te/ArchVariant.c @@ -48,6 +48,18 @@ bool dvmCompilerArchVariantInit(void) #include "../../../template/armv5te/TemplateOpList.h" #undef JIT_TEMPLATE + /* Target-specific configuration */ + gDvmJit.blockingMode = false; + gDvmJit.jitTableSize = 1 << 9; // 512 + gDvmJit.jitTableMask = gDvmJit.jitTableSize - 1; + gDvmJit.threshold = 200; + +#if defined(WITH_SELF_VERIFICATION) + /* Force into blocking, translate everything mode */ + gDvmJit.blockingMode = true; + gDvmJit.threshold = 1; +#endif + /* Codegen-specific assumptions */ assert(offsetof(ClassObject, vtable) < 128 && (offsetof(ClassObject, vtable) & 0x3) == 0); diff --git a/vm/compiler/codegen/arm/armv7-a/ArchVariant.c b/vm/compiler/codegen/arm/armv7-a/ArchVariant.c index 645af567b..0e4cc2b03 100644 --- a/vm/compiler/codegen/arm/armv7-a/ArchVariant.c +++ b/vm/compiler/codegen/arm/armv7-a/ArchVariant.c @@ -44,6 +44,18 @@ bool dvmCompilerArchVariantInit(void) #include "../../../template/armv5te-vfp/TemplateOpList.h" #undef JIT_TEMPLATE + /* Target-specific configuration */ + gDvmJit.blockingMode = false; + gDvmJit.jitTableSize = 1 << 12; // 4096 + gDvmJit.jitTableMask = gDvmJit.jitTableSize - 1; + gDvmJit.threshold = 40; + +#if defined(WITH_SELF_VERIFICATION) + /* Force into blocking, translate everything mode */ + gDvmJit.blockingMode = true; + gDvmJit.threshold = 1; +#endif + /* Codegen-specific assumptions */ assert(offsetof(ClassObject, vtable) < 128 && (offsetof(ClassObject, vtable) & 0x3) == 0); diff --git a/vm/interp/Jit.c b/vm/interp/Jit.c index d31826a0c..e32751107 100644 --- a/vm/interp/Jit.c +++ b/vm/interp/Jit.c @@ -348,12 +348,6 @@ int dvmJitStartup(void) unsigned int i; bool res = true; /* Assume success */ -#if defined(WITH_SELF_VERIFICATION) - // Force JIT into blocking, translate everything mode - gDvmJit.threshold = 1; - gDvmJit.blockingMode = true; -#endif - // Create the compiler thread and setup miscellaneous chores */ res &= dvmCompilerStartup(); @@ -787,27 +781,26 @@ JitEntry *dvmFindJitEntry(const u2* pc) void* dvmJitGetCodeAddr(const u2* dPC) { int idx = dvmJitHash(dPC); + u2* npc = gDvmJit.pJitEntryTable[idx].dPC; - /* If anything is suspended, don't re-enter the code cache */ - if (gDvm.sumThreadSuspendCount > 0) { - return NULL; - } - - /* Expect a high hit rate on 1st shot */ - if (gDvmJit.pJitEntryTable[idx].dPC == dPC) { + if (npc != NULL) { + if (npc == dPC) { #if defined(EXIT_STATS) - gDvmJit.addrLookupsFound++; + gDvmJit.addrLookupsFound++; #endif - return gDvmJit.pJitEntryTable[idx].codeAddress; - } else { - int chainEndMarker = gDvmJit.jitTableSize; - while (gDvmJit.pJitEntryTable[idx].u.info.chain != chainEndMarker) { - idx = gDvmJit.pJitEntryTable[idx].u.info.chain; - if (gDvmJit.pJitEntryTable[idx].dPC == dPC) { + return gDvm.sumThreadSuspendCount ? NULL : + gDvmJit.pJitEntryTable[idx].codeAddress; + } else { + int chainEndMarker = gDvmJit.jitTableSize; + while (gDvmJit.pJitEntryTable[idx].u.info.chain != chainEndMarker) { + idx = gDvmJit.pJitEntryTable[idx].u.info.chain; + if (gDvmJit.pJitEntryTable[idx].dPC == dPC) { #if defined(EXIT_STATS) - gDvmJit.addrLookupsFound++; + gDvmJit.addrLookupsFound++; #endif - return gDvmJit.pJitEntryTable[idx].codeAddress; + return gDvm.sumThreadSuspendCount ? NULL : + gDvmJit.pJitEntryTable[idx].codeAddress; + } } } } diff --git a/vm/interp/Jit.h b/vm/interp/Jit.h index a8d82eb91..177a734ad 100644 --- a/vm/interp/Jit.h +++ b/vm/interp/Jit.h @@ -21,7 +21,7 @@ #include "InterpDefs.h" -#define JIT_PROF_SIZE 512 +#define JIT_PROF_SIZE 2048 #define JIT_MAX_TRACE_LEN 100 diff --git a/vm/mterp/armv5te/footer.S b/vm/mterp/armv5te/footer.S index 317f1517c..a58527dca 100644 --- a/vm/mterp/armv5te/footer.S +++ b/vm/mterp/armv5te/footer.S @@ -196,11 +196,11 @@ common_testUpdateProfile: common_updateProfile: eor r3,rPC,rPC,lsr #12 @ cheap, but fast hash function - lsl r3,r3,#23 @ shift out excess 511 - ldrb r1,[r0,r3,lsr #23] @ get counter + lsl r3,r3,#21 @ shift out excess 2047 + ldrb r1,[r0,r3,lsr #21] @ get counter GET_INST_OPCODE(ip) subs r1,r1,#1 @ decrement counter - strb r1,[r0,r3,lsr #23] @ and store it + strb r1,[r0,r3,lsr #21] @ and store it GOTO_OPCODE_IFNE(ip) @ if not threshold, fallthrough otherwise */ /* @@ -210,7 +210,7 @@ common_updateProfile: * jump to it now). */ GET_JIT_THRESHOLD(r1) - strb r1,[r0,r3,lsr #23] @ reset counter + strb r1,[r0,r3,lsr #21] @ reset counter EXPORT_PC() mov r0,rPC bl dvmJitGetCodeAddr @ r0<- dvmJitGetCodeAddr(rPC) diff --git a/vm/mterp/out/InterpAsm-armv4t.S b/vm/mterp/out/InterpAsm-armv4t.S index f45007f0a..759956fe1 100644 --- a/vm/mterp/out/InterpAsm-armv4t.S +++ b/vm/mterp/out/InterpAsm-armv4t.S @@ -9720,11 +9720,11 @@ common_testUpdateProfile: common_updateProfile: eor r3,rPC,rPC,lsr #12 @ cheap, but fast hash function - lsl r3,r3,#23 @ shift out excess 511 - ldrb r1,[r0,r3,lsr #23] @ get counter + lsl r3,r3,#21 @ shift out excess 2047 + ldrb r1,[r0,r3,lsr #21] @ get counter GET_INST_OPCODE(ip) subs r1,r1,#1 @ decrement counter - strb r1,[r0,r3,lsr #23] @ and store it + strb r1,[r0,r3,lsr #21] @ and store it GOTO_OPCODE_IFNE(ip) @ if not threshold, fallthrough otherwise */ /* @@ -9734,7 +9734,7 @@ common_updateProfile: * jump to it now). */ GET_JIT_THRESHOLD(r1) - strb r1,[r0,r3,lsr #23] @ reset counter + strb r1,[r0,r3,lsr #21] @ reset counter EXPORT_PC() mov r0,rPC bl dvmJitGetCodeAddr @ r0<- dvmJitGetCodeAddr(rPC) diff --git a/vm/mterp/out/InterpAsm-armv5te-vfp.S b/vm/mterp/out/InterpAsm-armv5te-vfp.S index 40861f26d..d9e7cdbc5 100644 --- a/vm/mterp/out/InterpAsm-armv5te-vfp.S +++ b/vm/mterp/out/InterpAsm-armv5te-vfp.S @@ -9238,11 +9238,11 @@ common_testUpdateProfile: common_updateProfile: eor r3,rPC,rPC,lsr #12 @ cheap, but fast hash function - lsl r3,r3,#23 @ shift out excess 511 - ldrb r1,[r0,r3,lsr #23] @ get counter + lsl r3,r3,#21 @ shift out excess 2047 + ldrb r1,[r0,r3,lsr #21] @ get counter GET_INST_OPCODE(ip) subs r1,r1,#1 @ decrement counter - strb r1,[r0,r3,lsr #23] @ and store it + strb r1,[r0,r3,lsr #21] @ and store it GOTO_OPCODE_IFNE(ip) @ if not threshold, fallthrough otherwise */ /* @@ -9252,7 +9252,7 @@ common_updateProfile: * jump to it now). */ GET_JIT_THRESHOLD(r1) - strb r1,[r0,r3,lsr #23] @ reset counter + strb r1,[r0,r3,lsr #21] @ reset counter EXPORT_PC() mov r0,rPC bl dvmJitGetCodeAddr @ r0<- dvmJitGetCodeAddr(rPC) diff --git a/vm/mterp/out/InterpAsm-armv5te.S b/vm/mterp/out/InterpAsm-armv5te.S index 9aa736f81..eb9513475 100644 --- a/vm/mterp/out/InterpAsm-armv5te.S +++ b/vm/mterp/out/InterpAsm-armv5te.S @@ -9714,11 +9714,11 @@ common_testUpdateProfile: common_updateProfile: eor r3,rPC,rPC,lsr #12 @ cheap, but fast hash function - lsl r3,r3,#23 @ shift out excess 511 - ldrb r1,[r0,r3,lsr #23] @ get counter + lsl r3,r3,#21 @ shift out excess 2047 + ldrb r1,[r0,r3,lsr #21] @ get counter GET_INST_OPCODE(ip) subs r1,r1,#1 @ decrement counter - strb r1,[r0,r3,lsr #23] @ and store it + strb r1,[r0,r3,lsr #21] @ and store it GOTO_OPCODE_IFNE(ip) @ if not threshold, fallthrough otherwise */ /* @@ -9728,7 +9728,7 @@ common_updateProfile: * jump to it now). */ GET_JIT_THRESHOLD(r1) - strb r1,[r0,r3,lsr #23] @ reset counter + strb r1,[r0,r3,lsr #21] @ reset counter EXPORT_PC() mov r0,rPC bl dvmJitGetCodeAddr @ r0<- dvmJitGetCodeAddr(rPC) diff --git a/vm/mterp/out/InterpAsm-armv7-a.S b/vm/mterp/out/InterpAsm-armv7-a.S index abb8ea1f1..28b353718 100644 --- a/vm/mterp/out/InterpAsm-armv7-a.S +++ b/vm/mterp/out/InterpAsm-armv7-a.S @@ -9174,11 +9174,11 @@ common_testUpdateProfile: common_updateProfile: eor r3,rPC,rPC,lsr #12 @ cheap, but fast hash function - lsl r3,r3,#23 @ shift out excess 511 - ldrb r1,[r0,r3,lsr #23] @ get counter + lsl r3,r3,#21 @ shift out excess 2047 + ldrb r1,[r0,r3,lsr #21] @ get counter GET_INST_OPCODE(ip) subs r1,r1,#1 @ decrement counter - strb r1,[r0,r3,lsr #23] @ and store it + strb r1,[r0,r3,lsr #21] @ and store it GOTO_OPCODE_IFNE(ip) @ if not threshold, fallthrough otherwise */ /* @@ -9188,7 +9188,7 @@ common_updateProfile: * jump to it now). */ GET_JIT_THRESHOLD(r1) - strb r1,[r0,r3,lsr #23] @ reset counter + strb r1,[r0,r3,lsr #21] @ reset counter EXPORT_PC() mov r0,rPC bl dvmJitGetCodeAddr @ r0<- dvmJitGetCodeAddr(rPC) |