Improved method invocation performance: 1.5x for virtual and 2.8x for interface.
- Implemented predicted chaining for invoke virtual and interface.
- Eliminated a little bit of fat for invoke native.
- Added 078-polymorphic-virtual for stress tests.
diff --git a/vm/interp/Jit.c b/vm/interp/Jit.c
index 7d922bb..acd4704 100644
--- a/vm/interp/Jit.c
+++ b/vm/interp/Jit.c
@@ -191,8 +191,10 @@
#endif
LOGD("JIT: %d Translation chains", gDvmJit.translationChains);
#if defined(INVOKE_STATS)
- LOGD("JIT: Invoke: %d noOpt, %d chainable, %d return",
- gDvmJit.invokeNoOpt, gDvmJit.invokeChain, gDvmJit.returnOp);
+ LOGD("JIT: Invoke: %d chainable, %d pred. chain, %d native, "
+ "%d return",
+ gDvmJit.invokeChain, gDvmJit.invokePredictedChain,
+ gDvmJit.invokeNative, gDvmJit.returnOp);
#endif
if (gDvmJit.profile) {
int numTraces = 0;
@@ -367,6 +369,7 @@
switchInterp = !debugOrProfile;
break;
case kJitNormal:
+ switchInterp = !debugOrProfile;
break;
default:
dvmAbort();