public void FloatTest()
{
//CpuThreadState.FPR[27] = 2.0f;
//CpuThreadState.FPR[28] = 20.0f;
CpuThreadState.FPR[29] = 81.0f;
CpuThreadState.FPR[30] = -1.0f;
CpuThreadState.FPR[31] = 3.5f;
float MemoryValue = -2.0f;
CpuThreadState.Memory.WriteSafe<float>(0x88000000, MemoryValue);
ExecuteAssembly(@"
; Unary
mov.s f0, f30
neg.s f1, f31
sqrt.s f2, f29
abs.s f3, f30
abs.s f4, f31
; Binary
add.s f10, f30, f31
sub.s f11, f30, f31
div.s f12, f30, f31
mul.s f13, f30, f31
li r10, 0x88000000
lwc1 f14, 0(r10)
swc1 f14, 4(r10)
lwc1 f15, 4(r10)
");
// Unary
Assert.AreEqual(CpuThreadState.FPR[0], CpuThreadState.FPR[30]);
Assert.AreEqual(CpuThreadState.FPR[1], -CpuThreadState.FPR[31]);
Assert.AreEqual(CpuThreadState.FPR[2], Math.Sqrt(CpuThreadState.FPR[29]));
Assert.AreEqual(CpuThreadState.FPR[3], Math.Abs(CpuThreadState.FPR[30]));
Assert.AreEqual(CpuThreadState.FPR[4], Math.Abs(CpuThreadState.FPR[31]));
Assert.AreEqual(CpuThreadState.FPR[10], CpuThreadState.FPR[30] + CpuThreadState.FPR[31]);
Assert.AreEqual(CpuThreadState.FPR[11], CpuThreadState.FPR[30] - CpuThreadState.FPR[31]);
Assert.AreEqual(CpuThreadState.FPR[12], CpuThreadState.FPR[30] / CpuThreadState.FPR[31]);
Assert.AreEqual(CpuThreadState.FPR[13], CpuThreadState.FPR[30] * CpuThreadState.FPR[31]);
Assert.AreEqual(CpuThreadState.FPR[14], MemoryValue);
Assert.AreEqual(CpuThreadState.FPR[15], MemoryValue);
}