HANDLE_OPCODE(OP_EXECUTE_INLINE_RANGE /*{vCCCC..v(CCCC+AA-1)}, inline@BBBB*/) { u4 arg0, arg1, arg2, arg3; arg0 = arg1 = arg2 = arg3 = 0; /* placate gcc */ EXPORT_PC(); vsrc1 = INST_AA(inst); /* #of args */ ref = FETCH(1); /* inline call "ref" */ vdst = FETCH(2); /* range base */ ILOGV("|execute-inline-range args=%d @%d {regs=v%d-v%d}", vsrc1, ref, vdst, vdst+vsrc1-1); assert((vdst >> 16) == 0); // 16-bit type -or- high 16 bits clear assert(vsrc1 <= 4); switch (vsrc1) { case 4: arg3 = GET_REGISTER(vdst+3); /* fall through */ case 3: arg2 = GET_REGISTER(vdst+2); /* fall through */ case 2: arg1 = GET_REGISTER(vdst+1); /* fall through */ case 1: arg0 = GET_REGISTER(vdst+0); /* fall through */ default: // case 0 ; } #if INTERP_TYPE == INTERP_DBG if (!dvmPerformInlineOp4Dbg(arg0, arg1, arg2, arg3, &retval, ref)) GOTO_exceptionThrown(); #else if (!dvmPerformInlineOp4Std(arg0, arg1, arg2, arg3, &retval, ref)) GOTO_exceptionThrown(); #endif } FINISH(3); OP_END