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