public void BranchFullTest()
{
var RegsV = new[] {
"r10, r10",
"r10, r11",
"r10, r12",
"r11, r10",
"r11, r11",
"r11, r12",
"r12, r10",
"r12, r11",
"r12, r12",
};
var Regs0 = new[] {
"r10",
"r11",
"r12",
};
Func<String, String[], IEnumerable<int>> Generator = (String Branch, String[] RegsList) =>
{
var Results = new List<int>();
foreach (var Regs in RegsList)
{
ExecuteAssembly(
@"
li r10, -1
li r11, 0
li r12, +1
%BRANCH% %REGS%, label_yes
li r1, 2
b label_no
nop
label_yes:
li r1, 1
b label_end
nop
label_no:
li r1, 0
b label_end
nop
label_end:
nop
"
.Replace("%BRANCH%", Branch)
.Replace("%REGS%", Regs)
);
Results.Add(CpuThreadState.GPR[1]);
}
return Results;
};
Assert.AreEqual("[1,0,0,0,1,0,0,0,1]", Generator("beq", RegsV).ToJson());
Assert.AreEqual("[0,1,1,1,0,1,1,1,0]", Generator("bne", RegsV).ToJson());
Assert.AreEqual("[1,0,0]", Generator("bltz", Regs0).ToJson());
Assert.AreEqual("[1,1,0]", Generator("blez", Regs0).ToJson());
Assert.AreEqual("[0,0,1]", Generator("bgtz", Regs0).ToJson());
Assert.AreEqual("[0,1,1]", Generator("bgez", Regs0).ToJson());
//Assert.AreEqual("[0,0,1]", Generator("bgtzl", Regs0).ToJson());
}