1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectHANDLE_OPCODE(OP_APUT_OBJECT /*vAA, vBB, vCC*/)
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ArrayObject* arrayObj;
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object* obj;
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        u2 arrayInfo;
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        EXPORT_PC();
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        vdst = INST_AA(inst);       /* AA: source value */
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        arrayInfo = FETCH(1);
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        vsrc1 = arrayInfo & 0xff;   /* BB: array ptr */
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        vsrc2 = arrayInfo >> 8;     /* CC: index */
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ILOGV("|aput%s v%d,v%d,v%d", "-object", vdst, vsrc1, vsrc2);
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        arrayObj = (ArrayObject*) GET_REGISTER(vsrc1);
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!checkForNull((Object*) arrayObj))
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            GOTO_exceptionThrown();
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (GET_REGISTER(vsrc2) >= arrayObj->length) {
1674501e600dcb5634aa26aee0a3f57f2b45b213f2Dan Bornstein            dvmThrowArrayIndexOutOfBoundsException(
1747f58250c5177adba475b0b11a36151ac0ce9ab9Dan Bornstein                arrayObj->length, GET_REGISTER(vsrc2));
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            GOTO_exceptionThrown();
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        obj = (Object*) GET_REGISTER(vdst);
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (obj != NULL) {
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (!checkForNull(obj))
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                GOTO_exceptionThrown();
24a62c3a0ab3fcdde37f47d16e9699a935ae7a8e88Carl Shapiro            if (!dvmCanPutArrayElement(obj->clazz, arrayObj->clazz)) {
2592c1f6f1b4249e4e379452ee7b49f027052bf4ceSteve Block                ALOGV("Can't put a '%s'(%p) into array type='%s'(%p)",
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    obj->clazz->descriptor, obj,
27bb046193c2da5d43a57b2fa8a17a0f634bf003baElliott Hughes                    arrayObj->clazz->descriptor, arrayObj);
28a62c3a0ab3fcdde37f47d16e9699a935ae7a8e88Carl Shapiro                dvmThrowArrayStoreExceptionIncompatibleElement(obj->clazz, arrayObj->clazz);
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                GOTO_exceptionThrown();
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ILOGV("+ APUT[%d]=0x%08x", GET_REGISTER(vsrc2), GET_REGISTER(vdst));
33364f9d924cbd9d392744a66f80cc084c3d80caf0Barry Hayes        dvmSetObjectArrayElement(arrayObj,
34364f9d924cbd9d392744a66f80cc084c3d80caf0Barry Hayes                                 GET_REGISTER(vsrc2),
35364f9d924cbd9d392744a66f80cc084c3d80caf0Barry Hayes                                 (Object *)GET_REGISTER(vdst));
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FINISH(2);
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectOP_END
39