在davik vm / mterp / out / InterpC-portable.cpp代码中,当解释invokeMethod时,我发现它只能处理count小于或等于5的情况:

        switch (count) {
        case 5:
            outs[4] = GET_REGISTER(vsrc1 & 0x0f);
        case 4:
            outs[3] = GET_REGISTER(vdst >> 12);
        case 3:
            outs[2] = GET_REGISTER((vdst & 0x0f00) >> 8);
        case 2:
            outs[1] = GET_REGISTER((vdst & 0x00f0) >> 4);
        case 1:
            outs[0] = GET_REGISTER(vdst & 0x0f);
        default:
            ;
        }


那么当参数大小大于5时该怎么办?

最佳答案

对不起,我错过了一些事情,我提到的场景是非远程通话的情况,我错过了一个远程通话:

     */
    if (methodCallRange) {
        // could use memcpy or a "Duff's device"; most functions have
        // so few args it won't matter much
        assert(vsrc1 <= curMethod->outsSize);
        assert(vsrc1 == methodToCall->insSize);
        outs = OUTS_FROM_FP(fp, vsrc1);

        for (i = 0; i < vsrc1; i++)
            outs[i] = GET_REGISTER(vdst+i);

        ....

所以在这里处理!

10-08 07:10