OSDN Git Service

dalvik: return positive hash code in Dalvik with Houdini
[android-x86/dalvik.git] / libdex / InstrUtils.cpp
index 59c22c7..be343f0 100644 (file)
@@ -48,22 +48,6 @@ static InstructionWidth gInstructionWidthTable[kNumPackedOpcodes] = {
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 3, 3,
     3, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 0,
-    4, 4, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-    5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-    4, 4, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4,
     // END(libdex-widths)
 };
 
@@ -329,262 +313,6 @@ static u1 gOpcodeFlagsTable[kNumPackedOpcodes] = {
     kInstrCanContinue|kInstrCanThrow,
     kInstrCanContinue|kInstrCanThrow,
     0,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow|kInstrInvoke,
-    kInstrCanContinue|kInstrCanThrow|kInstrInvoke,
-    kInstrCanContinue|kInstrCanThrow|kInstrInvoke,
-    kInstrCanContinue|kInstrCanThrow|kInstrInvoke,
-    kInstrCanContinue|kInstrCanThrow|kInstrInvoke,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    kInstrCanContinue|kInstrCanThrow|kInstrInvoke,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanContinue|kInstrCanThrow,
-    kInstrCanThrow,
     // END(libdex-flags)
 };
 
@@ -630,44 +358,7 @@ static u1 gInstructionFormatTable[kNumPackedOpcodes] = {
     kFmt22c,  kFmt22c,  kFmt22c,  kFmt21c,  kFmt21c,  kFmt00x,  kFmt20bc,
     kFmt35mi, kFmt3rmi, kFmt35c,  kFmt10x,  kFmt22cs, kFmt22cs, kFmt22cs,
     kFmt22cs, kFmt22cs, kFmt22cs, kFmt35ms, kFmt3rms, kFmt35ms, kFmt3rms,
-    kFmt22c,  kFmt21c,  kFmt21c,  kFmt00x,  kFmt41c,  kFmt41c,  kFmt52c,
-    kFmt41c,  kFmt52c,  kFmt5rc,  kFmt52c,  kFmt52c,  kFmt52c,  kFmt52c,
-    kFmt52c,  kFmt52c,  kFmt52c,  kFmt52c,  kFmt52c,  kFmt52c,  kFmt52c,
-    kFmt52c,  kFmt52c,  kFmt52c,  kFmt41c,  kFmt41c,  kFmt41c,  kFmt41c,
-    kFmt41c,  kFmt41c,  kFmt41c,  kFmt41c,  kFmt41c,  kFmt41c,  kFmt41c,
-    kFmt41c,  kFmt41c,  kFmt41c,  kFmt5rc,  kFmt5rc,  kFmt5rc,  kFmt5rc,
-    kFmt5rc,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,  kFmt00x,
-    kFmt00x,  kFmt5rc,  kFmt52c,  kFmt52c,  kFmt52c,  kFmt52c,  kFmt52c,
-    kFmt52c,  kFmt41c,  kFmt41c,  kFmt41c,  kFmt41c,  kFmt41c,  kFmt41c,
-    kFmt40sc,
+    kFmt22c,  kFmt21c,  kFmt21c,  kFmt00x,
     // END(libdex-formats)
 };
 
@@ -762,92 +453,7 @@ static u1 gInstructionIndexTypeTable[kNumPackedOpcodes] = {
     kIndexFieldOffset,  kIndexFieldOffset,  kIndexVtableOffset,
     kIndexVtableOffset, kIndexVtableOffset, kIndexVtableOffset,
     kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexUnknown,      kIndexTypeRef,      kIndexTypeRef,
-    kIndexTypeRef,      kIndexTypeRef,      kIndexTypeRef,
-    kIndexTypeRef,      kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexMethodRef,
-    kIndexMethodRef,    kIndexMethodRef,    kIndexMethodRef,
-    kIndexMethodRef,    kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexUnknown,      kIndexUnknown,      kIndexUnknown,
-    kIndexMethodRef,    kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexFieldRef,     kIndexFieldRef,
-    kIndexFieldRef,     kIndexVaries,
+    kIndexUnknown,
     // END(libdex-index-types)
 };
 
@@ -1004,7 +610,7 @@ void dexDecodeInstruction(const u2* insns, DecodedInstruction* pDec)
             case 5: {
                 if (format == kFmt35mi) {
                     /* A fifth arg is verboten for inline invokes. */
-                    LOGW("Invalid arg count in 35mi (5)");
+                    ALOGW("Invalid arg count in 35mi (5)");
                     goto bail;
                 }
                 /*
@@ -1020,7 +626,7 @@ void dexDecodeInstruction(const u2* insns, DecodedInstruction* pDec)
             case 1: pDec->vC = pDec->arg[0] = regList & 0x0f; break;
             case 0: break; // Valid, but no need to do anything.
             default:
-                LOGW("Invalid arg count in 35c/35ms/35mi (%d)", count);
+                ALOGW("Invalid arg count in 35c/35ms/35mi (%d)", count);
                 goto bail;
             }
         }
@@ -1036,45 +642,8 @@ void dexDecodeInstruction(const u2* insns, DecodedInstruction* pDec)
         pDec->vA = INST_AA(inst);
         pDec->vB_wide = FETCH_u4(1) | ((u8) FETCH_u4(3) << 32);
         break;
-    case kFmt33x:       // exop vAA, vBB, vCCCC
-        pDec->vA = FETCH(1) & 0xff;
-        pDec->vB = FETCH(1) >> 8;
-        pDec->vC = FETCH(2);
-        break;
-    case kFmt32s:       // exop vAA, vBB, #+CCCC
-        pDec->vA = FETCH(1) & 0xff;
-        pDec->vB = FETCH(1) >> 8;
-        pDec->vC = (s2) FETCH(2);                   // sign-extend 16-bit value
-        break;
-    case kFmt40sc:      // [opt] exop AAAA, thing@BBBBBBBB
-    case kFmt41c:       // exop vAAAA, thing@BBBBBBBB
-        /*
-         * The order of fields for this format in the spec is {B, A},
-         * to match formats 21c and 31c.
-         */
-        pDec->vB = FETCH_u4(1);                     // 32-bit value
-        pDec->vA = FETCH(3);
-        break;
-    case kFmt52c:       // exop vAAAA, vBBBB, thing@CCCCCCCC
-        /*
-         * The order of fields for this format in the spec is {C, A, B},
-         * to match formats 22c and 22cs.
-         */
-        pDec->vC = FETCH_u4(1);                     // 32-bit value
-        pDec->vA = FETCH(3);
-        pDec->vB = FETCH(4);
-        break;
-    case kFmt5rc:       // exop {vCCCC .. v(CCCC+AAAA-1)}, meth@BBBBBBBB
-        /*
-         * The order of fields for this format in the spec is {B, A, C},
-         * to match formats 3rc and friends.
-         */
-        pDec->vB = FETCH_u4(1);                     // 32-bit value
-        pDec->vA = FETCH(3);
-        pDec->vC = FETCH(4);
-        break;
     default:
-        LOGW("Can't decode unexpected format %d (op=%d)", format, opcode);
+        ALOGW("Can't decode unexpected format %d (op=%d)", format, opcode);
         assert(false);
         break;
     }