1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectHANDLE_OPCODE(OP_INSTANCE_OF /*vA, vB, class@CCCC*/)
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ClassObject* clazz;
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object* obj;
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        vdst = INST_A(inst);
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        vsrc1 = INST_B(inst);   /* object to check */
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ref = FETCH(1);         /* class to check against */
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ILOGV("|instance-of v%d,v%d,class@0x%04x", vdst, vsrc1, ref);
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        obj = (Object*)GET_REGISTER(vsrc1);
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (obj == NULL) {
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            SET_REGISTER(vdst, 0);
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if defined(WITH_EXTRA_OBJECT_VALIDATION)
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (!checkForNullExportPC(obj, fp, pc))
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                GOTO_exceptionThrown();
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            clazz = dvmDexGetResolvedClass(methodClassDex, ref);
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (clazz == NULL) {
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                EXPORT_PC();
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                clazz = dvmResolveClass(curMethod->clazz, ref, true);
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (clazz == NULL)
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    GOTO_exceptionThrown();
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            SET_REGISTER(vdst, dvmInstanceof(obj->clazz, clazz));
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FINISH(2);
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_END
31