⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vs1.0_inst.cpp

📁 使用stl技术,(还没看,是听说的)
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        vs10_transstring.append( ", " );
        src[1].Translate();
        ninstr = 1;
        break;
    case VS10_DP4: 
        vs10_transstring.append( "DP4    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        vs10_transstring.append( ", " );
        src[1].Translate();
        ninstr = 1;
        break;
    case VS10_DST: 
        vs10_transstring.append( "DST    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        vs10_transstring.append( ", " );
        src[1].Translate();
        ninstr = 1;
        break;
    case VS10_EXP: 
        vs10_transstring.append( "EXP    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        ninstr = 1;
        break;
    case VS10_EXPP:
        vs10_transstring.append( "EXP    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        ninstr = 1;
        break;
    case VS10_FRC:
        char temp[128];
        sprintf( temp, "(%d) Error: FRC built-in macro not yet supported.\n", line );
        errors.set( temp );
        ninstr = 0;
        break;
    case VS10_LIT: 
        vs10_transstring.append( "LIT    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        ninstr = 1;
        break;
    case VS10_LOG: 
        vs10_transstring.append( "LOG    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        ninstr = 1;
        break;
    case VS10_LOGP:
        vs10_transstring.append( "LOG    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        ninstr = 1;
        break;
    case VS10_M3X2:
    case VS10_M3X3:
    case VS10_M3X4:
        if ( dst.mask[0] != 0 )
        {
            ninstr = 0;
            int i = 0;
            while ( i < 4 && dst.mask[i] != 0 )
            {
                if ( dst.mask[i] == 'x' )
                {
                    char oldval;
                    vs10_transstring.append( "DP3    " );
                    oldval = dst.mask[0];
                    dst.mask[0] = 0;
                    dst.Translate();
                    dst.mask[0] = oldval;
                    vs10_transstring.append( ".x, " );
                    src[0].Translate();
                    vs10_transstring.append( ", " );
                    src[1].Translate();
                    vs10_transstring.append( ";\n" );
                    ninstr++;
                }
                if ( dst.mask[i] == 'y' )
                {
                    char oldval;
                    int  oldindex;
                    vs10_transstring.append( "DP3    " );
                    oldval = dst.mask[0];
                    dst.mask[0] = 0;
                    dst.Translate();
                    dst.mask[0] = oldval;
                    vs10_transstring.append( ".y, " );
                    src[0].Translate();
                    vs10_transstring.append( ", " );
                    oldindex = src[1].index;
                    src[1].index = src[1].index + 1;
                    src[1].Translate();
                    src[1].index = oldindex;
                    vs10_transstring.append( ";\n" );
                    ninstr++;
                }
                if ( dst.mask[i] == 'z' && (instid == VS10_M3X3 || instid == VS10_M3X4) )
                {
                    char oldval;
                    int  oldindex;
                    vs10_transstring.append( "DP3    " );
                    oldval = dst.mask[0];
                    dst.mask[0] = 0;
                    dst.Translate();
                    dst.mask[0] = oldval;
                    vs10_transstring.append( ".z, " );
                    src[0].Translate();
                    vs10_transstring.append( ", " );
                    oldindex = src[1].index;
                    src[1].index = src[1].index + 2;
                    src[1].Translate();
                    src[1].index = oldindex;
                    vs10_transstring.append( ";\n" );
                    ninstr++;
                }
                if ( dst.mask[i] == 'w' && instid == VS10_M3X4 )
                {
                    char oldval;
                    int  oldindex;
                    vs10_transstring.append( "DP3    " );
                    oldval = dst.mask[0];
                    dst.mask[0] = 0;
                    dst.Translate();
                    dst.mask[0] = oldval;
                    vs10_transstring.append( ".w, " );
                    src[0].Translate();
                    vs10_transstring.append( ", " );
                    oldindex = src[1].index;
                    src[1].index = src[1].index + 3;
                    src[1].Translate();
                    src[1].index = oldindex;
                    vs10_transstring.append( ";\n" );
                    ninstr++;
                }
                i++;
            }
            return ninstr;
        }
        else
        {
            ninstr = 0;

            char oldval;
            int  oldindex;

            vs10_transstring.append( "DP3    " );
            oldval = dst.mask[0];
            dst.mask[0] = 0;
            dst.Translate();
            dst.mask[0] = oldval;
            vs10_transstring.append( ".x, " );
            src[0].Translate();
            vs10_transstring.append( ", " );
            src[1].Translate();
            vs10_transstring.append( ";\n" );
            ninstr++;

            vs10_transstring.append( "DP3    " );
            oldval = dst.mask[0];
            dst.mask[0] = 0;
            dst.Translate();
            dst.mask[0] = oldval;
            vs10_transstring.append( ".y, " );
            src[0].Translate();
            vs10_transstring.append( ", " );
            oldindex = src[1].index;
            src[1].index = src[1].index + 1;
            src[1].Translate();
            src[1].index = oldindex;
            vs10_transstring.append( ";\n" );
            ninstr++;

            if ( instid == VS10_M3X3 || instid == VS10_M3X4 )
            {
                vs10_transstring.append( "DP3    " );
                oldval = dst.mask[0];
                dst.mask[0] = 0;
                dst.Translate();
                dst.mask[0] = oldval;
                vs10_transstring.append( ".z, " );
                src[0].Translate();
                vs10_transstring.append( ", " );
                oldindex = src[1].index;
                src[1].index = src[1].index + 2;
                src[1].Translate();
                src[1].index = oldindex;
                vs10_transstring.append( ";\n" );
                ninstr++;
            }

            if ( instid == VS10_M3X4 )
            {
                vs10_transstring.append( "DP3    " );
                oldval = dst.mask[0];
                dst.mask[0] = 0;
                dst.Translate();
                dst.mask[0] = oldval;
                vs10_transstring.append( ".w, " );
                src[0].Translate();
                vs10_transstring.append( ", " );
                oldindex = src[1].index;
                src[1].index = src[1].index + 3;
                src[1].Translate();
                src[1].index = oldindex;
                vs10_transstring.append( ";\n" );
                ninstr++;
            }
            return ninstr;
        }
        break;
    case VS10_M4X3:
    case VS10_M4X4:
        if ( dst.mask[0] != 0 )
        {
            ninstr = 0;
            int i = 0;
            while ( i < 4 && dst.mask[i] != 0 )
            {
                if ( dst.mask[i] == 'x' )
                {
                    char oldval;
                    vs10_transstring.append( "DP4    " );
                    oldval = dst.mask[0];
                    dst.mask[0] = 0;
                    dst.Translate();
                    dst.mask[0] = oldval;
                    vs10_transstring.append( ".x, " );
                    src[0].Translate();
                    vs10_transstring.append( ", " );
                    src[1].Translate();
                    vs10_transstring.append( ";\n" );
                    ninstr++;
                }
                if ( dst.mask[i] == 'y' )
                {
                    char oldval;
                    int  oldindex;
                    vs10_transstring.append( "DP4    " );
                    oldval = dst.mask[0];
                    dst.mask[0] = 0;
                    dst.Translate();
                    dst.mask[0] = oldval;
                    vs10_transstring.append( ".y, " );
                    src[0].Translate();
                    vs10_transstring.append( ", " );
                    oldindex = src[1].index;
                    src[1].index = src[1].index + 1;
                    src[1].Translate();
                    src[1].index = oldindex;
                    vs10_transstring.append( ";\n" );
                    ninstr++;
                }
                if ( dst.mask[i] == 'z' )
                {
                    char oldval;
                    int  oldindex;
                    vs10_transstring.append( "DP4    " );
                    oldval = dst.mask[0];
                    dst.mask[0] = 0;
                    dst.Translate();
                    dst.mask[0] = oldval;
                    vs10_transstring.append( ".z, " );
                    src[0].Translate();
                    vs10_transstring.append( ", " );
                    oldindex = src[1].index;
                    src[1].index = src[1].index + 2;
                    src[1].Translate();
                    src[1].index = oldindex;
                    vs10_transstring.append( ";\n" );
                    ninstr++;
                }
                if ( dst.mask[i] == 'w' && instid == VS10_M4X4 )
                {
                    char oldval;
                    int  oldindex;
                    vs10_transstring.append( "DP4    " );
                    oldval = dst.mask[0];
                    dst.mask[0] = 0;
                    dst.Translate();
                    dst.mask[0] = oldval;
                    vs10_transstring.append( ".w, " );
                    src[0].Translate();
                    vs10_transstring.append( ", " );
                    oldindex = src[1].index;
                    src[1].index = src[1].index + 3;
                    src[1].Translate();
                    src[1].index = oldindex;
                    vs10_transstring.append( ";\n" );
                    ninstr++;
                }
                i++;
            }
            return ninstr;
        }
        else
        {
            ninstr = 0;

            char oldval;
            int  oldindex;

            vs10_transstring.append( "DP4    " );
            oldval = dst.mask[0];
            dst.mask[0] = 0;
            dst.Translate();
            dst.mask[0] = oldval;
            vs10_transstring.append( ".x, " );
            src[0].Translate();
            vs10_transstring.append( ", " );
            src[1].Translate();
            vs10_transstring.append( ";\n" );
            ninstr++;

            vs10_transstring.append( "DP4    " );
            oldval = dst.mask[0];
            dst.mask[0] = 0;
            dst.Translate();
            dst.mask[0] = oldval;
            vs10_transstring.append( ".y, " );
            src[0].Translate();
            vs10_transstring.append( ", " );
            oldindex = src[1].index;
            src[1].index = src[1].index + 1;
            src[1].Translate();
            src[1].index = oldindex;
            vs10_transstring.append( ";\n" );
            ninstr++;

            vs10_transstring.append( "DP4    " );
            oldval = dst.mask[0];
            dst.mask[0] = 0;
            dst.Translate();
            dst.mask[0] = oldval;
            vs10_transstring.append( ".z, " );
            src[0].Translate();
            vs10_transstring.append( ", " );
            oldindex = src[1].index;
            src[1].index = src[1].index + 2;
            src[1].Translate();
            src[1].index = oldindex;
            vs10_transstring.append( ";\n" );
            ninstr++;

            if ( instid == VS10_M4X4 )
            {
                vs10_transstring.append( "DP4    " );
                oldval = dst.mask[0];
                dst.mask[0] = 0;
                dst.Translate();
                dst.mask[0] = oldval;
                vs10_transstring.append( ".w, " );
                src[0].Translate();
                vs10_transstring.append( ", " );
                oldindex = src[1].index;
                src[1].index = src[1].index + 3;
                src[1].Translate();
                src[1].index = oldindex;
                vs10_transstring.append( ";\n" );
                ninstr++;
            }
            return ninstr;
        }
        break;
    case VS10_MAD: 
        vs10_transstring.append( "MAD    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        vs10_transstring.append( ", " );
        src[1].Translate();
        vs10_transstring.append( ", " );
        src[2].Translate();
        ninstr = 1;
        break;
    case VS10_MAX: 
        vs10_transstring.append( "MAX    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        vs10_transstring.append( ", " );
        src[1].Translate();
        ninstr = 1;
        break;
    case VS10_MIN: 
        vs10_transstring.append( "MIN    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        vs10_transstring.append( ", " );
        src[1].Translate();
        ninstr = 1;
        break;
    case VS10_MOV:
        if ( dst.type == TYPE_ADDRESS_REG )
            vs10_transstring.append( "ARL    " );
        else
            vs10_transstring.append( "MOV    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        ninstr = 1;
        break;
    case VS10_MUL: 
        vs10_transstring.append( "MUL    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        vs10_transstring.append( ", " );
        src[1].Translate();
        ninstr = 1;
        break;
    case VS10_NOP: 
        return 0;
        break;
    case VS10_RCP: 
        vs10_transstring.append( "RCP    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        ninstr = 1;
        break;
    case VS10_RSQ: 
        vs10_transstring.append( "RSQ    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        ninstr = 1;
        break;
    case VS10_SGE: 
        vs10_transstring.append( "SGE    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        vs10_transstring.append( ", " );
        src[1].Translate();
        ninstr = 1;
        break;
    case VS10_SLT: 
        vs10_transstring.append( "SLT    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        vs10_transstring.append( ", " );
        src[1].Translate();
        ninstr = 1;
        break;
    case VS10_SUB:
        vs10_transstring.append( "ADD    " );
        dst.Translate();
        vs10_transstring.append( ", " );
        src[0].Translate();
        vs10_transstring.append( ", " );
        flag = src[1].sign;
        if ( flag == -1 ) src[1].sign = 1;
        else src[1].sign = -1;
        src[1].Translate();
        src[1].sign = flag;
        ninstr = 1;
        break;
    case VS10_COMMENT:
        vs10_transstring.append( comment );
        return 0;
        break;
    case VS10_HEADER:
        //vs10_transstring.append( "!!VP1.0\n" );
        return 0;
        break;
    case -1:
        vs10_transstring.append( "\n" );
        return 0;
    default:
        errors.set( "VS10Inst::Translate() Internal Error: unknown instruction type\n" );
    }

    vs10_transstring.append( ";\n" );
    return ninstr;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -