CpuTestSimdMove.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using ChocolArm64.State;
  2. using NUnit.Framework;
  3. namespace Ryujinx.Tests.Cpu
  4. {
  5. [TestFixture]
  6. public partial class CpuTest
  7. {
  8. [TestCase(0u, 0u, 0x2313221221112010ul, 0x0000000000000000ul)]
  9. [TestCase(1u, 0u, 0x2313221221112010ul, 0x2717261625152414ul)]
  10. [TestCase(0u, 1u, 0x2322131221201110ul, 0x0000000000000000ul)]
  11. [TestCase(1u, 1u, 0x2322131221201110ul, 0x2726171625241514ul)]
  12. [TestCase(0u, 2u, 0x2322212013121110ul, 0x0000000000000000ul)]
  13. [TestCase(1u, 2u, 0x2322212013121110ul, 0x2726252417161514ul)]
  14. [TestCase(1u, 3u, 0x1716151413121110ul, 0x2726252423222120ul)]
  15. public void Zip1_V(uint Q, uint size, ulong Result_0, ulong Result_1)
  16. {
  17. // ZIP1 V0.<T>, V1.<T>, V2.<T>
  18. uint Opcode = 0x0E023820 | (Q << 30) | (size << 22);
  19. AVec V1 = new AVec { X0 = 0x1716151413121110, X1 = 0x1F1E1D1C1B1A1918 };
  20. AVec V2 = new AVec { X0 = 0x2726252423222120, X1 = 0x2F2E2D2C2B2A2928 };
  21. AThreadState ThreadState = SingleOpcode(Opcode, V1: V1, V2: V2);
  22. Assert.AreEqual(Result_0, ThreadState.V0.X0);
  23. Assert.AreEqual(Result_1, ThreadState.V0.X1);
  24. }
  25. [TestCase(0u, 0u, 0x2717261625152414ul, 0x0000000000000000ul)]
  26. [TestCase(1u, 0u, 0x2B1B2A1A29192818ul, 0x2F1F2E1E2D1D2C1Cul)]
  27. [TestCase(0u, 1u, 0x2726171625241514ul, 0x0000000000000000ul)]
  28. [TestCase(1u, 1u, 0x2B2A1B1A29281918ul, 0x2F2E1F1E2D2C1D1Cul)]
  29. [TestCase(0u, 2u, 0x2726252417161514ul, 0x0000000000000000ul)]
  30. [TestCase(1u, 2u, 0x2B2A29281B1A1918ul, 0x2F2E2D2C1F1E1D1Cul)]
  31. [TestCase(1u, 3u, 0x1F1E1D1C1B1A1918ul, 0x2F2E2D2C2B2A2928ul)]
  32. public void Zip2_V(uint Q, uint size, ulong Result_0, ulong Result_1)
  33. {
  34. // ZIP2 V0.<T>, V1.<T>, V2.<T>
  35. uint Opcode = 0x0E027820 | (Q << 30) | (size << 22);
  36. AVec V1 = new AVec { X0 = 0x1716151413121110, X1 = 0x1F1E1D1C1B1A1918 };
  37. AVec V2 = new AVec { X0 = 0x2726252423222120, X1 = 0x2F2E2D2C2B2A2928 };
  38. AThreadState ThreadState = SingleOpcode(Opcode, V1: V1, V2: V2);
  39. Assert.AreEqual(Result_0, ThreadState.V0.X0);
  40. Assert.AreEqual(Result_1, ThreadState.V0.X1);
  41. }
  42. }
  43. }