aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs
diff options
context:
space:
mode:
authorLDj3SNuD <35856442+LDj3SNuD@users.noreply.github.com>2019-04-21 04:07:35 +0200
committergdkchan <gab.dark.100@gmail.com>2019-04-20 23:07:35 -0300
commit74da8785a5f3a79914182d384e966fb5d27fa708 (patch)
treea88f5b88b0c88f987d2f1a2cc1f8ac4aa5fca5e0 /Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs
parent9e923b1473ca565df2012de10d319e336eab67f4 (diff)
Sse optimized the 32-bit Vector & Scalar integer-to-fp conversion instructions (signed & unsigned); added the related Gp & V_Fixed Tests (signed & unsigned). (#662)
* Update CpuTestSimdCvt.cs * Update CpuTestSimd.cs * Update CpuTestSimdShImm.cs * Update InstEmitSimdCvt.cs * Update OpCodeTable.cs * Update InstEmitSimdCvt.cs
Diffstat (limited to 'Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs')
-rw-r--r--Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs62
1 files changed, 62 insertions, 0 deletions
diff --git a/Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs b/Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs
index cabaac02..c08949a5 100644
--- a/Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs
+++ b/Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs
@@ -194,6 +194,24 @@ namespace Ryujinx.Tests.Cpu
};
}
+ private static uint[] _SU_Cvt_F_V_Fixed_2S_4S_()
+ {
+ return new uint[]
+ {
+ 0x0F20E400u, // SCVTF V0.2S, V0.2S, #32
+ 0x2F20E400u // UCVTF V0.2S, V0.2S, #32
+ };
+ }
+
+ private static uint[] _SU_Cvt_F_V_Fixed_2D_()
+ {
+ return new uint[]
+ {
+ 0x4F40E400u, // SCVTF V0.2D, V0.2D, #64
+ 0x6F40E400u // UCVTF V0.2D, V0.2D, #64
+ };
+ }
+
private static uint[] _SU_Shll_V_8B8H_16B8H_()
{
return new uint[]
@@ -454,6 +472,50 @@ namespace Ryujinx.Tests.Cpu
CompareAgainstUnicorn();
}
+ [Test, Pairwise] [Explicit]
+ public void SU_Cvt_F_V_Fixed_2S_4S([ValueSource("_SU_Cvt_F_V_Fixed_2S_4S_")] uint opcodes,
+ [Values(0u)] uint rd,
+ [Values(1u, 0u)] uint rn,
+ [ValueSource("_2S_")] [Random(RndCnt)] ulong z,
+ [ValueSource("_2S_")] [Random(RndCnt)] ulong a,
+ [Values(1u, 32u)] [Random(2u, 31u, RndCntFBits)] uint fBits,
+ [Values(0b0u, 0b1u)] uint q) // <2S, 4S>
+ {
+ uint immHb = (64 - fBits) & 0x7F;
+
+ opcodes |= ((rn & 31) << 5) | ((rd & 31) << 0);
+ opcodes |= (immHb << 16);
+ opcodes |= ((q & 1) << 30);
+
+ Vector128<float> v0 = MakeVectorE0E1(z, z);
+ Vector128<float> v1 = MakeVectorE0E1(a, a * q);
+
+ SingleOpcode(opcodes, v0: v0, v1: v1);
+
+ CompareAgainstUnicorn();
+ }
+
+ [Test, Pairwise] [Explicit]
+ public void SU_Cvt_F_V_Fixed_2D([ValueSource("_SU_Cvt_F_V_Fixed_2D_")] uint opcodes,
+ [Values(0u)] uint rd,
+ [Values(1u, 0u)] uint rn,
+ [ValueSource("_1D_")] [Random(RndCnt)] ulong z,
+ [ValueSource("_1D_")] [Random(RndCnt)] ulong a,
+ [Values(1u, 64u)] [Random(2u, 63u, RndCntFBits)] uint fBits)
+ {
+ uint immHb = (128 - fBits) & 0x7F;
+
+ opcodes |= ((rn & 31) << 5) | ((rd & 31) << 0);
+ opcodes |= (immHb << 16);
+
+ Vector128<float> v0 = MakeVectorE0E1(z, z);
+ Vector128<float> v1 = MakeVectorE0E1(a, a);
+
+ SingleOpcode(opcodes, v0: v0, v1: v1);
+
+ CompareAgainstUnicorn(fpTolerances: FpTolerances.UpToOneUlpsD); // unsigned
+ }
+
[Test, Pairwise, Description("SHL <V><d>, <V><n>, #<shift>")]
public void Shl_S_D([Values(0u)] uint rd,
[Values(1u, 0u)] uint rn,