📄 vs1.0_inst.cpp
字号:
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 + -