summaryrefslogtreecommitdiffstats
path: root/dexdump
diff options
context:
space:
mode:
authorAndy McFadden <fadden@android.com>2009-11-19 10:23:41 -0800
committerAndy McFadden <fadden@android.com>2009-11-20 10:58:03 -0800
commitb0a0541b59d1126ff77c88de742b4a74579fe296 (patch)
tree6af78c04d58182deb16166bf81d5a7ac3870e5ac /dexdump
parentab875c79c56eacc510b09710d38a9b20f7337486 (diff)
downloadandroid_dalvik-b0a0541b59d1126ff77c88de742b4a74579fe296.tar.gz
android_dalvik-b0a0541b59d1126ff77c88de742b4a74579fe296.tar.bz2
android_dalvik-b0a0541b59d1126ff77c88de742b4a74579fe296.zip
Add execute-inline/range instruction.
Like "execute-inline", this is an instruction generated by dexopt that replaces a method invoke instruction. It's useful for small, frequently called methods in the core libs. As with execute-inline, we allow at most 4 arguments, but with /range we're no longer limited to the low 16 registers. Also: marked execute-inline as being able to throw an exception. Needed: native x86 implementation; support in JIT. For bug 2268232.
Diffstat (limited to 'dexdump')
-rw-r--r--dexdump/DexDump.c12
-rw-r--r--dexdump/OpCodeNames.c2
2 files changed, 13 insertions, 1 deletions
diff --git a/dexdump/DexDump.c b/dexdump/DexDump.c
index 6fed7aaf4..b3b0839f7 100644
--- a/dexdump/DexDump.c
+++ b/dexdump/DexDump.c
@@ -857,6 +857,18 @@ void dumpInstruction(DexFile* pDexFile, const DexCode* pCode, int insnIdx,
printf("}, [%04x] // vtable #%04x", pDecInsn->vB, pDecInsn->vB);
}
break;
+ case kFmt3rinline: // [opt] execute-inline/range
+ {
+ fputs(" {", stdout);
+ for (i = 0; i < (int) pDecInsn->vA; i++) {
+ if (i == 0)
+ printf("v%d", pDecInsn->vC + i);
+ else
+ printf(", v%d", pDecInsn->vC + i);
+ }
+ printf("}, [%04x] // inline #%04x", pDecInsn->vB, pDecInsn->vB);
+ }
+ break;
case kFmt3inline: // [opt] inline invoke
{
#if 0
diff --git a/dexdump/OpCodeNames.c b/dexdump/OpCodeNames.c
index 6a1a52a41..97b707efe 100644
--- a/dexdump/OpCodeNames.c
+++ b/dexdump/OpCodeNames.c
@@ -299,7 +299,7 @@ static const char* gOpNames[256] = {
"^breakpoint", // does not appear in DEX files
"^throw-verification-error", // does not appear in DEX files
"+execute-inline",
- "UNUSED",
+ "+execute-inline/range",
/* 0xf0 */
"+invoke-direct-empty",