HANDLE_OPCODE(OP_FILL_ARRAY_DATA)1HANDLE_OPCODE(OP_FILL_ARRAY_DATA) /*vAA, +BBBBBBBB*/ 2 { 3 const u2* arrayData; 4 s4 offset; 5 ArrayObject* arrayObj; 6 7 EXPORT_PC(); 8 vsrc1 = INST_AA(inst); 9 offset = FETCH(1) | (((s4) FETCH(2)) << 16); 10 ILOGV("|fill-array-data v%d +0x%04x", vsrc1, offset); 11 arrayData = pc + offset; // offset in 16-bit units 12 #ifndef NDEBUG 13 if (arrayData < curMethod->insns || 14 arrayData >= curMethod->insns + dvmGetMethodInsnsSize(curMethod)) 15 { 16 /* should have been caught in verifier */ 17 dvmThrowInternalError("bad fill array data"); 18 GOTO_exceptionThrown(); 19 } 20 #endif 21 arrayObj = (ArrayObject*) GET_REGISTER(vsrc1); 22 if (!dvmInterpHandleFillArrayData(arrayObj, arrayData)) { 23 GOTO_exceptionThrown(); 24 } 25 FINISH(3); 26 } 27 OP_END 28