diff --git a/Ryujinx.Tests/Cpu/CpuTestSimdFmov.cs b/Ryujinx.Tests/Cpu/CpuTestSimdFmov.cs new file mode 100644 index 0000000000..a7e0e0f968 --- /dev/null +++ b/Ryujinx.Tests/Cpu/CpuTestSimdFmov.cs @@ -0,0 +1,61 @@ +#define SimdFmov + +using NUnit.Framework; + +using System.Runtime.Intrinsics; + +namespace Ryujinx.Tests.Cpu +{ + [Category("SimdFmov")] + public sealed class CpuTestSimdFmov : CpuTest + { +#if SimdFmov + +#region "ValueSource" + private static uint[] _F_Mov_Si_S_() + { + return new uint[] + { + 0x1E201000u // FMOV S0, #2.0 + }; + } + + private static uint[] _F_Mov_Si_D_() + { + return new uint[] + { + 0x1E601000u // FMOV D0, #2.0 + }; + } +#endregion + + [Test, Pairwise] [Explicit] + public void F_Mov_Si_S([ValueSource("_F_Mov_Si_S_")] uint opcodes, + [Range(0u, 255u, 1u)] uint imm8) + { + opcodes |= ((imm8 & 0xFFu) << 13); + + ulong z = TestContext.CurrentContext.Random.NextULong(); + Vector128 v0 = MakeVectorE0E1(z, z); + + SingleOpcode(opcodes, v0: v0); + + CompareAgainstUnicorn(); + } + + [Test, Pairwise] [Explicit] + public void F_Mov_Si_D([ValueSource("_F_Mov_Si_D_")] uint opcodes, + [Range(0u, 255u, 1u)] uint imm8) + { + opcodes |= ((imm8 & 0xFFu) << 13); + + ulong z = TestContext.CurrentContext.Random.NextULong(); + Vector128 v0 = MakeVectorE1(z); + + SingleOpcode(opcodes, v0: v0); + + CompareAgainstUnicorn(); + } +#endif + } +}