public AstNodeStm _vcmovtf(bool True)
{
var Register = (int)Instruction.IMM3;
Func<int, AstNodeExpr> _VCC = (Index) =>
{
AstNodeExpr Ret = ast.VCC(Index);
if (!True) Ret = ast.Unary("!", Ret);
return Ret;
};
if (Register < 6)
{
// TODO: CHECK THIS!
return ast.IfElse(
_VCC(Register),
VEC_VD.SetVector(Index => VEC_VS[Index], PC),
ast.Statements(
ast.Assign(ast.PrefixSourceEnabled(), false),
//ast.If(ast.PrefixDestinationEnabled(), VEC_VD.SetVector(Index => VEC_VD[Index], PC))
ast.If(ast.PrefixDestinationEnabled(), VEC_VD.SetVector(Index => VEC_VD[Index], PC))
)
);
}
if (Register == 6)
{
return VEC_VD.SetVector(Index => ast.Ternary(_VCC(Index), VEC_VS[Index], VEC_VD[Index]), PC);
}
// Register == 7
// Never copy (checked on a PSP)
return ast.Statement();
}