1b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFaddenHANDLE_OPCODE(OP_EXECUTE_INLINE_RANGE /*{vCCCC..v(CCCC+AA-1)}, inline@BBBB*/) 2b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden { 3b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden u4 arg0, arg1, arg2, arg3; 4b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden arg0 = arg1 = arg2 = arg3 = 0; /* placate gcc */ 5b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden 6b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden EXPORT_PC(); 7b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden 8b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden vsrc1 = INST_AA(inst); /* #of args */ 9b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden ref = FETCH(1); /* inline call "ref" */ 10b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden vdst = FETCH(2); /* range base */ 11b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden ILOGV("|execute-inline-range args=%d @%d {regs=v%d-v%d}", 12b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden vsrc1, ref, vdst, vdst+vsrc1-1); 13b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden 14b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden assert((vdst >> 16) == 0); // 16-bit type -or- high 16 bits clear 15b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden assert(vsrc1 <= 4); 16b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden 17b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden switch (vsrc1) { 18b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden case 4: 19b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden arg3 = GET_REGISTER(vdst+3); 20b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden /* fall through */ 21b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden case 3: 22b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden arg2 = GET_REGISTER(vdst+2); 23b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden /* fall through */ 24b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden case 2: 25b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden arg1 = GET_REGISTER(vdst+1); 26b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden /* fall through */ 27b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden case 1: 28b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden arg0 = GET_REGISTER(vdst+0); 29b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden /* fall through */ 30b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden default: // case 0 31b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden ; 32b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden } 33b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden 340c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen if (self->interpBreak.ctl.subMode & kSubModeDebugProfile) { 359a3147c7412f4794434b4c2604aa2ba784867774buzbee if (!dvmPerformInlineOp4Dbg(arg0, arg1, arg2, arg3, &retval, ref)) 369a3147c7412f4794434b4c2604aa2ba784867774buzbee GOTO_exceptionThrown(); 379a3147c7412f4794434b4c2604aa2ba784867774buzbee } else { 389a3147c7412f4794434b4c2604aa2ba784867774buzbee if (!dvmPerformInlineOp4Std(arg0, arg1, arg2, arg3, &retval, ref)) 399a3147c7412f4794434b4c2604aa2ba784867774buzbee GOTO_exceptionThrown(); 409a3147c7412f4794434b4c2604aa2ba784867774buzbee } 41b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden } 42b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFadden FINISH(3); 43b0a0541b59d1126ff77c88de742b4a74579fe296Andy McFaddenOP_END 44