private void ParseBinaryEncoding(string Encoding)
{
Value = Mask = 0;
foreach (var Part in Encoding.Split(':'))
{
if (Part[0] == '-' || Part[0] == '0' || Part[0] == '1')
{
foreach (var Char in Part)
{
Mask <<= 1; Value <<= 1;
switch (Char)
{
case '0': Mask |= 1; Value |= 0; break;
case '1': Mask |= 1; Value |= 1; break;
case '-': Mask |= 0; Value |= 0; break;
}
}
}
else
{
int Displacement = 0;
switch (Part)
{
case "cstw": case "cstz": case "csty": case "cstx":
case "absw": case "absz": case "absy": case "absx":
case "mskw": case "mskz": case "msky": case "mskx":
case "negw": case "negz": case "negy": case "negx":
case "one": case "two":
case "vt1":
Displacement = 1;
break;
case "vt2":
case "satw": case "satz": case "saty": case "satx":
case "swzw": case "swzz": case "swzy": case "swzx":
Displacement = 2;
break;
case "imm3":
Displacement = 3;
break;
case "imm4": case "fcond":
Displacement = 4;
break;
case "c0dr": case "c0cr": case "c1dr": case "c1cr": case "imm5": case "vt5":
case "rs": case "rd": case "rt": case "sa": case "lsb": case "msb": case "fs": case "fd": case "ft":
Displacement = 5;
break;
case "vs": case "vt": case "vd": case "imm7":
Displacement = 7;
break;
case "imm8" : Displacement = 8 ; break;
case "imm14": Displacement = 14; break;
case "imm16": Displacement = 16; break;
case "imm20": Displacement = 20; break;
case "imm26": Displacement = 26; break;
default:
throw(new Exception("Unknown part '" + Part + "'"));
}
Mask <<= Displacement; Value <<= Displacement;
}
}
}