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 dvmThrowException("Ljava/lang/InternalError;", 18 "bad fill array data"); 19 GOTO_exceptionThrown(); 20 } 21 #endif 22 arrayObj = (ArrayObject*) GET_REGISTER(vsrc1); 23 if (!dvmInterpHandleFillArrayData(arrayObj, arrayData)) { 24 GOTO_exceptionThrown(); 25 } 26 FINISH(3); 27 } 28 OP_END 29