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