aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs
diff options
context:
space:
mode:
authorLDj3SNuD <35856442+LDj3SNuD@users.noreply.github.com>2019-06-30 01:02:48 +0200
committergdkchan <gab.dark.100@gmail.com>2019-06-29 20:02:48 -0300
commit10c74182babaf8cf6bedaeffd64c3109df4ea816 (patch)
treeee55c64d3a022e322f995e129187251583027aae /Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs
parentba86a5d7f3aa0127c4732c739af3f6086fb6acd9 (diff)
Implement the remaining tests for Simd and Fp instructions of data processing type. Small opts. for Fmov_Ftoi/1 & Fmov_Itof/1 Insts. (#709)
* Update CpuTestSimdShImm.cs * Update OpCodeTable.cs * Update CpuTestSimdReg.cs * Add Ins_Gp & Ins_V Tests. Improve Smov_S & Umov_S Tests. * Add Bic_Vi & Orr_Vi Tests. * OpTable Fixes for Bic_Vi & Orr_Vi Insts. * Add Saddlv_V & Uaddlv_V Tests. * Nit. * Add Smull_V & Umull_V Tests. Improve Simd Permute Tests. * Nit. * Add Fcsel_S Test. * Add Fnmadd_S, Fnmsub_S & Fnmul_S Tests. * Fmov_V -> Fmov_Vi * OpTable Fixes for Fmov_Si & Fmov_Vi Insts. * Add Fmov_Vi Test. * Add Fmov_S Test. * Add Fmov_Si Test. Add new test category SimdFmov. * Nit. * OpTable Fixes for Fmov_Ftoi/1 & Fmov_Itof/1 Insts. * Small opts. for Fmov_Ftoi/1 & Fmov_Itof/1 Insts. Small simpl. for Smov_S Inst. Remove unnecessary method EmitIntZeroUpperIfNeeded. * Add Fmov_Ftoi/1 & Fmov_Itof/1 Tests.
Diffstat (limited to 'Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs')
-rw-r--r--Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs58
1 files changed, 58 insertions, 0 deletions
diff --git a/Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs b/Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs
index 48efc18f..4ccd43db 100644
--- a/Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs
+++ b/Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs
@@ -115,6 +115,22 @@ namespace Ryujinx.Tests.Cpu
0x1E620430u // FCCMPE D1, D2, #0, EQ
};
}
+
+ private static uint[] _F_Csel_S_S_()
+ {
+ return new uint[]
+ {
+ 0x1E220C20u // FCSEL S0, S1, S2, EQ
+ };
+ }
+
+ private static uint[] _F_Csel_S_D_()
+ {
+ return new uint[]
+ {
+ 0x1E620C20u // FCSEL D0, D1, D2, EQ
+ };
+ }
#endregion
private const int RndCnt = 2;
@@ -173,6 +189,48 @@ namespace Ryujinx.Tests.Cpu
CompareAgainstUnicorn(fpsrMask: Fpsr.Ioc);
}
+
+ [Test, Pairwise] [Explicit]
+ public void F_Csel_S_S([ValueSource("_F_Csel_S_S_")] uint opcodes,
+ [ValueSource("_1S_F_")] ulong a,
+ [ValueSource("_1S_F_")] ulong b,
+ [Values(0b0000u, 0b0001u, 0b0010u, 0b0011u, // <EQ, NE, CS/HS, CC/LO,
+ 0b0100u, 0b0101u, 0b0110u, 0b0111u, // MI, PL, VS, VC,
+ 0b1000u, 0b1001u, 0b1010u, 0b1011u, // HI, LS, GE, LT,
+ 0b1100u, 0b1101u, 0b1110u, 0b1111u)] uint cond) // GT, LE, AL, NV>
+ {
+ opcodes |= ((cond & 15) << 12);
+
+ ulong z = TestContext.CurrentContext.Random.NextULong();
+ Vector128<float> v0 = MakeVectorE0E1(z, z);
+ Vector128<float> v1 = MakeVectorE0(a);
+ Vector128<float> v2 = MakeVectorE0(b);
+
+ SingleOpcode(opcodes, v0: v0, v1: v1, v2: v2);
+
+ CompareAgainstUnicorn();
+ }
+
+ [Test, Pairwise] [Explicit]
+ public void F_Csel_S_D([ValueSource("_F_Csel_S_D_")] uint opcodes,
+ [ValueSource("_1D_F_")] ulong a,
+ [ValueSource("_1D_F_")] ulong b,
+ [Values(0b0000u, 0b0001u, 0b0010u, 0b0011u, // <EQ, NE, CS/HS, CC/LO,
+ 0b0100u, 0b0101u, 0b0110u, 0b0111u, // MI, PL, VS, VC,
+ 0b1000u, 0b1001u, 0b1010u, 0b1011u, // HI, LS, GE, LT,
+ 0b1100u, 0b1101u, 0b1110u, 0b1111u)] uint cond) // GT, LE, AL, NV>
+ {
+ opcodes |= ((cond & 15) << 12);
+
+ ulong z = TestContext.CurrentContext.Random.NextULong();
+ Vector128<float> v0 = MakeVectorE1(z);
+ Vector128<float> v1 = MakeVectorE0(a);
+ Vector128<float> v2 = MakeVectorE0(b);
+
+ SingleOpcode(opcodes, v0: v0, v1: v1, v2: v2);
+
+ CompareAgainstUnicorn();
+ }
#endif
}
}