public void FloatCompTest()
{
// %t, %s, %a, %ne
CpuThreadState.FPR[1] = 1.0f;
CpuThreadState.FPR[2] = 2.0f;
ExecuteAssembly(@"c.eq.s f1, f2");
Assert.AreEqual(false, CpuThreadState.Fcr31.CC);
ExecuteAssembly(@"c.eq.s f1, f1");
Assert.AreEqual(true, CpuThreadState.Fcr31.CC);
ExecuteAssembly(@"c.lt.s f1, f2");
Assert.AreEqual(true, CpuThreadState.Fcr31.CC);
ExecuteAssembly(@"c.lt.s f2, f1");
Assert.AreEqual(false, CpuThreadState.Fcr31.CC);
ExecuteAssembly(@"c.lt.s f1, f1");
Assert.AreEqual(false, CpuThreadState.Fcr31.CC);
Action<String> Gen = (INSTRUCTION_NAME) =>
{
ExecuteAssembly(@"
li r1, -1
c.eq.s f1, f1
%INSTRUCTION_NAME% label
nop
li r1, 0
b end
nop
label:
li r1, 1
b end
nop
end:
nop
".Replace("%INSTRUCTION_NAME%", INSTRUCTION_NAME));
};
Gen("bc1t");
Assert.AreEqual(1, CpuThreadState.GPR[1]);
Gen("bc1f");
Assert.AreEqual(0, CpuThreadState.GPR[1]);
}