Tweak the interpreter entries and 2nd level trace filter to capture more traces.
Real changes:
1) Add a new entry point from JIT to the interpreter to request hot traces w/o
doing chaining.
2) Increase the granularity of the secondary profile filter to match 64-byte
chunks using 64 entries.
The remaining are just cosmetic changes.
diff --git a/vm/compiler/Compiler.h b/vm/compiler/Compiler.h
index 3f60a5e..932f41d 100644
--- a/vm/compiler/Compiler.h
+++ b/vm/compiler/Compiler.h
@@ -76,12 +76,13 @@
kJitOff = 0,
kJitNormal = 1, // Profiling in mterp or running native
kJitTSelectRequest = 2, // Transition state - start trace selection
- kJitTSelect = 3, // Actively selecting trace in dbg interp
- kJitTSelectAbort = 4, // Something threw during selection - abort
- kJitTSelectEnd = 5, // Done with the trace - wrap it up
- kJitSingleStep = 6, // Single step interpretation
- kJitSingleStepEnd = 7, // Done with single step, return to mterp
- kJitSelfVerification = 8, // Self Verification Mode
+ kJitTSelectRequestHot = 3, // Transition state - start hot trace selection
+ kJitTSelect = 4, // Actively selecting trace in dbg interp
+ kJitTSelectAbort = 5, // Something threw during selection - abort
+ kJitTSelectEnd = 6, // Done with the trace - wrap it up
+ kJitSingleStep = 7, // Single step interpretation
+ kJitSingleStepEnd = 8, // Done with single step, return to mterp
+ kJitSelfVerification = 9, // Self Verification Mode
} JitState;
#if defined(WITH_SELF_VERIFICATION)
@@ -90,11 +91,12 @@
kSVSStart = 1, // Shadow space set up, running compiled code
kSVSPunt = 2, // Exiting compiled code by punting
kSVSSingleStep = 3, // Exiting compiled code by single stepping
- kSVSTraceSelect = 4, // Exiting compiled code by trace select
- kSVSNormal = 5, // Exiting compiled code normally
- kSVSNoChain = 6, // Exiting compiled code by no chain
- kSVSBackwardBranch = 7, // Exiting compiled code with backward branch trace
- kSVSDebugInterp = 8, // Normal state restored, running debug interpreter
+ kSVSTraceSelectNoChain = 4,// Exiting compiled code by trace select no chain
+ kSVSTraceSelect = 5, // Exiting compiled code by trace select
+ kSVSNormal = 6, // Exiting compiled code normally
+ kSVSNoChain = 7, // Exiting compiled code by no chain
+ kSVSBackwardBranch = 8, // Exiting compiled code with backward branch trace
+ kSVSDebugInterp = 9, // Normal state restored, running debug interpreter
} SelfVerificationState;
#endif
diff --git a/vm/compiler/codegen/arm/Assemble.c b/vm/compiler/codegen/arm/Assemble.c
index 7f8ad9e..2ad0842 100644
--- a/vm/compiler/codegen/arm/Assemble.c
+++ b/vm/compiler/codegen/arm/Assemble.c
@@ -1597,7 +1597,7 @@
case kChainingCellHot:
case kChainingCellInvokeSingleton:
targetOffset = offsetof(InterpState,
- jitToInterpEntries.dvmJitToTraceSelect);
+ jitToInterpEntries.dvmJitToInterpTraceSelect);
break;
case kChainingCellInvokePredicted:
targetOffset = 0;
@@ -1614,7 +1614,7 @@
#if defined(WITH_SELF_VERIFICATION)
case kChainingCellBackwardBranch:
targetOffset = offsetof(InterpState,
- jitToInterpEntries.dvmJitToBackwardBranch);
+ jitToInterpEntries.dvmJitToInterpBackwardBranch);
break;
#elif defined(WITH_JIT_TUNING)
case kChainingCellBackwardBranch:
diff --git a/vm/compiler/codegen/arm/CodegenDriver.c b/vm/compiler/codegen/arm/CodegenDriver.c
index d3b10a4..a6aafd1 100644
--- a/vm/compiler/codegen/arm/CodegenDriver.c
+++ b/vm/compiler/codegen/arm/CodegenDriver.c
@@ -3094,7 +3094,7 @@
unsigned int offset)
{
loadWordDisp(cUnit, rGLUE, offsetof(InterpState,
- jitToInterpEntries.dvmJitToTraceSelect), r0);
+ jitToInterpEntries.dvmJitToInterpTraceSelect), r0);
opReg(cUnit, kOpBlx, r0);
addWordData(cUnit, (int) (cUnit->method->insns + offset), true);
}
@@ -3106,7 +3106,8 @@
{
#if defined(WITH_SELF_VERIFICATION)
newLIR3(cUnit, kThumbLdrRRI5, r0, rGLUE,
- offsetof(InterpState, jitToInterpEntries.dvmJitToBackwardBranch) >> 2);
+ offsetof(InterpState,
+ jitToInterpEntries.dvmJitToInterpBackwardBranch) >> 2);
#else
newLIR3(cUnit, kThumbLdrRRI5, r0, rGLUE,
offsetof(InterpState, jitToInterpEntries.dvmJitToInterpNormal) >> 2);
@@ -3121,7 +3122,7 @@
const Method *callee)
{
loadWordDisp(cUnit, rGLUE, offsetof(InterpState,
- jitToInterpEntries.dvmJitToTraceSelect), r0);
+ jitToInterpEntries.dvmJitToInterpTraceSelect), r0);
opReg(cUnit, kOpBlx, r0);
addWordData(cUnit, (int) (callee->insns), true);
}
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
index 945203e..be14a5c 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NATIVE.S
@@ -62,7 +62,7 @@
bxne r2 @ yes - go ahead
@ continue executing the next instruction through the interpreter
- ldr r1, .LdvmJitToInterpNoChain @ defined in footer.S
+ ldr r1, .LdvmJitToInterpTraceSelectNoChain @ defined in footer.S
add rPC, r0, #6 @ reconstruct new rPC (advance 6 bytes)
#if defined(EXIT_STATS)
mov r0, #kCallsiteInterpreted
diff --git a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S
index c4f766a..c08e556 100644
--- a/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S
+++ b/vm/compiler/template/armv5te/TEMPLATE_INVOKE_METHOD_NO_OPT.S
@@ -37,7 +37,7 @@
bxne lr @ bail to the interpreter
#endif
- ldr r10, .LdvmJitToInterpNoChain
+ ldr r10, .LdvmJitToInterpTraceSelectNoChain
ldr r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
ldr r2, [rGLUE, #offGlue_self] @ r2<- glue->self
@@ -51,4 +51,4 @@
#if defined(EXIT_STATS)
mov r0, #kInlineCacheMiss
#endif
- mov pc, r10 @ dvmJitToInterpNoChain
+ mov pc, r10 @ dvmJitToInterpTraceSelectNoChain
diff --git a/vm/compiler/template/armv5te/footer.S b/vm/compiler/template/armv5te/footer.S
index 1709bf3..8937495 100644
--- a/vm/compiler/template/armv5te/footer.S
+++ b/vm/compiler/template/armv5te/footer.S
@@ -48,7 +48,7 @@
bxne r2 @ yes - go ahead
@ continue executing the next instruction through the interpreter
- ldr r1, .LdvmJitToInterpNoChain @ defined in footer.S
+ ldr r1, .LdvmJitToInterpTraceSelectNoChain @ defined in footer.S
add rPC, r0, #6 @ reconstruct new rPC (advance 6 bytes)
#if defined(EXIT_STATS)
mov r0, #kCallsiteInterpreted
@@ -71,6 +71,8 @@
.align 2
.LdvmAsmInstructionStart:
.word dvmAsmInstructionStart
+.LdvmJitToInterpTraceSelectNoChain:
+ .word dvmJitToInterpTraceSelectNoChain
.LdvmJitToInterpNoChain:
.word dvmJitToInterpNoChain
.LdvmMterpStdBail:
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S b/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
index 71cb120..ac3455a 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv5te-vfp.S
@@ -267,7 +267,7 @@
bxne lr @ bail to the interpreter
#endif
- ldr r10, .LdvmJitToInterpNoChain
+ ldr r10, .LdvmJitToInterpTraceSelectNoChain
ldr r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
ldr r2, [rGLUE, #offGlue_self] @ r2<- glue->self
@@ -281,7 +281,7 @@
#if defined(EXIT_STATS)
mov r0, #kInlineCacheMiss
#endif
- mov pc, r10 @ dvmJitToInterpNoChain
+ mov pc, r10 @ dvmJitToInterpTraceSelectNoChain
/* ------------------------------ */
.balign 4
@@ -453,7 +453,7 @@
bxne r2 @ yes - go ahead
@ continue executing the next instruction through the interpreter
- ldr r1, .LdvmJitToInterpNoChain @ defined in footer.S
+ ldr r1, .LdvmJitToInterpTraceSelectNoChain @ defined in footer.S
add rPC, r0, #6 @ reconstruct new rPC (advance 6 bytes)
#if defined(EXIT_STATS)
mov r0, #kCallsiteInterpreted
@@ -1489,7 +1489,7 @@
bxne r2 @ yes - go ahead
@ continue executing the next instruction through the interpreter
- ldr r1, .LdvmJitToInterpNoChain @ defined in footer.S
+ ldr r1, .LdvmJitToInterpTraceSelectNoChain @ defined in footer.S
add rPC, r0, #6 @ reconstruct new rPC (advance 6 bytes)
#if defined(EXIT_STATS)
mov r0, #kCallsiteInterpreted
@@ -1512,6 +1512,8 @@
.align 2
.LdvmAsmInstructionStart:
.word dvmAsmInstructionStart
+.LdvmJitToInterpTraceSelectNoChain:
+ .word dvmJitToInterpTraceSelectNoChain
.LdvmJitToInterpNoChain:
.word dvmJitToInterpNoChain
.LdvmMterpStdBail:
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
index 1da4cb8..4863141 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv5te.S
@@ -267,7 +267,7 @@
bxne lr @ bail to the interpreter
#endif
- ldr r10, .LdvmJitToInterpNoChain
+ ldr r10, .LdvmJitToInterpTraceSelectNoChain
ldr r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
ldr r2, [rGLUE, #offGlue_self] @ r2<- glue->self
@@ -281,7 +281,7 @@
#if defined(EXIT_STATS)
mov r0, #kInlineCacheMiss
#endif
- mov pc, r10 @ dvmJitToInterpNoChain
+ mov pc, r10 @ dvmJitToInterpTraceSelectNoChain
/* ------------------------------ */
.balign 4
@@ -453,7 +453,7 @@
bxne r2 @ yes - go ahead
@ continue executing the next instruction through the interpreter
- ldr r1, .LdvmJitToInterpNoChain @ defined in footer.S
+ ldr r1, .LdvmJitToInterpTraceSelectNoChain @ defined in footer.S
add rPC, r0, #6 @ reconstruct new rPC (advance 6 bytes)
#if defined(EXIT_STATS)
mov r0, #kCallsiteInterpreted
@@ -1217,7 +1217,7 @@
bxne r2 @ yes - go ahead
@ continue executing the next instruction through the interpreter
- ldr r1, .LdvmJitToInterpNoChain @ defined in footer.S
+ ldr r1, .LdvmJitToInterpTraceSelectNoChain @ defined in footer.S
add rPC, r0, #6 @ reconstruct new rPC (advance 6 bytes)
#if defined(EXIT_STATS)
mov r0, #kCallsiteInterpreted
@@ -1240,6 +1240,8 @@
.align 2
.LdvmAsmInstructionStart:
.word dvmAsmInstructionStart
+.LdvmJitToInterpTraceSelectNoChain:
+ .word dvmJitToInterpTraceSelectNoChain
.LdvmJitToInterpNoChain:
.word dvmJitToInterpNoChain
.LdvmMterpStdBail:
diff --git a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
index e83e773..0b06826 100644
--- a/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
+++ b/vm/compiler/template/out/CompilerTemplateAsm-armv7-a.S
@@ -267,7 +267,7 @@
bxne lr @ bail to the interpreter
#endif
- ldr r10, .LdvmJitToInterpNoChain
+ ldr r10, .LdvmJitToInterpTraceSelectNoChain
ldr r3, [r9, #offClassObject_pDvmDex] @ r3<- method->clazz->pDvmDex
ldr r2, [rGLUE, #offGlue_self] @ r2<- glue->self
@@ -281,7 +281,7 @@
#if defined(EXIT_STATS)
mov r0, #kInlineCacheMiss
#endif
- mov pc, r10 @ dvmJitToInterpNoChain
+ mov pc, r10 @ dvmJitToInterpTraceSelectNoChain
/* ------------------------------ */
.balign 4
@@ -453,7 +453,7 @@
bxne r2 @ yes - go ahead
@ continue executing the next instruction through the interpreter
- ldr r1, .LdvmJitToInterpNoChain @ defined in footer.S
+ ldr r1, .LdvmJitToInterpTraceSelectNoChain @ defined in footer.S
add rPC, r0, #6 @ reconstruct new rPC (advance 6 bytes)
#if defined(EXIT_STATS)
mov r0, #kCallsiteInterpreted
@@ -1489,7 +1489,7 @@
bxne r2 @ yes - go ahead
@ continue executing the next instruction through the interpreter
- ldr r1, .LdvmJitToInterpNoChain @ defined in footer.S
+ ldr r1, .LdvmJitToInterpTraceSelectNoChain @ defined in footer.S
add rPC, r0, #6 @ reconstruct new rPC (advance 6 bytes)
#if defined(EXIT_STATS)
mov r0, #kCallsiteInterpreted
@@ -1512,6 +1512,8 @@
.align 2
.LdvmAsmInstructionStart:
.word dvmAsmInstructionStart
+.LdvmJitToInterpTraceSelectNoChain:
+ .word dvmJitToInterpTraceSelectNoChain
.LdvmJitToInterpNoChain:
.word dvmJitToInterpNoChain
.LdvmMterpStdBail: