CpuTestSimdMove.cs 2.2 KB

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