HANDLE_OPCODE(OP_FILL_ARRAY_DATA) /*vAA, +BBBBBBBB*/
{
const u2* arrayData;
s4 offset;
ArrayObject* arrayObj;
EXPORT_PC();
vsrc1 = INST_AA(inst);
offset = FETCH(1) | (((s4) FETCH(2)) << 16);
ILOGV("|fill-array-data v%d +0x%04x", vsrc1, offset);
arrayData = pc + offset; // offset in 16-bit units
#ifndef NDEBUG
if (arrayData < curMethod->insns ||
arrayData >= curMethod->insns + dvmGetMethodInsnsSize(curMethod))
{
/* should have been caught in verifier */
dvmThrowInternalError("bad fill array data");
GOTO_exceptionThrown();
}
#endif
arrayObj = (ArrayObject*) GET_REGISTER(vsrc1);
if (!dvmInterpHandleFillArrayData(arrayObj, arrayData)) {
GOTO_exceptionThrown();
}
FINISH(3);
}
OP_END