public void OpRRRTest()
{
var Results = new Queue<int>();
var InstructionNames = new[] { "add", "addu", "sub", "subu", "and", "or", "xor", "nor" };
var Numbers = new int[] { 0, 0, 1, -99999, 77777, -1, 0x12345678, unchecked((int)0x87654321), int.MaxValue, int.MaxValue - 1, int.MinValue, int.MinValue + 1 };
int ResultOffset = 17;
int InputOffset = 0;
foreach (var instructionName in InstructionNames)
{
for (int n = 0; n < Numbers.Length; n++)
{
string Assembly = "";
for (int m = 0; m < Numbers.Length; m++)
{
CpuThreadState.GPR[InputOffset + m] = Numbers[m];
Assembly += String.Format(
"{0} r{1}, r{2}, r{3}\n",
instructionName,
m + ResultOffset,
n + InputOffset,
m + InputOffset
);
}
//Console.WriteLine("{0}", Assembly);
ExecuteAssembly(Assembly);
for (int m = 0; m < Numbers.Length; m++)
{
Results.Enqueue(CpuThreadState.GPR[m + ResultOffset]);
}
}
}
var ExpectedLines = new Queue<string>(stringToLines(@"
add.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
add.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
add.1: 1,1,2,-99998,77778,0,305419897,-2023406814,-2147483648,2147483647,-2147483647,-2147483646,
add.-99999: -99999,-99999,-99998,-199998,-22222,-100000,305319897,-2023506814,2147383648,2147383647,2147383649,2147383650,
add.77777: 77777,77777,77778,-22222,155554,77776,305497673,-2023329038,-2147405872,-2147405873,-2147405871,-2147405870,
add.-1: -1,-1,0,-100000,77776,-2,305419895,-2023406816,2147483646,2147483645,2147483647,-2147483648,
add.305419896: 305419896,305419896,305419897,305319897,305497673,305419895,610839792,-1717986919,-1842063753,-1842063754,-1842063752,-1842063751,
add.-2023406815: -2023406815,-2023406815,-2023406814,-2023506814,-2023329038,-2023406816,-1717986919,248153666,124076832,124076831,124076833,124076834,
add.2147483647: 2147483647,2147483647,-2147483648,2147383648,-2147405872,2147483646,-1842063753,124076832,-2,-3,-1,0,
add.2147483646: 2147483646,2147483646,2147483647,2147383647,-2147405873,2147483645,-1842063754,124076831,-3,-4,-2,-1,
add.-2147483648: -2147483648,-2147483648,-2147483647,2147383649,-2147405871,2147483647,-1842063752,124076833,-1,-2,0,1,
add.-2147483647: -2147483647,-2147483647,-2147483646,2147383650,-2147405870,-2147483648,-1842063751,124076834,0,-1,1,2,
addu.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
addu.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
addu.1: 1,1,2,-99998,77778,0,305419897,-2023406814,-2147483648,2147483647,-2147483647,-2147483646,
addu.-99999: -99999,-99999,-99998,-199998,-22222,-100000,305319897,-2023506814,2147383648,2147383647,2147383649,2147383650,
addu.77777: 77777,77777,77778,-22222,155554,77776,305497673,-2023329038,-2147405872,-2147405873,-2147405871,-2147405870,
addu.-1: -1,-1,0,-100000,77776,-2,305419895,-2023406816,2147483646,2147483645,2147483647,-2147483648,
addu.305419896: 305419896,305419896,305419897,305319897,305497673,305419895,610839792,-1717986919,-1842063753,-1842063754,-1842063752,-1842063751,
addu.-2023406815: -2023406815,-2023406815,-2023406814,-2023506814,-2023329038,-2023406816,-1717986919,248153666,124076832,124076831,124076833,124076834,
addu.2147483647: 2147483647,2147483647,-2147483648,2147383648,-2147405872,2147483646,-1842063753,124076832,-2,-3,-1,0,
addu.2147483646: 2147483646,2147483646,2147483647,2147383647,-2147405873,2147483645,-1842063754,124076831,-3,-4,-2,-1,
addu.-2147483648: -2147483648,-2147483648,-2147483647,2147383649,-2147405871,2147483647,-1842063752,124076833,-1,-2,0,1,
addu.-2147483647: -2147483647,-2147483647,-2147483646,2147383650,-2147405870,-2147483648,-1842063751,124076834,0,-1,1,2,
sub.0: 0,0,-1,99999,-77777,1,-305419896,2023406815,-2147483647,-2147483646,-2147483648,2147483647,
sub.0: 0,0,-1,99999,-77777,1,-305419896,2023406815,-2147483647,-2147483646,-2147483648,2147483647,
sub.1: 1,1,0,100000,-77776,2,-305419895,2023406816,-2147483646,-2147483645,-2147483647,-2147483648,
sub.-99999: -99999,-99999,-100000,0,-177776,-99998,-305519895,2023306816,2147383650,2147383651,2147383649,2147383648,
sub.77777: 77777,77777,77776,177776,0,77778,-305342119,2023484592,-2147405870,-2147405869,-2147405871,-2147405872,
sub.-1: -1,-1,-2,99998,-77778,0,-305419897,2023406814,-2147483648,-2147483647,2147483647,2147483646,
sub.305419896: 305419896,305419896,305419895,305519895,305342119,305419897,0,-1966140585,-1842063751,-1842063750,-1842063752,-1842063753,
sub.-2023406815: -2023406815,-2023406815,-2023406816,-2023306816,-2023484592,-2023406814,1966140585,0,124076834,124076835,124076833,124076832,
sub.2147483647: 2147483647,2147483647,2147483646,-2147383650,2147405870,-2147483648,1842063751,-124076834,0,1,-1,-2,
sub.2147483646: 2147483646,2147483646,2147483645,-2147383651,2147405869,2147483647,1842063750,-124076835,-1,0,-2,-3,
sub.-2147483648: -2147483648,-2147483648,2147483647,-2147383649,2147405871,-2147483647,1842063752,-124076833,1,2,0,-1,
sub.-2147483647: -2147483647,-2147483647,-2147483648,-2147383648,2147405872,-2147483646,1842063753,-124076832,2,3,1,0,
subu.0: 0,0,-1,99999,-77777,1,-305419896,2023406815,-2147483647,-2147483646,-2147483648,2147483647,
subu.0: 0,0,-1,99999,-77777,1,-305419896,2023406815,-2147483647,-2147483646,-2147483648,2147483647,
subu.1: 1,1,0,100000,-77776,2,-305419895,2023406816,-2147483646,-2147483645,-2147483647,-2147483648,
subu.-99999: -99999,-99999,-100000,0,-177776,-99998,-305519895,2023306816,2147383650,2147383651,2147383649,2147383648,
subu.77777: 77777,77777,77776,177776,0,77778,-305342119,2023484592,-2147405870,-2147405869,-2147405871,-2147405872,
subu.-1: -1,-1,-2,99998,-77778,0,-305419897,2023406814,-2147483648,-2147483647,2147483647,2147483646,
subu.305419896: 305419896,305419896,305419895,305519895,305342119,305419897,0,-1966140585,-1842063751,-1842063750,-1842063752,-1842063753,
subu.-2023406815: -2023406815,-2023406815,-2023406816,-2023306816,-2023484592,-2023406814,1966140585,0,124076834,124076835,124076833,124076832,
subu.2147483647: 2147483647,2147483647,2147483646,-2147383650,2147405870,-2147483648,1842063751,-124076834,0,1,-1,-2,
subu.2147483646: 2147483646,2147483646,2147483645,-2147383651,2147405869,2147483647,1842063750,-124076835,-1,0,-2,-3,
subu.-2147483648: -2147483648,-2147483648,2147483647,-2147383649,2147405871,-2147483647,1842063752,-124076833,1,2,0,-1,
subu.-2147483647: -2147483647,-2147483647,-2147483648,-2147383648,2147405872,-2147483646,1842063753,-124076832,2,3,1,0,
and.0: 0,0,0,0,0,0,0,0,0,0,0,0,
and.0: 0,0,0,0,0,0,0,0,0,0,0,0,
and.1: 0,0,1,1,1,1,0,1,1,0,0,1,
and.-99999: 0,0,1,-99999,10561,-99999,305418336,-2023472863,2147383649,2147383648,-2147483648,-2147483647,
and.77777: 0,0,1,10561,77777,77777,1616,66305,77777,77776,0,1,
and.-1: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
and.305419896: 0,0,0,305418336,1616,305419896,305419896,35930656,305419896,305419896,0,0,
and.-2023406815: 0,0,1,-2023472863,66305,-2023406815,35930656,-2023406815,124076833,124076832,-2147483648,-2147483647,
and.2147483647: 0,0,1,2147383649,77777,2147483647,305419896,124076833,2147483647,2147483646,0,1,
and.2147483646: 0,0,0,2147383648,77776,2147483646,305419896,124076832,2147483646,2147483646,0,0,
and.-2147483648: 0,0,0,-2147483648,0,-2147483648,0,-2147483648,0,0,-2147483648,-2147483648,
and.-2147483647: 0,0,1,-2147483647,1,-2147483647,0,-2147483647,1,0,-2147483648,-2147483647,
or.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
or.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
or.1: 1,1,1,-99999,77777,-1,305419897,-2023406815,2147483647,2147483647,-2147483647,-2147483647,
or.-99999: -99999,-99999,-99999,-99999,-32783,-1,-98439,-33951,-1,-1,-99999,-99999,
or.77777: 77777,77777,77777,-32783,77777,-1,305496057,-2023395343,2147483647,2147483647,-2147405871,-2147405871,
or.-1: -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
or.305419896: 305419896,305419896,305419897,-98439,305496057,-1,305419896,-1753917575,2147483647,2147483646,-1842063752,-1842063751,
or.-2023406815: -2023406815,-2023406815,-2023406815,-33951,-2023395343,-1,-1753917575,-2023406815,-1,-1,-2023406815,-2023406815,
or.2147483647: 2147483647,2147483647,2147483647,-1,2147483647,-1,2147483647,-1,2147483647,2147483647,-1,-1,
or.2147483646: 2147483646,2147483646,2147483647,-1,2147483647,-1,2147483646,-1,2147483647,2147483646,-2,-1,
or.-2147483648: -2147483648,-2147483648,-2147483647,-99999,-2147405871,-1,-1842063752,-2023406815,-1,-2,-2147483648,-2147483647,
or.-2147483647: -2147483647,-2147483647,-2147483647,-99999,-2147405871,-1,-1842063751,-2023406815,-1,-1,-2147483647,-2147483647,
xor.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
xor.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
xor.1: 1,1,0,-100000,77776,-2,305419897,-2023406816,2147483646,2147483647,-2147483647,-2147483648,
xor.-99999: -99999,-99999,-100000,0,-43344,99998,-305516775,2023438912,-2147383650,-2147383649,2147383649,2147383648,
xor.77777: 77777,77777,77776,-43344,0,-77778,305494441,-2023461648,2147405870,2147405871,-2147405871,-2147405872,
xor.-1: -1,-1,-2,99998,-77778,0,-305419897,2023406814,-2147483648,-2147483647,2147483647,2147483646,
xor.305419896: 305419896,305419896,305419897,-305516775,305494441,-305419897,0,-1789848231,1842063751,1842063750,-1842063752,-1842063751,
xor.-2023406815: -2023406815,-2023406815,-2023406816,2023438912,-2023461648,2023406814,-1789848231,0,-124076834,-124076833,124076833,124076832,
xor.2147483647: 2147483647,2147483647,2147483646,-2147383650,2147405870,-2147483648,1842063751,-124076834,0,1,-1,-2,
xor.2147483646: 2147483646,2147483646,2147483647,-2147383649,2147405871,-2147483647,1842063750,-124076833,1,0,-2,-1,
xor.-2147483648: -2147483648,-2147483648,-2147483647,2147383649,-2147405871,2147483647,-1842063752,124076833,-1,-2,0,1,
xor.-2147483647: -2147483647,-2147483647,-2147483648,2147383648,-2147405872,2147483646,-1842063751,124076832,-2,-1,1,0,
nor.0: -1,-1,-2,99998,-77778,0,-305419897,2023406814,-2147483648,-2147483647,2147483647,2147483646,
nor.0: -1,-1,-2,99998,-77778,0,-305419897,2023406814,-2147483648,-2147483647,2147483647,2147483646,
nor.1: -2,-2,-2,99998,-77778,0,-305419898,2023406814,-2147483648,-2147483648,2147483646,2147483646,
nor.-99999: 99998,99998,99998,99998,32782,0,98438,33950,0,0,99998,99998,
nor.77777: -77778,-77778,-77778,32782,-77778,0,-305496058,2023395342,-2147483648,-2147483648,2147405870,2147405870,
nor.-1: 0,0,0,0,0,0,0,0,0,0,0,0,
nor.305419896: -305419897,-305419897,-305419898,98438,-305496058,0,-305419897,1753917574,-2147483648,-2147483647,1842063751,1842063750,
nor.-2023406815: 2023406814,2023406814,2023406814,33950,2023395342,0,1753917574,2023406814,0,0,2023406814,2023406814,
nor.2147483647: -2147483648,-2147483648,-2147483648,0,-2147483648,0,-2147483648,0,-2147483648,-2147483648,0,0,
nor.2147483646: -2147483647,-2147483647,-2147483648,0,-2147483648,0,-2147483647,0,-2147483648,-2147483647,1,0,
nor.-2147483648: 2147483647,2147483647,2147483646,99998,2147405870,0,1842063751,2023406814,0,1,2147483647,2147483646,
nor.-2147483647: 2147483646,2147483646,2147483646,99998,2147405870,0,1842063750,2023406814,0,0,2147483646,2147483646,
"));
foreach (var instructionName in InstructionNames)
{
foreach (var LeftNumber in Numbers)
{
var Line = String.Format("{0}.{1}: ", instructionName, LeftNumber);
foreach (var RightNumber in Numbers)
{
Line += String.Format("{0},", Results.Dequeue());
}
Console.WriteLine(Line);
//Assert.AreEqual(ExpectedLines.Dequeue(), Line);
}
}
}