diff options
author | Andy McFadden <fadden@android.com> | 2009-11-19 10:23:41 -0800 |
---|---|---|
committer | Andy McFadden <fadden@android.com> | 2009-11-20 10:58:03 -0800 |
commit | b0a0541b59d1126ff77c88de742b4a74579fe296 (patch) | |
tree | 6af78c04d58182deb16166bf81d5a7ac3870e5ac /dexdump | |
parent | ab875c79c56eacc510b09710d38a9b20f7337486 (diff) | |
download | android_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.c | 12 | ||||
-rw-r--r-- | dexdump/OpCodeNames.c | 2 |
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", |